Como posso fazer as janelas ficarem opacas quando inativas?

3

Eu configurei o Xfce para tornar todas as janelas semitransparentes quando elas não têm foco no mouse. Como posso definir uma janela específica para permanecer opaca quando inativa? O Xfce não tem a opção de alterar as configurações de janelas específicas (até onde eu saiba).

Encontrei uma solução para isso antes, mas não consigo mais encontrar. Eu usei um programa de linha de comando para definir uma dica específica do gerenciador de janelas na janela que queria, e isso impedia que a janela se tornasse transparente. Mas não consigo me lembrar do programa que usei ou do nome da dica do gerenciador de janelas. Acho que parte do nome da dica pode ter sido LOCKED .

Isso é útil para manter as janelas do GIMP transparentes quando elas perdem o foco do mouse, por exemplo.

Eu tenho transset-df , mas não há como forçar uma janela a manter a mesma transparência quando inativa.

    
por yellowantphil 09.04.2016 / 03:32

2 respostas

2

Use Devilspie2 para definir o tipo de janela como "Utilitário" para aplicativos seletivos. Este tipo de janela não será afetado pela "Opacidade das janelas inativas" no ambiente Xfce.

Configuração preliminar

Instale Devilspie2 a partir do repositório (disponível em Debian e repositórios do Ubuntu), crie um novo arquivo de configuração em $HOME/.config/devilspie2 com o seguinte conteúdo.

debug_print("Window Name: " .. get_window_name());
debug_print("Application name: " .. get_application_name());

if (get_application_name()=="xfce4-dict") then
   set_window_type "_NET_WM_WINDOW_TYPE_UTILITY";
end

Salve o arquivo como opaque.lua . O nome do arquivo pode ser qualquer coisa, mas ele deve ter a extensão de arquivo .lua para funcionar com o Devilspie2.

Testes preliminares

Execute Devilspie2 no modo de depuração e você verá algo como abaixo.

$  devilspie2 -d
Running devilspie2 in debug mode.

Using scripts from folder: /home/USERNAME/.config/devilspie2
------------
List of LUA files handling "window_open" events in folder:
/home/USERNAME/.config/devilspie2/opaque.lua
List of LUA files handling "window_close" events in folder:
------------
Window Name: Desktop
Application name: xfdesktop
Window Name: xfce4-panel
Application name: xfce4-panel
Window Name: Application Finder
Application name: xfrun4
Window Name: Dictionary
Application name: xfce4-dict

As seguintes capturas de tela estão mostrando a janela inativa do Dicionário, antes e depois da execução do Devilspie2. Observe que a opacidade muda para o Dictionary (inferior), mas o Xfce Terminal permaneceu menos opaco (esquerda) enquanto as duas janelas estão inativas.

AjanelainativadoDicionáriopermaneceutotalmenteopacaporqueotipodejanelafoialteradopara"Utilitário" por Devilspie2, em relação ao arquivo de configuração.

Modificando a configuração

O arquivo de configuração criado contém as duas primeiras linhas que começam com debug_print para mostrar as mensagens de depuração de "Window Name: ... Application name: ...". Essas linhas permitem que o Devilspie2 mostre os respectivos nomes para os aplicativos em execução no momento e, em seguida, execute os aplicativos.

Com base nas mensagens de depuração, o usuário deve seguir estas etapas:

  1. Identifique o aplicativo de escolha, que precisa ser totalmente opaco quando inativo. Procure a linha contendo seu Application name: e copie o valor.

  2. Abra o mesmo arquivo de configuração em /home/USERNAME/.config/devilspie2/opaque.lua usando um editor de texto e, em seguida, substitua xfce4-dict pelo aplicativo escolhido.

  3. Salve o arquivo.

  4. Saia e corra novamente no Devilspie2.

Observe que USERNAME se refere ao nome de usuário atual.

A configuração modificada será agora efetiva. Se o aplicativo de escolha já estiver em execução, alterne a janela para frente e para trás para ver as alterações efetivas quando a janela ficar inativa novamente.

Torne persistente

O Devilspie2 deve estar em execução em segundo plano para que esta solução seja eficaz em todas as sessões. Para tornar isso persistente, adicione devilspie2 na guia "Aplicativos Autostart" em "Sessão e inicialização".

Que tipo de janela

Inicialmente, encontrei esta solução enquanto brincava com o Devilspie2 por tentativas e erros. Mais tarde, tentei executar o GIMP 2.8 e percebi que a janela principal ficou menos opaca quando inativa, mas as outras duas janelas flutuantes permaneceram totalmente opacas.

Em seguida, confirmei o tipo de janela executando xwininfo e, em seguida, clique em uma das janelas flutuantes para imprimir as dicas do gerenciador de janelas.

$ xwininfo -wm

xwininfo: Please select the window about which you
          would like information by clicking the
          mouse in that window.

xwininfo: Window id: 0x2a00686 "Layers - Brushes"

  Window manager hints:
      Client accepts input or input focus: Yes
      Initial state is Normal State
      Displayed on desktop 1
      Window type:
          Utility
      Window state:
          Skip Pager
          Skip Taskbar
      Process id: 5262 on host XXXXX
      Frame extents: 1, 1, 22, 4

E bingo, o tipo de janela era de fato "Utilitário"!

Uma questão trivial

O tipo de janela "Utilitário" tem um comportamento diferente, ou seja, a janela do aplicativo não aparecerá mais na barra de tarefas. O usuário pode continuar navegando pelas teclas Alt + Tab em vez da barra de tarefas.

Esse comportamento é normal para o tipo de janela "Utilitário", que pode ser observado da mesma forma para as janelas flutuantes a.k.a. nas docas do GIMP.

Se o usuário achar que esse comportamento não é desejável, a alteração do tipo de janela poderá ser uma solução com desvantagem. Por outro lado, o comportamento é um problema trivial ao mesmo tempo em que é capaz de manter janelas seletivas opacas quando inativas.

Comentários

Testado trabalhando no Xubuntu 14.04 (Xfce 4.10), usando o Devilspie2 v0.31.

    
por 05.05.2016 / 12:03
1

Enquanto eu estava trabalhando na resposta da clearkimura, encontrei o método que estava usando antes para fazer as janelas ficarem opacas. Digite este comando em um terminal e clique na janela desejada:

xprop -f _NET_WM_WINDOW_OPACITY_LOCKED 32c -set _NET_WM_WINDOW_OPACITY_LOCKED 1

Isso define uma propriedade de janela que faz com que o Xfce deixe a opacidade da janela inalterada quando a janela se torna ativa.

Acabei fazendo o que clearkimura sugeriu, mas essa é outra maneira de manter janelas opacas automaticamente quando estão inativas:

Meu repositório tem apenas devilspie, não devilspie2. Eu criei este arquivo de configuração devilspie e nomeei-o como ~/.devilspie/rules.ds (os comentários começam com ponto e vírgula):

(begin
    ;(debug)
    (if
        ; For mplayer/smplayer and all Gimp windows:
        (or
            (contains (application_name) "MPlayer")
            (contains (window_class) "Gimp")
        )
        ; comment out one of the lines below:
        (print (window_xid) "\n") ; print the window IDs
        ; (wintype "utility") ; set the window type to utility
    )
)

Em seguida, criei este script, nomeei-o como devilspie_xprop e coloquei-o no meu diretório pessoal:

#!/bin/bash
devilspie $@ | while read id text; do
    if [[ $id -gt 0 && $text == "" ]]; then
        xprop -id $id -f _NET_WM_WINDOW_OPACITY_LOCKED 32c -set _NET_WM_WINDOW_OPACITY_LOCKED 1
    else
        echo "$id $text"
    fi
done

devilspie imprime o ID da janela para qualquer janela Gimp ou MPlayer / SMPlayer. O script, em seguida, executa xprop para cada ID de janela, definindo a propriedade _NET_WM_WINDOW_OPACITY_LOCKED .

Finalmente, adicionei isso ao meu .xinitrc antes de iniciar o Xfce:

$HOME/devilspie_xprop &

Eu finalmente decidi que gostava mais da solução da clearkimura, mas qualquer um funciona.

    
por 07.05.2016 / 21:44