该实用程序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 如何设置名称并手动更改/设置值。
更新:
开箱
如前所述,这可以分两个步骤完成:
- 编辑配置中的值
- 强制 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 手册页。