如何在不同的工作空间上启动应用程序?


13

我需要在不同于当前使用的工作区上启动GUI应用程序[Lotus Symphony]。[例如:GNOME桌面上有4个工作区。]

问:我该怎么做?

ps:这是必需的,因为Lotus Symphony在重新引导后的首次启动非常非常慢,但是在使用一次之后,启动非常迅速。我认为它可以缓存自己。这就是为什么我想在不同工作区的每次启动时启动它,因此以后如果需要使用它,它将很快。


我想知道您正在使用什么操作系统和什么版本的GNOME可能会有所帮助。
enzotib 2011年

ubuntu 10.04-gnome-desktop-data 1:2.30.2-0ubuntu1
LanceBaynes

Answers:


8

查看Devil's Pie(尽管我不确定它是否可以与Gnome3一起使用),并且您可以找到有关stackoverflow bash的更多有用信息。

基本上,您应该执行以下操作:

#!/bin/bash
wmctrl -n 8

firefox &
thunderbird &
/usr/bin/netbeans --locale en &
amsn &
gnome-terminal &
sleep 15

wmctrl -r firefox -t 0
wmctrl -r netbeans -t 1 
wmctrl -r terminal -t 2 
wmctrl -r amsn -t 6 
wmctrl -r thunderbird -t 7

#focus on terminal
wmctrl -a terminal 

(我只是从上面的StackOverFlow链接复制并插入上面的代码,因为我认为这是不言自明的)。

更新:

在最佳站点上查看有关Gnome 3扩展的更简单解决方案,请在此处安装Gnome 3的自动移动Windows扩展。安装自动化无法正常工作,请在此处获取有关如何使其正常工作的详细说明。


2

最初的帖子是关于使用脚本使应用程序出现在特定的工作空间上的,因此在启动脚本中可以使用另一个脚本,以允许用户在非常缓慢的启动应用程序加载到另一个工作空间的同时继续工作。我的脚本非常适合作为wmctrl语法的前端,可以从任何命令提示符在任何给定的工作区中启动任何一个应用程序。因此,简单地列出诸如lh 1 thunderbird; lh 2 firefox; lh 3 calculator....之类的内容的另一个脚本现在很容易。但是,在时间安排上有一些困难,因此我的剧本就睡不着。以下是更新的版本,我将不再维护或再次发布。按原样使用,不能保证适合任何特定用途。根据需要进行修改。我建议另存为/usr/local/bin/lh,仅因为lh 不是任何其他已知的程序名称,至少在Mint 18上没有。关于变量-我引用了我认为有必要引用的变量。

#!/bin/sh
## Author: B.A. Computer Services www.ba-computer.com
## Purpose: Frontend to launch anything on a specific desktop/workspace.
##  lh is short for LaunchHere

USAGE="USAGE: $(basename $0) [-r] workspace(1,2,..) command\
    LaunchHere launches COMMAND on specific workspace.\
    -r option returns to current workspace"
[ -z "$1" ] && echo $USAGE && exit 0
ISRETURN=$(false); [ "$1" = "-r" ] && ISRETURN=true && shift;  
WRKSPC=$1;[ -z "$WRKSPC" ] && echo $USAGE && exit 0
WSN=$(expr $WRKSPC - 1)  ## wmctrl starts with 0 as first wrkspc
shift; CMD="$*"; [ -z "$CMD" ] && echo $USAGE && exit 0

WM=$(which wmctrl);[ -z "$WM" ] && echo MISSING wmctrl && exit 1
CURRENT=$(wmctrl -d | grep '*' | cut -c1)


# Switch to desired workspace
$WM -s $WSN
$CMD &
PID=$!
echo Executed $CMD on workspace $WRKSPC,  PID=$PID
sleep 3

# Return to CURRENT workspace ?
# [ $ISRETURN ] && echo TRUE || echo FALSE
[ $ISRETURN ] && $WM -s $CURRENT

太好了 奇迹般有效。非常感谢!
麦克风

0

Beta-但它在Linux Mint上对我有效。

#!/bin/sh
## Author: B.A. Computer Services www.ba-computer.com
## Purpose: Frontend to launch anything on a specific desktop/workspace.
##  lh is short for LaunchHere

USAGE="USAGE: $(basename $0) workspace(0,1,2,..) command"
WRKSPC=$1;[ -z "$WRKSPC" ] && echo $USAGE && exit 0
shift; CMD="$*"; [ -z "$CMD" ] && echo $USAGE && exit 0

WM=$(which wmctrl);[ -z "$WM" ] && echo MISSING wmctrl && exit 1

echo Executing $CMD on workspace $WRKSPC
$WM -s $WRKSPC
eval $CMD &
sleep 1
$WM -r :ACTIVE: -t $WRKSPC

eval应可能发生的"$@",或命令,如果任其参数包含空格或文件名的通配符,将无法正常工作。通常,此脚本需要引用变量扩展。
Kusalananda

0

@ user278634在此线程中的帖子给我带来了启发,谢谢。

我修改的是:

  1. 由于获取命令pid $ !,将'eval $ CMD&'更改为'eval“ $ CMD&”'。
  2. 保留当前的工作空间,而不是切换到指定的工作空间;只需在指定的工作区启动命令。
  3. 在找到window-id之后,将命令移至指定的工作区,而不是将其睡眠1秒。这对我来说很重要,因为通常在启动桌面登录时,我会为每个工作区和X-geometry打开8个终端。当使用“ sleep 1”时,这将花费超过8秒,而我的脚本仅需要2..3秒。

这是我的脚本:

#!/bin/sh
# = NAME
# lh - Launch Here
#
# = SYNOPSIS
# lh <workspace> <command> [<command-args>]
#
# = DESCRIPTION
# launch command (with any command-args) on a specific desktop/workspace.
#
# Example:
#
#   lh 2 xterm -geometry 80x46+881+0
#
# = Author
# Fumisky Wells

USAGE="USAGE: $(basename $0) workspace(0,1,2,..) command"
WRKSPC=$1;[ -z "$WRKSPC" ] && echo $USAGE && exit 0
shift; CMD="$*"; [ -z "$CMD" ] && echo $USAGE && exit 0    
WM=$(which wmctrl);[ -z "$WM" ] && echo MISSING wmctrl && exit 1    
eval "$CMD &"
pid=$!    
while :; do
  wid=$($WM -l -p | grep " $pid " | awk '{print $1}')
  if [ "$wid" != "" ]; then
    $WM -i -r $wid -t $WRKSPC
    exit
  fi
  # not found yet...
  sleep 0.1
done

0

安装wmctrl

sudo apt install wmctrl

并创建一个脚本(在本示例中,第二个工作区(-t 1)中是雷鸟):

#!/bin/sh

 (thunderbird &)  & sleep 5 && 
sh -c "wmctrl -i -r `wmctrl -l | grep Thunderbird` -t 1"

要知道您在wmctrl上的应用程序名称,可以通过在终端上点击来查看它:

wmctrl -l

并用脚本中的正确名称替换它。

充满大写字母(“ Thunderbird”而不是“ Thunderbird”)!

在3d工作区(-t 2)上使用Firefox的其他示例:

#!/bin/sh
(firefox &)  & sleep 5 && 
sh -c "wmctrl -i -r `wmctrl -l | grep Firefox` -t 2"

奖励:

这是在启动时要执行的命令:

sh -c "thunderbird  & sleep 5 && wmctrl -i -r `wmctrl -l | grep Thunderbird` -t 1"

与肉桂一起制作Debain 10。但应该为所有人工作

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.