É possível definir o nome da área de trabalho virtual atual via linha de comando?

2

O utilitário wmctrl tem a possibilidade de listar os nomes de todos os desktops virtuais:

%  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

Eu gostaria de poder alterar, da linha de comando, o nome da área de trabalho atual para outra coisa. Isso é possível usando alguns pagers, por exemplo, mas não consegui descobrir como fazer isso na linha de comando.

Atualização: o utilitário xprop parece ser capaz de definir os nomes da área de trabalho, mas ainda não consegui descobrir o formato exato para isso:

% 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"
    
por Dave Vogt 20.11.2012 / 13:13

2 respostas

1

Eu hackeei um pequeno script python que faz isso, depois de não encontrar mais nada. Requer o xpybutil como dependência, testado no Arch Linux atual (2014-03-27).

#!/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)

O uso é bastante simples:

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
    
por 27.03.2014 / 10:34
1

Não há opção no wmctrl para fazer o que você pede. Os desktops virtuais não são windows e não podem ser gerenciados pelo meu wmctrl. Dependendo de como o gerenciador de janelas armazena esses valores, pode ser trivial usar sed para definir esses nomes. Com o Fluxbox, tudo o que precisa ser mudado é a seguinte linha (~ / .fluxbox / init):

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

Descobrir como o seu WM define os nomes e alterar / definir os valores manualmente.

atualização:

OpenBox

Como alegado anteriormente, isso pode ser feito em duas etapas:

  1. edite os valores na configuração
  2. force o OpenBox a "reconfigurar"
$ 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

Isso define o nome da primeira área de trabalho como "moo". tmp / ob.xml representa ~ rc.xml

$ openbox --reconfigure

Faz com que o WM leia novamente seus arquivos de configuração.

PS. Eu realmente não tentei isso, porque conseguir que o comando xmlstarlet funcionasse era interessante o suficiente e porque eu confio na página man do openbox.

    
por 20.11.2012 / 13:37