De um ponto de vista de segurança, lembre-se de que o X foi projetado para ser usado na rede e no console físico. Terminais virtuais não são, então um login no VT físico é um animal de segurança diferente do X.
De este relatório de erros do Debian sobre o mesmo erro em fgconsole
. Aqui está a análise de por que chvt
e amigos não podem acessá-lo pelo X:
It doesn’t only affect fgconsole, but also
chvt
,openvt
and any other kbd utility which tries to get a console file descriptor. These programs do their job by trying to open/ioctl these files (in this order):
/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)
As none of these is able to respond to a
VT_GETSTATE
ioctl, fgconsole and friends fail.
A solução preferida para o problema é usar sudo
. Existem outras opções, mas elas são menos preferíveis no caso geral devido a problemas de segurança - você pode decidir que sua situação pode tolerar uma ou outra (ênfase minha):
So there is no real solution, if I don't use sudo?
Você não pode alterar as permissões de
/dev/tty0
ou/dev/console
sem abrindo um buraco de segurança gigante . Definir os programas desejados suid é um opção, mas eu ficaria longe disso.sudo
é muito mais seguro e pode ser controlado com mais detalhes.