С точки зрения безопасности, напомним, что X предназначен для использования как по сети, так и на физической консоли. Виртуальные терминалы - нет, поэтому логин на физическом терминале отличается от безопасности X.
Из этого отчета об ошибках Debian о той же ошибке в fgconsole
. Вот почему chvt
и друзья не могут получить к нему доступ из X:
Он влияет не только на fgconsole, но также на chvt
, openvt
и любую другую утилиту kbd, которая пытается получить дескриптор файла консоли. Эти программы делают свою работу, пытаясь открыть /ioctl эти файлы (в следующем порядке):
/proc/self/fd/0 (is a pseudo tty in your case)
/dev/tty (also PTY)
/dev/tty0 (only accessible to root)
/dev/vc/0 (doesn’t exist nowadays)
/dev/console (root)
std{in,out,err} (PTY)
Так как ни один из них не может ответить на VT_GETSTATE
ioctl, fgconsole и друзья терпят неудачу.
Предпочтительным решением проблемы является использование sudo
. Существуют и другие варианты, но они менее предпочтительны в общем случае из-за проблем с безопасностью - вы можете решить, что ваша ситуация может терпеть один или другой (выделение мое):
Так что нет реального решения, если я не использую sudo?
Вы не можете изменить разрешения для /dev/tty0
или /dev/console
не открывая гигантскую дыру в безопасности. Установка желаемых программ suid - вариант, но я бы держался от него подальше. sudo
намного безопаснее и может контролироваться более подробно.