A explicação mais provável é que gnome-screensaver-command, quando executado no contexto que o udev fornece, não tem idéia de quem protetor de tela em qual display ele deve comandar - ele não está sendo executado sob sua conta de usuário e não possui as variáveis de ambiente que são propagadas por toda a sessão do usuário X.
Uma abordagem que pode provavelmente ser feita para funcionar:
- execute gnome-screensaver-command sob um su para seu usuário
- certifique-se de que a variável de ambiente DISPLAY esteja configurada para o mesmo valor que possui em um terminal dentro de sua sessão X
- certifique-se de que a autoridade de conexão com sua sessão X esteja estabelecida - isso precisará de um pouco de mexer com xauth e / ou xhost, detalhes muito dependentes de sua configuração exata
Para explicar o problema com mais detalhes: o X11, que o gnome usa como infraestrutura, permite cenários como "várias sessões independentes, que podem ter contas de usuário diferentes conectadas, comutáveis por meio de teclas de função ou conectadas a diferentes monitores e mouse / teclado "(" Multiseat ") e" a sessão real está sendo executada em uma máquina diferente daquela a que o monitor e os dispositivos HID estão conectados "(" XDMCP "é a palavra-chave aqui). "Uma sessão, um usuário" é na verdade apenas um caso de uso possível, e o único em que um comando interfere em qualquer coisa em uma sessão sem fazer parte dela pode saber como reagir corretamente - mas não há provisões especiais embutidas para esse caso.