我创建了一个脚本,用于在登录 xubuntu 时启动 gnome-terminal 会话。我特别希望它位于窗口上的特定位置,并且没有窗口边框(令人惊讶的是,与 xfce4-terminal 不同,gnome-terminal 中没有简单的选项来实现这一点)。
经过大量 Google 搜索并尝试了大约 10 种无效的方法后,我最终得到了以下用 bash 和 python 编写的脚本。
我的可执行 bash 脚本,我将其放在 $HOME/bin 中:
#!/bin/bash
flags[0]="--hide-menubar"
flags[1]="--geometry=80x54+0-0"
flags[2]="--window-with-profile=default2"
flags[3]="--working-directory={$HOME}"
gnome-terminal ${flags[@]} -x bash -c 'sleep 5 ;{$HOME}/bin/undecor.py ;bash'
相应的可执行python脚本,位于同一目录中:
#!/usr/bin/python
import gtk.gdk
root_window = gtk.gdk.get_default_root_window()
root_xid = root_window.property_get("_NET_ACTIVE_WINDOW")[2][0]
w = gtk.gdk.window_foreign_new(root_xid)
w.set_decorations(False)
gtk.gdk.window_process_all_updates()
我将标志放在 bash 脚本的一个数组中,这样如果以后需要编辑特定安排,我就能轻松知道发生了什么。注意:我在 python 2.7.3 中执行此操作。我没有在 python 3.x 中测试它
bashscript 最后一行出现大部分怪异现象的原因是,我发现在新的 gnome-terminal 窗口中运行命令并在命令执行完成后保持其打开非常困难。
第二个大问题是,在启动时,如果没有运行 sleep 命令,我的 python 脚本就会在窗口正式创建之前运行(我想......)并且在 python 脚本的某个地方我开始获取 NoneTypes 而不是真正的窗口对象等,并且 pyscript 从未成功取消装饰窗口。
所以我想问的是,是否有人能想到一种不那么黑客的方法来做到这一点。我真的很想只使用python,但我找不到在os或gtk模块中简单的方法。我读过一些其他涉及compiz或openbox等解决方案,但我想要一种无需安装任何新东西就能做到这一点的方法。我甚至不确定这在其他环境中是否有效。
谢谢!抱歉这个问题太长了,我想先做个功课。
(另外,xubuntu 用户请注意,您需要确保在启动时启动 GNOME 服务)
答案1
你可以用 devilspie 做这些事情。安装 devilspie 包,并编写以下配置文件(另存为~/.devilspie/gnome-terminal.ds
)
(if (is (window_role) "borderless")
(begin
(geometry "+0+0")
(maximize_vertically)
(undecorate)
)
)
现在您只需devilspie
在登录时运行(例如,通过将其添加到启动应用程序中),然后每当出现具有“无边框”角色的窗口时,它将移动到位置(0,0),垂直最大化,并移除装饰。
您可以使用选项指定 gnome-terminal 的角色--role
。
gnome-terminal --role=borderless