我需要在不同于当前使用的工作区上启动GUI应用程序[Lotus Symphony]。[例如:GNOME桌面上有4个工作区。]
问:我该怎么做?
ps:这是必需的,因为Lotus Symphony在重新引导后的首次启动非常非常慢,但是在使用一次之后,启动非常迅速。我认为它可以缓存自己。这就是为什么我想在不同工作区的每次启动时启动它,因此以后如果需要使用它,它将很快。
我需要在不同于当前使用的工作区上启动GUI应用程序[Lotus Symphony]。[例如:GNOME桌面上有4个工作区。]
问:我该怎么做?
ps:这是必需的,因为Lotus Symphony在重新引导后的首次启动非常非常慢,但是在使用一次之后,启动非常迅速。我认为它可以缓存自己。这就是为什么我想在不同工作区的每次启动时启动它,因此以后如果需要使用它,它将很快。
Answers:
查看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扩展。安装自动化无法正常工作,请在此处获取有关如何使其正常工作的详细说明。
最初的帖子是关于使用脚本使应用程序出现在特定的工作空间上的,因此在启动脚本中可以使用另一个脚本,以允许用户在非常缓慢的启动应用程序加载到另一个工作空间的同时继续工作。我的脚本非常适合作为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
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
应可能发生的"$@"
,或命令,如果任其参数包含空格或文件名的通配符,将无法正常工作。通常,此脚本需要引用变量扩展。
@ user278634在此线程中的帖子给我带来了启发,谢谢。
我修改的是:
这是我的脚本:
#!/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
安装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。但应该为所有人工作