Executa um script que exibe uma janela X de uma regra do udev

0

Encontrei várias perguntas no link & no link relacionado ao script de lançamento pelas regras do udev. Mas não consigo encontrar uma solução exata ou uma resposta certa para executar o script Bash .

Então, estou fazendo a pergunta (canônica): Como executar / iniciar / executar o script Bash por meio das regras do udev?

Outra coisa que eu encontrei em Escrevendo as regras do udev é:

udev does not run these programs on any active terminal, and it does not execute them under the context of a shell. Be sure to ensure your program is marked executable, if it is a shell script ensure it starts with an appropriate shebang (e.g. #!/bin/sh), and do not expect any standard output to appear on your terminal.

Por isso, quero saber se possível que "Como executar o script bash pelas regras do udev?"

Aqui está um exemplo simples de executar o bash-script.

Eu escrevi 99-myrule.rules em /etc/udev/rules.d , que contém:

ACTION=="add", ATTR{idVendor}=="0781", ATTR{idProduct}=="5567", RUN+="/home/pandya/example.sh"

Eu encontrei o fornecedor & ID do produto de lsusb output:

$ lsusb | grep SanDisk
Bus 001 Device 066: ID 0781:5567 SanDisk Corp. Cruzer Blade

E eu quero executar o comando experimental zenity --info quando meu pendrive (do SanDisk listado acima) estiver anexado.

então, eu escrevi /home/pandya/example.sh (que é chamado de RUN+= em regras do udev) contians:

#!/bin/bash
zenity --info &
exit

Mas este script não está em execução (apesar de ter permissão de execução). Eu também tentei seguir:

  • export DISPLAY=:0 no script antes de zenity --info
  • bash -c 'DISPLAY=:0 zenity --info

E claro:

  • sudo restart udev
  • sudo udevadm control --reload-rules

Mas não consigo obter a saída zenity --info .

Daí Como posso executar o script Bash por meio das regras do udev? Sugira-me se estiver faltando alguma coisa.

    
por Pandya 07.01.2015 / 08:03

3 respostas

2

Provavelmente, o comando está sendo executado, mas não sabe onde exibir a saída. Eu suponho que você esteja logado no X com um usuário diferente de root, e essa regra provavelmente está sendo executada como root. Tente o seguinte comando:

su - your_X_user_here -c 'export DISPLAY=:0;zenity --info'

Para executar qualquer Script Bash , siga o comando:

su - your_X_user_here -c 'export DISPLAY=:0; bash -c "/path/to/script.sh"'
    
por 07.01.2015 / 12:31
0

Para qualquer um que tenha lido isso, a única maneira que consegui fazer com que meu script no Kali Linux 2016 funcionasse, foi assim:

#!/bin/bash
set -x
xhost local:root
export DISPLAY=:0.0
su root -c 'zenity --notification --text="I am a notification!"'
    
por 10.10.2016 / 00:03
0

Recentemente, achei uma maneira elegante de exibir as tarefas GUI ou X das regras do udev sem se preocupar com o DISPLAY. O princípio seria o mesmo para scripts Shell usando export .

IMPORT{program}="/usr/bin/xpub", \
RUN+="/bin/su $env{XUSER} -c '/usr/bin/notify-send Hello'"

$env{ENV} : se o usuário atual-tty iniciar o X, caso contrário, remova-o para root .

    
por 01.02.2017 / 23:24