
Encontré varias preguntas sobrehttp://unix.stackexchange.com& enhttp://stackoverflow.comrelacionado con el script de inicio según las reglas de udev. Pero no puedo encontrar una solución exacta o una respuesta cierta para ejecutarIntentoguion.
Entonces, estoy haciendo la pregunta (canónica):¿Cómo ejecutar/iniciar/ejecutar un script Bash mediante reglas udev?
Otra cosa que encontré enEscribir reglas de udeves:
udev no ejecuta estos programas en ningún terminal activo y no los ejecuta bajo el contexto de un shell. Asegúrese de que su programa esté marcado como ejecutable; si es un script de shell, asegúrese de que comience con el código apropiado (por ejemplo, #!/bin/sh) y no espere que aparezca ninguna salida estándar en su terminal.
Por lo tanto, quiero saber si es posible que "Cómo ejecutarscript de bash¿Por las reglas de udev?"
A continuación se muestra un ejemplo sencillo de ejecución de bash-script.
He escrito 99-myrule.rules
debajo /etc/udev/rules.d
que contiene:
ACTION=="add", ATTR{idVendor}=="0781", ATTR{idProduct}=="5567", RUN+="/home/pandya/example.sh"
Encontré ID de proveedor y producto en lsusb
la salida:
$ lsusb | grep SanDisk
Bus 001 Device 066: ID 0781:5567 SanDisk Corp. Cruzer Blade
Y quiero ejecutar un comando experimental zenity --info
cuando mi pendrive (de SanDisk mencionado anteriormente) esté conectado.
entonces, he escrito /home/pandya/example.sh
(que se llama RUN+=
en las reglas de udev) contians:
#!/bin/bash
zenity --info &
exit
Pero este script no se está ejecutando (a pesar de tener permiso de ejecución). También intenté lo siguiente:
export DISPLAY=:0
en guión anteszenity --info
bash -c 'DISPLAY=:0 zenity --info
Y por supuesto:
sudo restart udev
sudo udevadm control --reload-rules
Pero no puedo obtener resultados zenity --info
.
Por eso¿Cómo puedo ejecutar el script Bash según las reglas de udev? Sugiérame si me falta algo.
Respuesta1
Lo más probable es que el comando se esté ejecutando pero no sepa dónde mostrar el resultado. Supongo que está iniciando sesión en X con un usuario que no es root, y lo más probable es que esa regla se ejecute como root. Pruebe el siguiente comando:
su - your_X_user_here -c 'export DISPLAY=:0;zenity --info'
Para ejecutar cualquierGuión de bashsigue el comando:
su - your_X_user_here -c 'export DISPLAY=:0; bash -c "/path/to/script.sh"'
Respuesta2
recientemente encontréuna manera elegantepara mostrar GUI o tarea X desde las reglas de udev sin preocuparse por la PANTALLA. El principio sería el mismo para los scripts de Shell que utilizan export
.
IMPORT{program}="/usr/bin/xpub", \
RUN+="/bin/su $env{XUSER} -c '/usr/bin/notify-send Hello'"
$env{ENV}
: si el usuario tty actual inicia X, de lo contrario elimínelo pararaíz.
Respuesta3
Para cualquiera que lea esto, la única forma en que pude hacer funcionar mi script en Kali Linux 2016 fue así:
#!/bin/bash
set -x
xhost local:root
export DISPLAY=:0.0
su root -c 'zenity --notification --text="I am a notification!"'