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?
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