我同时处理很多文档。基本上,我使用 3-5 个工作区,每次都使用相同的文件 - 在特定文件夹中打开终端,使用 gedit 处理特定文件并使用 evince 查看结果(我使用 latex)。问题是 - 如何自动化打开文件的过程?我想要的是使用 gedit 和 evince 打开我的工作来启动 Ubuntu。
有一段时间,KDE 尝试打开最后保存的程序,但效果不佳——我打开了 gedit 和 evince,但文件为空白。
我已经看过一些关于 devilspie 的文章(不是我指定的方式,我想获取特定的命令,而不仅仅是在工作区 2 中打开 Firefox)以及在启动时运行命令(似乎更好,但我仍然不知道如何告诉终端有关工作区的信息)。
答案1
1)安装wmctrl
sudo apt-get install wmctrl
2)创建包含以下内容的文件并使其可执行
#!/bin/bash
wmctrl -s 0 #Switches to workspace 0 [workspaces are numbered from 0]
gnome-terminal & #Say you want a terminal in the 0th workspace
nautilus & #Maybe a file browser too
sleep 2 #Windows take some time to open. If you switch immediately, they'll open up in wrong workspaces. May have to change the value 2.
wmctrl -s 1 #Switches to workspace 1
firefox & #You get the idea. Continue for all workspaces
sleep 2
wmctrl -s 0 #You will be left at this workspace when the script finishes executing
3) 从.xsessionrc
您的主目录中调用此脚本(如果您必须创建此文件)以在每次登录时自动执行该过程。或者,您可以在需要时从终端调用它。编辑:将其放在“启动应用程序”中,而不是 .xsessionrc 中。.xsessionrc 甚至会在桌面环境加载完成之前执行。
您可能希望创建一个自定义 xsession,以便有两个会话可供选择,一个会话会自动打开这些应用程序,另一个会话则不会。但我觉得这没有必要。
如果您觉得切换到工作区、打开相应的应用程序,然后切换到下一个工作区很耗时,您可以一次性打开所有应用程序,然后使用 移动窗口wmctrl
。例如
wmctrl -r 'Firefox' -t 1
将标题中带有 Firefox 的窗口移至工作区 1。如果存在多个窗口,wmctrl
则将移动由 管理的窗口列表中的第一个窗口。您需要知道应用程序将创建的窗口的标题才能使用它。这就是为什么我不建议将其作为主要选项的原因。如果标题明确无误,就像大多数常用应用程序的情况一样,那么这就是可行的方法。
以全屏方式打开应用程序:
某些应用程序(例如 gnome-terminal)具有命令行参数,用于以最大化状态或全屏模式打开窗口。如果存在此类选项,请使用它们。否则,请使用wmctrl
以下方法
wmctrl -r 'username@machinename' -b add,maximized_vert,maximized_horz
这会最大化我的(已经存在的)终端窗口。
wmctrl -r 'username@machinename' -b add,fullscreen
这将使窗口进入全屏模式。
浏览wmctrl
的手册页。您可能会发现它的更多功能。
这个答案取自此来源。
答案2
我一直没能找到一种一致的方法,通过搜索打开程序并定位到特定位置。似乎没有直接的方法将命令绑定到其窗口。所以我编写了一个小型 bash 函数,它使用 wmctrl 和 sleep 的组合来识别和定位窗口。
此函数利用了最后创建的窗口出现在 wmctrl 列表最后的事实。由于将 wmctrl 和 sleep 结合起来识别窗口的本质是黑客行为,我无法解决在启动脚本中使用此函数的问题。我怀疑它是否能正常工作。
功能
position_program ()
{
$1 &
sleep $2
window_id=`wmctrl -l | tail -n1 | cut -f1 -d " "`
wmctrl -ir $window_id -e 0,$3
if [ ! -z "$4" ]; then
wmctrl -ir $window_id -t $4
fi
}
参数 1 应该是需要执行的命令,用引号引起来。
参数 2 是等待的时间。脚本需要知道从运行命令到窗口实际出现之间要等待多长时间。
参数 3 是 x、y、高度、宽度的几何规范。您可以使用命令
xwininfo | grep geometry
帮助您获得正确的值。(运行命令,单击具有所需几何图形的窗口)
参数 4 是可选的,并根据你的问题添加。它需要一个整数来表示将窗口移动到哪个桌面。枚举从 0 开始,因此你的第一个桌面是 0,第二个是 1,依此类推
例子
#! /bin/dash
position_program ()
{
$1 &
sleep $2
window_id=`wmctrl -l | tail -n1 | cut -f1 -d " "`
wmctrl -ir $window_id -e 0,$3
if [ ! -z "$4" ]; then
wmctrl -ir $window_id -t $4
fi
}
# open gedit, position to the upper left corner, sized as 1000x1000
position_program "gedit --new-window my_text.txt" 1 "0,0,1000,1000" 0
#open another gedit window, same as before but on desktop 2
position_program "gedit --new-window my_othertext.txt" 1 "0,0,1000,1000" 1
显然,不同程序的睡眠时间会有所不同。更有趣的是,如果您第二次使用同一程序,但针对的是新窗口,睡眠时间也会有所不同。因此有时可能需要进行实验。
希望您能了解脚本的工作原理,并可能根据需要编辑它或重新使用策略。我已经在 lubuntu 和 kubuntu 上进行了测试,它应该也可以在其他基于 x 的环境中工作。