在 xubuntu 12.10 启动时运行没有窗口边框的 gnome-terminal

lxv*_*xvk 5 xubuntu python bash gnome-terminal pygtk

当我登录到 xubuntu 时,我创建了一个脚本来启动 gnome-terminal 的会话。我特别希望它位于窗口的特定位置,并且没有窗口边框(令人惊讶的是,与 xfce4-terminal 不同,在 gnome-terminal 中没有简单的选项)。

经过一堆谷歌搜索并尝试了大约 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'
Run Code Online (Sandbox Code Playgroud)

对应的可执行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()
Run Code Online (Sandbox Code Playgroud)

我将标志放在 bash 脚本中的一个数组中,这样我就可以在以后需要编辑特定安排时轻松判断发生了什么。注意:我在 python 2.7.3 中这样做。我没有在 python 3.x 中测试过

bash 脚本最后一行的大部分奇怪之处的原因是我发现在新的 gnome-terminal 窗口中运行命令并在命令完成后保持打开状态真的很困难。

第二个大问题是,在启动时,没有运行 sleep 命令,我的 python 脚本在窗口正式创建之前运行(我认为......)并且在 python 脚本的某个地方我开始获取 NoneTypes 而不是真正的窗口对象等. 并且 pyscript 永远不会成功地取消装饰窗口。

所以我要问的是是否有人能想到一种不那么笨拙的方法来做到这一点。我真的很想只使用 python,但我在 os 或 gtk 模块中都找不到简单的方法。我阅读了其他一些涉及 compiz 或 openbox 之类的解决方案,但我想要一种无需安装任何新东西的方法。我什至不确定这是否适用于其他环境。

谢谢!对不起,如果这个问题很长,我想先做我的功课。

(另外,请注意 xubuntu 用户,您需要确保在启动时启动 GNOME 服务)

gei*_*rha 7

你可以用devilspie来做这些事情。安装devilspie包,写入如下配置文件(另存为~/.devilspie/gnome-terminal.ds

(if (is (window_role) "borderless") 
  (begin
    (geometry "+0+0")
    (maximize_vertically)
    (undecorate)
  )
)
Run Code Online (Sandbox Code Playgroud)

现在,您只需devilspie在登录时运行(例如,将其添加到启动应用程序中),然后每当出现角色为“无边界”的窗口时,它将被移动到位置 (0,0),垂直最大化,并移除装饰。

您可以使用--role选项指定 gnome-terminal 的角色。

gnome-terminal --role=borderless
Run Code Online (Sandbox Code Playgroud)