операция не разрешена - PullRequest
       11

операция не разрешена

3 голосов
/ 14 января 2011

Я хочу выполнить некоторую команду в скрипте Python

import fcntl

KDSETLED = 0x4B32
SCR_LED  = 0x01

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

Я установил a+rw для /dev/console, но когда я запускаю скрипт от обычного пользователя:

fcntl.ioctl (console_fd, KDSETLED, SCR_LED) IOError: [Errno 1] Операция не разрешено

Что мне делать, если мне нужно запустить этот скрипт от обычного пользователя?

1 Ответ

4 голосов
/ 14 января 2011

Полагаю, вам нужно выполнить скрипт с CAP_SYS_TTY_CONFIG.Либо это, либо (если вы работаете на консоли), использование вашего управляющего tty (например, /dev/tty1) вместо /dev/console может работать.

Код ядра, который обеспечивает это, кажется, драйверы/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;

Итак, определенно похоже, что это ваши два варианта.

...