Можно ли установить имя текущего виртуального рабочего стола через командную строку?
Утилита 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"
2 ответа
Я взломал небольшой скрипт на 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
В 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
Команда на работу была достаточно интересной и потому что я доверяю man-странице openbox.