Pregunta

Quiero ejecutar algún comando de script en Python

import fcntl

KDSETLED = 0x4B32
SCR_LED  = 0x01

console_fd = os.open('/dev/console', os.O_NOCTTY)
fcntl.ioctl(console_fd, KDSETLED, SCR_LED)

He puesto a+rw para /dev/console pero cuando corro guión de usuario normal:

fcntl.ioctl (console_fd, KDSETLED, SCR_LED) IOError: [Errno 1] Operación No se permite

¿Qué debo hacer si necesito para ejecutar esa secuencia de comandos de usuario normal?

¿Fue útil?

Solución

Creo que necesita para obtener la secuencia de comandos ejecuta con CAP_SYS_TTY_CONFIG. O eso, o (si se está ejecutando en la consola), el uso de su terminal controlada (por ejemplo, /dev/tty1) en lugar de trabajo /dev/console fuerzas.

El código del kernel que hace cumplir esto parece ser conductores / TTY / vt / vt_ioctl.c:

/*
 * To have permissions to do most of the vt ioctls, we either have
 * to be the owner of the tty, or have CAP_SYS_TTY_CONFIG.
 */
perm = 0;
if (current->signal->tty == tty || capable(CAP_SYS_TTY_CONFIG))
    perm = 1;
⋮
case KDSETLED:
    if (!perm)
        goto eperm;
    setledstate(kbd, arg);
    break;

Por lo tanto, definitivamente se ve como los que son sus dos opciones.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top