startx
é capaz de criar um novo servidor X em um novo terminal virtual. No entanto, mesmo se eu executá-lo em segundo plano, ou seja. sudo startx &
, ele ainda muda automaticamente para o novo terminal virtual. É possível criar um novo terminal virtual permanecendo no antigo?
Além disso, como posso saber o nome do arquivo do novo terminal? (Anteriormente, posso usar tty
para verificar na nova janela, mas como posso conseguir a mesma coisa na antiga?)
Responder1
Supondo que você esteja usando o X.org, isso não parece ser possível. O servidor X suporta umopçãochamado -novtswitch
, mas isso só se aplica quando o servidor X sai, não quando ele inicia. Dada a discussão emBug do Fedora #246267, parece que esta opção também se aplicava ao iniciar, mas foi removida porque fazia com que o servidor X travasse em muitos hardwares: o servidor X precisa acessar o hardware de vídeo ao iniciar.
A próxima melhor coisa seria permitir uma breve oscilação para outro vt e voltar. No Linux, você pode usaropenvt
para executar um comando em um novo terminal virtual echvt
para mudar de volta.
Crie um script ~/.xinitrc.chvt
contendo
#!/bin/sh
echo "New X session running on vt$X_FGCONSOLE" >"$ORIGINAL_TTY"
chvt "$ORIGINAL_FGCONSOLE"
exec ~/.xinitrc
e corra
ORIGINAL_FGCONSOLE=$(fgconsole) ORIGINAL_TTY=$(tty) openvt -s -- sh -c 'export X_FGCONSOLE=$(fgconsole); startx ~/.xinitrc.chvt -- vt$X_FGCONSOLE'
(O script separado, ~/.xinitrc.chvt
ao contrário de, sh -c …
é necessário porque startx
confunde os argumentos que contêm curingas e você precisa passar o caminho absoluto devido a outra peculiaridade do startx. Como alternativa, chame xinit
diretamente e configure XAUTHORITY
por conta própria.)
Dependendo de onde você está executando este script, você pode não ter permissão para executá-lo fgconsole
(“Não foi possível obter um descritor de arquivo referente ao console”), porque ele precisa ser capaz de abrir /dev/console
e não pode fazer isso se algum outro usuário (root, na prática) é o proprietário. Não sei como descobrir como retornar ao console original de outra forma. Uma solução, se você tiver acesso root, seria substituir ORIGINAL_FGCONSOLE=$(fgconsole) …
por
ORIGINAL_FGCONSOLE=$(sudo fgconsole)
e dê à sua conta permissão para executar fgconsole
como root executando visudo
e adicionando a linha
zzy ALL = (root) NOPASSWD: /bin/fgconsole
após qualquer outra linha que se aplique à sua conta. É seguro, exceto um bug no fgconsole
programa.
¹ Se você estiver usando Linux, você está usando X.org, e se não estiver usando Linux, ainda há uma boa mudança: você está usando X.org.