有什么方法可以在命令行上将一个工作区中运行的应用程序切换到另一个工作区?我使用 Ubuntu 10.04
更新1
根据以下建议
wmctrl -l
0x02200003 -1 bond Bottom Expanded Edge Panel
0x02200049 -1 bond Top Expanded Edge Panel
0x02000020 0 bond x-nautilus-desktop
0x04e00004 0 bond bond@bond: ~
0x0482a380 0 bond OMG! Ubuntu! | wmctrl - Chromium
0x05000072 0 bond how to shift applications from workspace 1 to 2 using command - Ask Ubuntu - Stack Exchange - Google Chrome
现在当我输入
wmctrl -r :OMG! Ubuntu! | wmctrl - Chromium: -t 2 No window was specified.
那么如何正确使用它上面的错误是什么?
更新2
我试过
wmctrl-r 0x05000072-t 2
但窗户没有效果并且它们仍然在相同的工作空间中。
答案1
如果您使用的是兼容的窗口管理器(如 Metacity (Unity 2-d)),则可以使用 wmctrl 将窗口切换到另一个桌面。语法是wmctrl -r :ACTIVE: -t <DESKTOP>
。您还可以使用 更改当前桌面wmctrl -s <DESKTOP>
。桌面编号从 0 开始。在一行中,这将是:
wmctrl -r :ACTIVE: -t 1; wmctrl -s 1
如果要将活动窗口以外的窗口切换到另一个桌面,请使用标题中的文本作为 -r 的参数。例如:
wmctrl -r "Chromium" -t 1
或者,您可以使用wmctrl -l
列出可用窗口并将 ID 号传递给 -r,而不是特殊字符串:ACTIVE:
。传递 ID 时,还需要添加 -i。例如:
$ wmctrl -l
0x03e00189 0 hostname Ask Ubuntu - Chromium
$ wmctrl -i -r 0x03e00189 -t 2
(wmctrl 可以在 Ubuntu 上使用sudo apt-get install wmctrl
。)不幸的是,目前这似乎不适用于标准 Unity。
答案2
可以使用以下方法实现xdotool
,但如果您使用compiz
此解决方案可能不适用,所以请记住这一点。
要将特定窗口(活动窗口)切换到不同的工作区,您可以使用
xdotool getactivewindow set_desktop_for_window 1
或者对于脚本,您可能希望使用以下命令将特定程序的窗口切换到给定的工作区:
xdotool search --class firefox set_desktop_for_window %@ 1
此命令搜索并找到firefox
窗口,然后将它们传输到工作区 1,它们将在那里最小化显示。要返回firefox
默认桌面,只需将命令末尾的 1 替换为 0。要将不同的窗口发送到另一个工作区,只需将其替换firefox
为另一个程序名称。
%@
用来表示从参数传递的窗口至关重要--search
,因为如果您不这样做,就不会传输任何窗口。
有关详细信息,请参阅For more information, seeman xdotool
参阅Ubuntu 在线手册页。
答案3
这是我的脚本,可以实现您的要求:https://github.com/norswap/wmov/blob/master/wmov.sh
在其当前形式中,它可以将窗口(通过将不区分大小写的字符串与子字符串标题进行匹配来选择,例如选项wmctrl
-r
)发送到其他桌面,可以通过选择明确的桌面编号或通过指示从当前桌面到桌面的方向来发送。
例如:
./wmov.sh mov "Google Chrome" 3 # sends Chrome to desktop 3 (bottom left)
./mov.sh mov Skype right # sends Skype to the desktop to the right of
# the current desktop (if any)
它确实像 desgua 的帖子中描述的那样工作。它还具有将窗口发送到其他工作区的功能。
答案4
首先,冒号是:ACTIVE:
魔术标记的一部分,用于指示活动窗口。通常你不需要它。其次,你需要用引号括住带有空格的字符串。
您还可以获取窗口 ID(位于0x...
每行开头)并使用它,而不必尝试使标题工作。
$ wmctrl -r 'OMG! Ubuntu! | wmctrl - Chromium' -t 2 # wherever it is, move it to 2
$ wmctrl -r 0x0482a380 -t 2 # same thing