我想知道当我通过命令行启动一个窗口程序时,我是否可以将其“发送”到特定的工作区中。
例如,我想在启动计算机时在不同的工作区中打开一定数量的窗口程序。这可能吗?这背后的一些基本概念是什么?
我在 Ubuntu 14.04 上使用 Unity。
我也尝试过,gdevilspie
但似乎受到错误的影响。
谢谢! :)
答案1
使用wmctrl
,例如gedit
:
gedit & sleep 3; wmctrl -i -r `wmctrl -l -p | grep $! | awk '{ print $1 }'` -t 1
gedit &
在后台运行 geditsleep 3
睡眠 3 秒等待窗口创建(我的机器有点慢)$!
返回前一个命令的 PID(例如:gedit pid)wmctrl -l -p | grep PID | awk '{ print $1 }'
从 gedit PID 获取 WIDwmctrl -i -r WID -t 1
使用 WID 将窗口移动到第二个桌面
其他方式:
wmctrl -s 1 ; gedit & sleep 3; wmctrl -s 0;
- 切换到第二个桌面,启动 gedit,等待 3 秒;切换回第一个桌面
参考:
答案2
它与@user.dz 回答的基本上相同,只是参数化了,并且不是休眠 3 秒来创建窗口处理程序,而是循环直到找到它。
# workspace target
_WS=3
export DISPLAY=:0
gedit &
_PID="$!"
_WID=""
while [[ $_WID == "" ]]; do
_WID=$(wmctrl -l -p 2>/dev/null | grep $_PID | awk '{ print $1 }')
sleep 1
done
wmctrl -i -r $_WID -t $_WS