Udev: executando um shellscript que acessa um display X [duplicado]

2

Depois de obter meu modem 3g para funcionar em Arch Linux , eu queria eliminar o trabalho manual necessário no processo. Por isso eu precisava criar uma regra do udev. Depois de algumas tentativas e erros, criei a seguinte regra chamada 11-my-rule.rules , que coloquei em /etc/udev/rules.d/ :

# start at sdb to ignore the system hard drive
KERNEL!="sd[b-z]*", GOTO="my_media_automount_end"

# run the script and create a testdir to verify the rule works
ACTION=="add", RUN+="/myscript.sh", RUN+="/bin/mkdir -p '/media/pendrive'"

#remove the testfolder on removal of usb
ACTION=="remove", RUN+="/bin/rm -R '/media/pendrive'"

# exit
LABEL="my_media_automount_end"

Meu teste que deve ser executado é o seguinte:

#!/bin/bash

DISPLAY=:0 xterm

Que exibe o xterminal. Eu testei o script em si e funciona. Também o segundo RUN + que cria o diretório de teste também funciona. Por isso, eu não sei o que estou fazendo de errado.

    
por Tomkarho 27.06.2013 / 14:24

1 resposta

2

@EightBitTony pode estar certo. As regras do udev são executadas como usuário root. Portanto, além de especificar o DISPLAY , você precisa conceder a esse usuário root acesso à sua sessão X.

Isso pode ser obtido encontrando o arquivo de autoridade correspondente e exportando-o como XAUTHORITY . echo $XAUTHORITY de um emulador de terminal pode lhe dizer onde está.

Usando um gerenciador de exibição, é provável que o local seja alterado em cada login. Como alternativa, você pode invocar xhost + da sessão x, concedendo a todos os outros usuários acesso a essa sessão. xhost - fecharia isso novamente. Lembre-se de que isso também permite que usuários remotos acessem a sessão usando uma porta TCP.

    
por 27.06.2013 / 15:07