Como posso ter um aplicativo exibido automaticamente em todos os desktops com openbox?

3

É possível usar wmctrl ou alguma outra coisa para exibir automaticamente uma janela específica em todas as áreas de trabalho?

Eu uso a extensão miniplayer do Google Play Música Prime Player para controlar a reprodução de músicas. Eu já tenho um apelido bash que eu posso invocar para fazer o miniplayer ficar em cima de outras janelas, mas eu também quero que ele envie a janela do miniplayer para todos os desktops para que eu não precise clicar com o botão direito e selecionar Enviar to Desktop Todos os Desktops (via openbox).

Idealmente, eu teria um script executando algo em segundo plano e assim que ele detectasse a janela do miniplayer, ele o colocaria no topo e enviaria para todos os desktops. Isso é possível?

    
por Andy Forceno 09.04.2014 / 18:02

2 respostas

3

Você pode realmente fazer isso sem um script de terceiros. O Openbox oferece suporte a uma ampla variedade de configurações por aplicativo .

Como criar uma regra específica de aplicativo

As regras de aplicativos são comparadas com propriedades diferentes, como o nome da janela, a classe, a função ou o título. A maioria dessas propriedades pode ser obtida para uma janela específica executando

obxprop | grep "^_OB_APP"

e clicando na janela em questão.

Vendo como você planeja especificar a regra para uma janela de extensão do Google Chrome, convém fornecer o máximo possível de propriedades correspondentes para tornar a regra o mais específica possível. Você não quer que isso se aplique a todas as janelas do Chrome. Experimente diferentes propriedades correspondentes e veja o que funciona melhor para você.

Tendo definido a janela correspondente, você pode definir diferentes propriedades que serão aplicadas exclusivamente à janela / aplicativo em questão. Aqui está um trecho do padrão rc.xml , que descreve todas as propriedades disponíveis:

# each rule element can be left out or set to 'default' to specify to not 
# change that attribute of the window

<decor>yes</decor>
# enable or disable window decorations

<shade>no</shade>
# make the window shaded when it appears, or not

<position force="no">
  # the position is only used if both an x and y coordinate are provided
  # (and not set to 'default')
  # when force is "yes", then the window will be placed here even if it
  # says you want it placed elsewhere.  this is to override buggy
  # applications who refuse to behave
  <x>center</x>
  # a number like 50, or 'center' to center on screen. use a negative number
  # to start from the right (or bottom for <y>), ie -50 is 50 pixels from
  # the right edge (or bottom). use 'default' to specify using value
  # provided by the application, or chosen by openbox, instead.
  <y>200</y>
  <monitor>1</monitor>
  # specifies the monitor in a xinerama setup.
  # 1 is the first head, or 'mouse' for wherever the mouse is
</position>

<size>
  # the size to make the window.
  <width>20</width>
  # a number like 20, or 'default' to use the size given by the application.
  # you can use fractions such as 1/2 or percentages such as 75% in which
  # case the value is relative to the size of the monitor that the window
  # appears on.
  <height>30%</height>
</size>

<focus>yes</focus>
# if the window should try be given focus when it appears. if this is set
# to yes it doesn't guarantee the window will be given focus. some
# restrictions may apply, but Openbox will try to

<desktop>1</desktop>
# 1 is the first desktop, 'all' for all desktops

<layer>normal</layer>
# 'above', 'normal', or 'below'

<iconic>no</iconic>
# make the window iconified when it appears, or not

<skip_pager>no</skip_pager>
# asks to not be shown in pagers

<skip_taskbar>no</skip_taskbar>
# asks to not be shown in taskbars. window cycling actions will also
# skip past such windows

<fullscreen>yes</fullscreen>
# make the window in fullscreen mode when it appears

<maximized>true</maximized>
# 'Horizontal', 'Vertical' or boolean (yes/no)

No seu caso específico, você terá interesse em especificar o layer e desktop do aplicativo. Veja um exemplo de uma regra que designaria todas as janelas de um aplicativo específico para estar sempre no topo e onipresentes em todos os desktops disponíveis:

<application name="miniplayer" class="miniplayer" type="normal">
  <layer>above</layer>
  <desktop>all</desktop>
</application>

Eu escolhi um nome de aplicativo e uma classe arbitrários para este exemplo. Como dito antes, você terá que encontrar os valores corretos para sua aplicação específica.

Editar : examinei seu aplicativo específico e descobri uma regra que funciona no meu sistema:

<application name="crx_npngaakpdgeaajbnidkkginekmnaejbi" class="Google-chrome" type="normal" role="pop-up">
  <layer>above</layer>
  <desktop>all</desktop>
</application>

Espero que isso funcione para você também.

Modificando sua configuração de caixa aberta para adicionar uma regra específica do aplicativo

Para adicionar uma regra de aplicativo, abra sua openbox rc.xml (localizada em ~/.config/openbox/rc.xml para openbox de estoque ou ~/.config/openbox/lxde-rc.xml para LXDE) e navegue até a seção <applications> no final do arquivo.

Insira as regras específicas do aplicativo entre as tags <applications>..</applications> . Em seguida, salve o arquivo e prossiga para recarregar a configuração executando:

openbox --reconfigure

As regras específicas do aplicativo devem entrar em vigor depois disso e serão aplicadas automaticamente às janelas recém-geradas.

    
por Glutanimate 09.04.2014 / 18:26
3

Encontrei uma solução mais geral usando o Python 2.7 e a biblioteca python-wnck.

Se estiver interessado em detalhes, verifique this e this

Se não apenas seguir estas etapas. Os passos 1-2 já devem estar prontos no Ubuntu:

  1. instale o python2.7. sudo apt-get install python2.7

  2. instale o python-wnck. sudo apt-get install python-wnck

  3. crie o arquivo stick_player.py. touch stick_player.py

  4. adicione python shebang.

% bl0ck_qu0te%
  1. torne-o executável. chmod +x stick_player.py

  2. cole este script em stick_player.py. Deve se parecer com

% bl0ck_qu0te%
  1. execute seu player em uma nova janela. No meu caso, o nome da janela era "Prime Player". Se não é me avise.

  2. execute o script. ./stick_player.py

Se você também quiser desfazer "visível em todos os espaços de trabalho", faça isso. faça os passos 3-7 novamente, mas.

  1. crie o arquivo unstick_player.py. touch unstick_player.py

  2. adicione python shebang.

% bl0ck_qu0te%
  1. torne-o executável. chmod +x unstick_player.py

  2. altere a última linha de win.stick() para win.unstick()

  3. execute o script. ./unstick_player.py

Você pode encontrar todos os nomes das janelas usando este script:

% bl0ck_qu0te%     
por c0rp 09.04.2014 / 19:16