Domanda

Voglio correre qualche comando nello script python

import fcntl

KDSETLED = 0x4B32
SCR_LED  = 0x01

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

Ho impostato a+rw per /dev/console ma quando ho eseguito lo script da utente normale:

fcntl.ioctl (console_fd, KDSETLED, SCR_LED) IOError: [Errno 1] Operazione non consentito

Cosa devo fare se ho bisogno di eseguire lo script da utente normale?

È stato utile?

Soluzione

Credo che è necessario per ottenere lo script eseguito con CAP_SYS_TTY_CONFIG. O che, o (se si sta eseguendo sulla console), usando il vostro terminale di controllo (ad esempio, /dev/tty1) al posto di lavoro /dev/console potenza.

Il codice del kernel che impone questo sembra essere drivers / 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;

Quindi, sembra decisamente come quelli sono i tuoi due opzioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top