是否可以通过命令行设置当前虚拟桌面的名称?

是否可以通过命令行设置当前虚拟桌面的名称?

该实用程序wmctrl可以列出所有虚拟桌面的名称:

%  wmctrl -d
0  - DG: 3360x1200  VP: 0,0  WA: 0,0 3360x1199  Mail / Comm
1  * DG: 3360x1200  VP: 0,0  WA: 0,0 3360x1199  Web / Docs
2  - DG: 3360x1200  VP: 0,0  WA: 0,0 3360x1199  A
3  - DG: 3360x1200  VP: 0,0  WA: 0,0 3360x1199  B

我希望能够从命令行将当前桌面的名称更改为其他名称。例如,可以使用一些分页程序来实现,但我找不到如何从命令行执行此操作。

更新:该xprop实用程序似乎能够设置桌面名称,但我还不能弄清楚这样做的确切格式:

% xprop -root -f _NET_DESKTOP_NAMES 8s -set _NET_DESKTOP_NAMES asdf
% xprop -root _NET_DESKTOP_NAMES
_NET_DESKTOP_NAMES(UTF8_STRING) = "asdf", "Web / Docs", "A"

答案1

在没有找到其他任何东西之后,我编写了一个小型 Python 脚本来执行此操作。它需要 xpybutil 作为依赖项,已在当前 (2014-03-27) Arch Linux 上进行了测试。

#!/usr/bin/python2

"Helper for setting current desktop's name"

import sys

from xpybutil import conn, root

import xpybutil.ewmh as ewmh

if len(sys.argv) == 2 and sys.argv[1] == '--help':
    print "Usage: "
    print "   set_desktop_name NAME_OF_NEW_DESKTOP  - sets current desktop name"
    print "   set_desktop_name NR NAME_OF_NEW_DESKTOP - sets name of NRth desktop"

if len(sys.argv) > 2:
    desktop_offset = int(sys.argv[1])
    new_name = sys.argv[2]

else:
    desktop_offset = ewmh.get_current_desktop().reply()
    new_name = sys.argv[1]

current_names = ewmh.get_desktop_names().reply()

current_names[desktop_offset] = new_name

# Not sure why I have to do it twice - somehow
# doesn't work if I only call it once
c = ewmh.set_desktop_names(current_names)
c = ewmh.set_desktop_names(current_names)

使用方法相当简单:

dv@ankh-morpork ~ % wmctrl -d
0  * DG: 3840x1200  VP: 0,0  WA: 0,24 3840x1176  MAIL
1  - DG: 3840x1200  VP: 0,0  WA: 0,24 3840x1176  Project A
2  - DG: 3840x1200  VP: 0,0  WA: 0,24 3840x1176  Project B
3  - DG: 3840x1200  VP: 0,0  WA: 0,24 3840x1176  Random Stuff
4  - DG: 3840x1200  VP: 0,0  WA: 0,24 3840x1176  Music
dv@ankh-morpork ~ % set_desktop_name 3 "Yet another project"
dv@ankh-morpork ~ % wmctrl -d
0  * DG: 3840x1200  VP: 0,0  WA: 0,24 3840x1176  MAIL
1  - DG: 3840x1200  VP: 0,0  WA: 0,24 3840x1176  Project A
2  - DG: 3840x1200  VP: 0,0  WA: 0,24 3840x1176  Project B
3  - DG: 3840x1200  VP: 0,0  WA: 0,24 3840x1176  Yet another project
4  - DG: 3840x1200  VP: 0,0  WA: 0,24 3840x1176  Music

答案2

wmctrl 中没有选项可以执行您要求的操作。虚拟桌面不是窗口,无法通过 wmctrl 进行管理。根据您的窗口管理器存储这些值的方式,sed设置这些名称可能很简单。使用 Fluxbox,只需更改以下行 (~/.fluxbox/init):

session.screen0.workspaceNames: internoit,terms,admin,gui,eclipse,droid-ui

弄清楚您的 WM 如何设置名称并手动更改/设置值。

更新:

开箱

如前所述,这可以分两个步骤完成:

  1. 编辑配置中的值
  2. 强制 OpenBox“重新配置”
$ xml ed -N o="http://openbox.org/3.4/rc" \
    -u'//o:openbox_config/o:桌面/o:名称/o:名称[1]' \
    -v moo rc.xml

这会将第一个工作区的名称设置为“moo”。tmp/ob.xml 代表 ~rc.xml

$ openbox --reconfigure

导致 WM 重新读取其配置文件。


PS. 我实际上还没有尝试过这个,因为让这个xmlstarlet命令工作已经足够有趣了,而且我信任 openbox 手册页。

相关内容