X11 envia notificação para todos os usuários em todos os [duplicados] de DISPLAY

5

Como root, estou tentando executar um comando em servidores remotos que exibe uma janela de mensagem para os usuários; a questão é, sem su - usuário (porque leva muito tempo para muitos usuários), como pode ser obtido o valor correto de DISPLAY para qualquer usuário?

    
por Mike Droker 16.07.2012 / 22:28

1 resposta

1

Curto: não há a solução (TM) para o que você deseja.

No entanto, com conhecimento suficiente sobre sua configuração, pode ser possível desenvolver uma solução que funcione para você. Eu tive o mesmo problema uma vez.

A razão pela qual é tão difícil é que o Xserver não está vinculado a um usuário. Você pode confirmar isso em qualquer distribuição Linux importante, fazendo login no ambiente de desktop de sua escolha, abrindo um terminal e digitando ps faux . Ele mostrará seu gerenciador de exibição, com (pelo menos) dois processos filhos: um xserver e o processo pai para todos os processos pertencentes à sua sessão de usuário. Observe que o xserver é iniciado como usuário root e NÃO como o usuário a que sua sessão pertence.

O que eu fiz / fazer para combinar um certo xserver com um nome de usuário Eu faço uma votação majoritária: Eu olho para cada processo de usuário e verifico para qual xserver está conectado. A partir desse conhecimento eu crio uma lista que me diz para cada usuário a quantidade de processos que estão conectados a um xserver específico. Uma ilustração dessa tabela poderia ser assim:

      |xserver :1| xserver :2 | xserver :3 | xserver :4
-------------------------------------------------------------
alice |    17    |      0     |      0     |       0
bob   |     0    |      0     |     14     |       0
eve   |     0    |     34     |      1     |       0
foo   |     1    |      1     |      1     |       8

Com essa tabela, executo uma votação por maioria simples que gera o mapeamento:

  • User alice está usando, ou seja, sentado na frente do xserver: 1
  • O usuário bob está usando o xserver: 3
  • A véspera do usuário está usando o xserver: 2
  • O usuário foo está usando xserver: 4

Esse voto majoritário não necessariamente produz mapeamentos corretos, no entanto, para todas as minhas intenções e propósitos, é suficiente.

Isso é tudo que você precisa. Agora você pode

DISPLAY=<ip.to.xserver>:1 xmessage -buttons yes,no,maybe -nearmouse "Do you want to go on a date with me?"

peça alice por uma data.

A mágica é a variável de ambiente DISPLAY que os xapplications usam para descobrir a qual xserver eles devem se conectar. A maioria dos xapplications também aceita a opção -display . Veja a man page em xmessage e X .

É claro que existem muitas outras maneiras de substituir minha maioria de votos por. Qual é o mais adequado para você, você precisa descobrir a si mesmo ...

    
por 16.07.2012 / 23:50