Executa o startx em segundo plano sem alternar para o novo terminal virtual

3

startx é capaz de criar um novo servidor X em um novo terminal virtual. No entanto, mesmo se eu executar em segundo plano, ou seja. sudo startx & , ele ainda alterna para o novo terminal virtual automaticamente. É possível criar um novo terminal virtual enquanto ainda permanece no antigo?

Além disso, como posso saber o nome do novo terminal? (Anteriormente, eu posso usar tty para fazer check-in na nova janela, mas como posso conseguir a mesma coisa na antiga?)

    
por zzy 31.10.2016 / 00:07

1 resposta

1

Supondo que você esteja usando o X.org, isso não parece ser possível. O servidor X suporta uma opção chamada -novtswitch mas isso só se aplica quando o servidor X sai, não quando é iniciado. Dada a discussão no bug do Fedora # 246267 , parece que esta opção também se aplicou ao iniciar, mas esta foi removido porque causou a falha do servidor X em muitos hardwares: o servidor X precisa acessar o hardware de vídeo quando ele é iniciado.

A próxima melhor coisa seria permitir um curto piscar para outro vt e voltar. No Linux, você pode usar openvt para executar um comando em um novo terminal virtual e chvt para voltar.

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 execute

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 em oposição a sh -c … é necessário porque startx atrapalha argumentos contendo curingas e você precisa passar o caminho absoluto devido a outra peculiaridade do startx. Alternativamente, chame xinit diretamente e configure o XAUTHORITY sozinho.)

Dependendo de onde você está executando esse script, você pode não ter permissão para executar fgconsole ("Não foi possível obter um descritor de arquivo referente ao console"), porque ele precisa abrir /dev/console e não pode fazer isso se algum outro usuário (root, na prática) possui. Eu não sei como descobrir como voltar ao console original. 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

depois de qualquer outra linha que se aplique à sua conta. É seguro, exceto um bug no programa fgconsole .

¹ Se você estiver usando Linux, você está usando o X.org, e se você não estiver usando o Linux, ainda há uma boa mudança em usar o X.org.

    
por 01.11.2016 / 00:12