IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    将终端嵌入桌面

    Skydark Chen发表于 2013-06-04 00:00:00
    love 0

    如题,效果如图:

    嵌入终端截图

    类似的文章其实很多,无非是:

    1. 隐藏标题栏/菜单栏/滚动条/……;
    2. 利用终端自己/窗口管理器/其他工具(Devil's Pie, transset-df, etc.)等将终端设置上最大化透明置底不在任务栏显示等等属性;
    3. 加入自启动。

    思路还是很清晰的。

    不过这些文章几乎都没有提及一个问题——当使用“切换桌面显示”的时候,这个所谓嵌入桌面的终端也会被最小化。 而事实上,这是嵌入桌面的终端最有可能被使用的情景。

    可能的解决方案有两个:

    1. 将“隐藏桌面”的快捷键绑定到另一个脚本上,这个脚本在完成原本的隐藏桌面的任务后随即还原桌面上的终端。 可以使用wmctrl完成这系列任务,难度不大。 主要的问题是,原先“显示/隐藏桌面”的快捷键只要按两次就会恢复窗口原来的布局,而现在这个效果就无法保持了。

    2. 使得终端真正“显示在桌面”。类似conky和wbar等软件的效果。需要提示窗口管理器这个窗口的type是desktop. 但使用xprop/wmctrl/devilspie等完全没有效果。 这个帖子的7楼说明了原因: 这个hint要在窗口实际映射前设定好,如果等终端程序已经就绪窗口已经完成了再去提示窗口管理器,窗口管理器是可以无视的——openbox就是这么做的。

    也就是说,如果希望终端程序和conky一样真正嵌入桌面,只能通过修改终端的源代码实现了。 该帖子里给了修改urxvt的方法,我照葫芦画瓢也修改了terminator,选择这个终端的原因是它不是我平时用的终端,而且功能非常丰富。最终效果如文首图,还是不错的。

    修改的时候就是将terminatorlib/window.py里Window类的show方法开头添加如下代码:

    if startup:
        self.present()
        self.window.property_change(
                gtk.gdk.atom_intern("_NET_WM_WINDOW_TYPE", False),
                gtk.gdk.atom_intern("ATOM", False), 32,
                gtk.gdk.PROP_MODE_REPLACE,
                [gtk.gdk.atom_intern("_NET_WM_WINDOW_TYPE_DESKTOP", False)]
                )
    

    当然要注意的是这样修改后就要求终端运行时就已经设定好了geometry,最大化那些hint也没有效果了。


    最后得说的是,很多推荐嵌入桌面终端的文章推荐tilda/guake/yaguake等。但其实这几个终端最适合的使用方式是用快捷键随叫随到。 终端嵌入桌面更多是求一个气氛和极客味道(黑色壁纸更佳),相比之下,快捷键唤出终端的实用意义才要更大一些。



沪ICP备19023445号-2号
友情链接