* Login

Autor Tema: Correr script al inicio de sesión grafica de usuario mediante sudo y/o como root  (Leído 1256 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado ThecaTTony

  • Administrador
  • *****
  • Joined: jun 2006
  • Mensajes: 2.404
  • País: ar
  • Sexo: Masculino
Hace tiempo que tengo un kit de teclado/mouse microsoft wireless desktop 3000 que funciona muy bien en ArchLinux. El problema que se presenta es que el receptor (dongle usb) también es detectado por dbus como un joystick, creando los siguientes archivos/nodos:

Código: (/dev/input/by-id/) [Seleccionar]
lrwxrwxrwx 1 root root 10 may  6 05:00 usb-Microsoft_Microsoft®_2.4GHz_Transceiver_v7.0-event-kbd -> ../event10
lrwxrwxrwx 1 root root 10 may  6 05:00 usb-Microsoft_Microsoft®_2.4GHz_Transceiver_v7.0-if01-event-mouse -> ../event11
lrwxrwxrwx 1 root root  9 may  6 05:00 usb-Microsoft_Microsoft®_2.4GHz_Transceiver_v7.0-if01-mouse -> ../mouse0
lrwxrwxrwx 1 root root 10 may  6 05:00 usb-Microsoft_Microsoft®_2.4GHz_Transceiver_v7.0-if02-event-joystick -> ../event12
lrwxrwxrwx 1 root root  6 may  6 05:00 usb-Microsoft_Microsoft®_2.4GHz_Transceiver_v7.0-if02-joystick -> ../js0

Y tanto Steam como varios juegos que he probado por defecto toman esos falsos joysticks como válidos, haciendo por ejemplo que el jugador camine hacia la izquierda ininterrumpidamente.

Si borraba /dev/input/js0 y /dev/input/event12 se solucionaba eso pero dejaban de funcionar las teclas multimedia. Por suerte tras buscar un rato encontré algo en este topic y pude dar con una solución que eliminaba los dispositivos fantasma y dejaba funcionando las teclas multimedia del teclado.

Una regla de udev y un script que cambia los permisos:
Código: (/etc/udev/rules.d/99-fix-jsx-eventx.rules) [Seleccionar]
SUBSYSTEM=="input", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="0745", KERNEL=="js[0-9]*", RUN+="/usr/local/bin/fix-jsx-eventx.sh"
Código: (/usr/local/bin/fix-jsx-eventx.sh) [Seleccionar]
#!/bin/bash
sleep 5
chmod a-r-w "/dev/input/by-id/usb-Microsoft_Microsoft®_2.4GHz_Transceiver_v7.0-if02-event-joystick"
chmod a-r-w "/dev/input/by-id/usb-Microsoft_Microsoft®_2.4GHz_Transceiver_v7.0-if02-joystick"

Todo muy lindo y funcional, salvo cuando inicio sesión gráfica. Por motivos que desconozco X cambia los permisos cuando inicio sesión (sddm/Kde5) teniendo que volver a correr el script a mano y/o conectar el adaptador (dongle usb).

Agregué el script a ~/.xinitrc pero el mismo se debe estar ejecutando mucho antes de que X (o algo relacionado a este) haga la modificación de permisos, entonces no había cambios. También agregué el script al Autostart propio de KDE (crea enlaces en ~/.config/autostart) y di permisos a mi usuario mediante /etc/sudoers para que se pueda correr dicho script con sudo sin necesidad de una constraseña, pero aparece lo siguiente en el log de sistema:

Código: [Seleccionar]
may 06 05:01:24 florencia rtkit-daemon[968]: Failed to make ourselves RT: Operation not permitted
may 06 05:01:24 florencia rtkit-daemon[968]: Supervising 0 threads of 0 processes of 1 users.
may 06 05:01:24 florencia rtkit-daemon[968]: Warning: Reached burst limit for user '1000', denying request.
may 06 05:01:24 florencia rtkit-daemon[968]: Supervising 0 threads of 0 processes of 1 users.

¿Alguna idea como solucionar eso?

Momentáneamente los permisos se corrigen corriendo el script a fuerza de incluirlo en ~/.bashrc ~/.bash_profile pero no me parece que sea lo mejor o indicado.

Desconectado the98

  • Moderator
  • ****
  • Joined: dic 2006
  • Ubicación: Cap Fed
  • Mensajes: 2.683
  • País: ar
  • Sexo: Masculino
  • Cogito Ergo Linux
Recién veo esto. Seguro probaste usar /etc/rc.local ¿no?

Desconectado ThecaTTony

  • Administrador
  • *****
  • Joined: jun 2006
  • Mensajes: 2.404
  • País: ar
  • Sexo: Masculino
No existe eso en Archlinux (ya no más), pero el problema lo solucioné con la correcta regla de udev:
Código: [Seleccionar]
$ cat /etc/udev/rules.d/51-fix-jsx-eventx.rules
SUBSYSTEM=="input", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="0745", ENV{ID_INPUT_JOYSTICK}=="?*", MODE="0000", ENV{ID_INPUT_JOYSTICK}=""
SUBSYSTEM=="input", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="0745", KERNEL=="js[0-9]*", MODE="0000", ENV{ID_INPUT_JOYSTICK}=""

Eso deja los permisos del siguiente modo:
Código: [Seleccionar]
$ l /dev/input/
total 0
drwxr-xr-x 2 root root     160 jun 12 18:13 by-id/
drwxr-xr-x 2 root root     180 jun 12 18:13 by-path/
crw-rw---- 1 root input 13, 64 jun 10 01:17 event0
crw-rw---- 1 root input 13, 65 jun 10 01:17 event1
crw-rw---- 1 root input 13, 74 jun  9 12:09 event10
crw-rw---- 1 root input 13, 75 jun 10 01:17 event11
crw-rw---- 1 root input 13, 76 jun  9 12:09 event12
crw-rw---- 1 root input 13, 77 jun  9 12:09 event13
crw-rw---- 1 root input 13, 78 jun  9 12:09 event14
crw-rw---- 1 root input 13, 79 jun  9 12:09 event15
c--------- 1 root input 13, 66 jun 10 01:17 event2
crw-rw---- 1 root input 13, 67 jun  9 12:09 event3
crw-rw---- 1 root input 13, 68 jun  9 12:09 event4
crw-rw---- 1 root input 13, 69 jun  9 12:09 event5
crw-rw---- 1 root input 13, 70 jun  9 12:09 event6
crw-rw---- 1 root input 13, 71 jun  9 12:09 event7
crw-rw---- 1 root input 13, 72 jun  9 12:09 event8
crw-rw---- 1 root input 13, 73 jun  9 12:09 event9
c--------- 1 root input 13,  0 jun 10 01:17 js0
crw-rw---- 1 root input 13, 63 jun  9 12:09 mice
crw-rw---- 1 root input 13, 32 jun 10 01:17 mouse0

En fin, solucioné un problema que llevaba teniendo desde hacía años, gracias por preguntar.

Y también quita el parámetro de udev que identifica dichos nodos cómo un joystick (ID_INPUT_JOYSTICK=1), evitando conflictos:
Código: [Seleccionar]
$ udevadm info /dev/input/js0
P: /devices/pci0000:00/0000:00:13.2/usb8/8-1/8-1.1/8-1.1:1.2/0003:045E:0745.0006/input/input30/js0
N: input/js0
S: input/by-id/usb-Microsoft_Microsoft®_2.4GHz_Transceiver_v7.0-if02-kbd
S: input/by-path/pci-0000:00:13.2-usb-0:1.1:1.2-kbd
E: DEVLINKS=/dev/input/by-path/pci-0000:00:13.2-usb-0:1.1:1.2-kbd /dev/input/by-id/usb-Microsoft_Microsoft®_2.4GHz_Transceiver_v7.0-if02-kbd
E: DEVNAME=/dev/input/js0
E: DEVPATH=/devices/pci0000:00/0000:00:13.2/usb8/8-1/8-1.1/8-1.1:1.2/0003:045E:0745.0006/input/input30/js0
E: ID_BUS=usb
E: ID_INPUT=1
E: ID_INPUT_KEY=1
E: ID_INPUT_KEYBOARD=1
E: ID_MODEL=Microsoft®_2.4GHz_Transceiver_v7.0
E: ID_MODEL_ENC=Microsoft®\x202.4GHz\x20Transceiver\x20v7.0
E: ID_MODEL_ID=0745
E: ID_PATH=pci-0000:00:13.2-usb-0:1.1:1.2
E: ID_PATH_TAG=pci-0000_00_13_2-usb-0_1_1_1_2
E: ID_REVISION=0633
E: ID_SERIAL=Microsoft_Microsoft®_2.4GHz_Transceiver_v7.0
E: ID_TYPE=hid
E: ID_USB_DRIVER=usbhid
E: ID_USB_INTERFACES=:030101:030102:030000:
E: ID_USB_INTERFACE_NUM=02
E: ID_VENDOR=Microsoft
E: ID_VENDOR_ENC=Microsoft
E: ID_VENDOR_ID=045e
E: MAJOR=13
E: MINOR=0
E: SUBSYSTEM=input
E: USEC_INITIALIZED=47278042303

 

Con CuentaDigital.com cobre con PagoFacil RapiPago y BaproPagos

Colaborá con Argentop2p