Execute startx em segundo plano sem mudar para o novo terminal virtual

Execute startx em segundo plano sem mudar para o novo terminal virtual

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 ttypara 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 usaropenvtpara executar um comando em um novo terminal virtual echvtpara mudar de volta.

Crie um script ~/.xinitrc.chvtcontendo

#!/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.chvtao contrário de, sh -c …é necessário porque startxconfunde os argumentos que contêm curingas e você precisa passar o caminho absoluto devido a outra peculiaridade do startx. Como alternativa, chame xinitdiretamente e configure XAUTHORITYpor 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/consolee 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 fgconsolecomo root executando visudoe adicionando a linha

zzy ALL = (root) NOPASSWD: /bin/fgconsole

após qualquer outra linha que se aplique à sua conta. É seguro, exceto um bug no fgconsoleprograma.

¹ 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.

informação relacionada