Como verificar se o DISPLAY é válido

4

Eu li o man-page X (7) e procurei por isso, mas não consigo encontrar uma solução.

Como posso verificar em um processo de longa execução se o ambiente DISPLAY=:0 ainda é uma exibição válida? (O usuário pode ter feito o logout enquanto o processo ainda está ativo)

A cereja no topo do bolo seria verificar se o DISPLAY ainda é de propriedade de <USER>

    
por Germar 04.12.2012 / 01:46

2 respostas

5

Talvez algo como:

if sudo -Hu "$user" xdpyinfo -display "$DISPLAY" > /dev/null 2>&1; then
  echo "user $user can connect to display $DISPLAY"
else
  echo "user $user cannot connect to display $DISPLAY"
fi

Se você não tem xdpyinfo , você pode tentar qualquer um desses utilitários X11 simples padrão que não exibem nada no servidor X (com seus stdout e stderr redirecionados para / dev / null como acima):

xlsatoms -name PRIMARY
xprop -notype -root CUT_BUFFER0
xwininfo -root
    
por 04.12.2012 / 16:12
2

Se :0 ever fosse uma exibição válida, o processo, ou seja, xserver fornecendo-o, seria de propriedade de root. O que quer que você queira dizer com válido.

Se você quiser saber se pode se conectar a um xserver, sugiro usar xlsclients para se conectar a essa exibição. Se o comando puder conectar, retornará 0, se não puder, retornará 1.

X não funciona de uma maneira que um usuário conecta uma vez a um xserver. Para vincular usuários a xsessions, você deve examinar os programas conectados ao xserver. Os Windowmanagers são bons candidatos para isso, b / c pode haver apenas um gerenciador de janelas (ativo) a qualquer momento. Você também pode acompanhar os relacionamentos de processos (pai, filho) a partir do gerenciador de exibição. No entanto, nunca é trivial. Talvez os gerentes de exibição armazenem essas informações em algum lugar, mas eu não saberia.

    
por 04.12.2012 / 14:36

Tags