2

Утилита 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 ответа2

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
1

В 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:desktops/o:names/o:name[1]' \
    -v moo  rc.xml

Это устанавливает имя первой рабочей области на "moo". tmp/ob.xml представляет ~ rc.xml

$ openbox --reconfigure

Заставить WM перечитать свои файлы конфигурации.


PS. На самом деле я не пробовал этого, потому что заставить работать эту команду xmlstarlet было достаточно интересно, и потому что я доверяю man-странице openbox.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .