xinit (Português)
Do Wikipédia:
- O programa xinit permite que um usuário inicie manualmente um servidor de exibição Xorg. O script startx(1) é um front-end para xinit(1).
xinit é normalmente usado para iniciar os gerenciadores de janela ou ambientes de desktop. Embora você também possa usar o xinit para executar aplicativos GUI sem um gerenciador de janelas, muitos aplicativos gráficos esperam um gerenciador de janelas compatível com EWMH. O gerenciador de exibição inicia o Xorg para você e geralmente obtém o xprofile.
Instalação
Instale o pacote xorg-xinit.
Configuração
xinit e startx aceitam um argumento opcional do programa cliente, veja #Sobrescrever xinitrc. Se você não fornecer um, eles procurarão ~/.xinitrc
para executar como um script de shell para inicializar os programas clientes.
xinitrc
O ~/.xinitrc
é útil para executar programas dependendo do X e definir variáveis de ambiente na inicialização do servidor X. Se ele estiver presente no diretório home de um usuário, startx e xinit o executa. Do contrário, startx executará o /etc/X11/xinit/xinitrc
padrão.
Este xinitrc padrão iniciará um ambiente básico com Twm, xorg-xclock e Xterm (supondo que os pacotes necessários estejam instalados). Portanto, para iniciar um gerenciador de janelas ou ambiente de desktop diferente, primeiro crie uma cópia do xinitrc
padrão em seu diretório inicial:
$ cp /etc/X11/xinit/xinitrc ~/.xinitrc
Então, edite o arquivo e substitua os programas padrão pelos comandos desejados. Lembre-se que as linhas que seguem um comando usando exec
serão ignoradas. Por exemplo, para iniciar xscreensaver
em segundo plano e, em seguida, iniciar openbox, use o seguinte:
~/.xinitrc
... xscreensaver & exec openbox-session
/etc/X11/xinit/xinitrc
esteja presente em seu arquivo ~/.xinitrc
para garantir que os scripts em /etc/X11/xinit/xinitrc.d
são originados.Programas de execução longa iniciados antes do gerenciador de janelas, como um aplicativo de proteção de tela e de papel de parede, devem ser separados ou executados em segundo plano anexando um sinal de &
. Caso contrário, o script pararia e aguardaria a saída de cada programa antes de executar o gerenciador de janelas ou o ambiente de área de trabalho. Note que alguns programas não devem ser bifurcados (fork), para evitar bugs de corrida, como é o caso do xrdb. Acrescentar exec
antes do comando substituirá o processo do script pelo processo do gerenciador de janelas, de modo que o X não saia mesmo que esse processo se bifurque ao segundo plano.
xserverrc
O arquivo xserverrc
é um script de shell responsável por inicializar o servidor X. Ambos startx e xinit executam ~/.xserverrc
se ele existir; caso contrário, startx usará /etc/X11/xinit/xserverrc
.
Para manter um sessão autenticada com logind
e para evitar contornar o bloqueio de tela alternando os terminais, o Xorg deve ser iniciado no mesmo terminal virtual onde ocorreu o login [1]. Portanto, é recomendado especificar vt$XDG_VTNR
no arquivo ~/.xserverrc
:
~/.xserverrc
#!/bin/sh exec /usr/bin/Xorg -nolisten tcp "$@" vt$XDG_VTNR
Veja Xserver(1) para uma lista de todas as opções de linha de comando.
-nolisten local
pode ser adicionado após -nolisten tcp
para desabilitar soquetes abstratos de X11 para ajudar com isolação. Há uma rápida história por trás sobre como isso potencialmente afeta a segurança do X11.Alternativamente, se você deseja que o X seja exibido em um console separado daquele onde o servidor é invocado, você pode fazê-lo usando o wrapper do servidor X fornecido por /usr/lib/systemd/systemd-multi-seat-x
. Por conveniência, xinit e startx podem ser configurados para usar este wrapper modificando seu ~/.xserverrc
.
-keeptty
. Veja Xorg#Redirecionamento do log da sessão para detalhes.Uso
Para executar o Xorg como um usuário comum, use:
$ startx
ou se #xserverrc estiver configurado:
$ xinit -- :1
-- :número_display
, onde número_display
é 1
ou mais.Seu gerenciador de janela (ou ambiente de desktop) deve ser iniciado corretamente agora.
Para sair do X, execute a função de saída do seu gerenciador de janela (supondo que ele tenha uma). Se não tiver essa funcionalidade, execute:
$ pkill -15 Xorg
$ pkill -15 -t tty"$XDG_VTNR" Xorg
Veja também signal(7).
Dicas e truques
Sobrescrever xinitrc
Se você tem um ~/.xinitrc
funcionando, mas quer apenas tentar outro gerenciador de janela ou ambiente de desktop, você pode executá-lo emitindo startx seguido pelo caminho para o gerenciador de janela, por exemplo:
$ startx /usr/bin/i3
Se o binário recebe argumentos, eles precisam ser citados para serem reconhecidos como parte do primeiro parâmetro de startx:
$ startx "/usr/bin/aplicativo --chave valor"
Note que o caminho completo é obrigatório. Você também pode especificar opções personalizadas para o script #xserverrc anexando-as após o sinal de traço duplo --
:
$ startx /usr/bin/enlightenment -- -br +bs -dpi 96
Veja também startx(1).
/etc/X11/xinit/xinitrc.d/
é ignorado) para algumas operações para funcionar (por exemplo, para daemons de notificação). [2]
Inicializar automaticamente o X no login
Certifique-se de que startx esteja apropriadamente configurado.
Para o Bash, adicione o seguinte ao final do ~/.bash_profile
. Se o arquivo não existir, copie uma versão esqueleto de /etc/skel/.bash_profile
. Para Zsh, adicione-o a ~/.zprofile
.
if systemctl -q is-active graphical.target && [[ ! $DISPLAY && $XDG_VTNR -eq 1 ]]; then exec startx fi
Você pode substituir a comparação -eq
por uma como -le 3
(de vt1 a vt3) se quiser usar logins gráficos em mais de um terminal virtual.
Condições alternativas para detectar o terminal virtual incluem "$(tty)" = "/dev/tty1"
, que não permite comparação com -le
, e "$(fgconsole 2>/dev/null || echo -1)" -eq 1
, que não funciona em consoles seriais.
Se você quiser de permanecer autenticado quando a sessão X terminar, remova exec
.
Veja também Fish#Start X at login e Systemd/User#Automatic login into Xorg without display manager.
Alternando entre ambientes de desktop/gerenciadores de janela
Se você estiver alternando com frequência entre diferentes ambientes de desktop ou gerenciadores de janela, é conveniente usar um gerenciador de exibição ou expandir ~/.xinitrc
para tornar a troca possível.
O seguinte exemplo mostra como iniciar um determinado ambiente de desktop ou gerenciador de janela com um argumento:
~/.xinitrc
... # Aqui o Xfce é mantido como padrão session=${1:-xfce} case $session in i3|i3wm ) exec i3;; kde ) exec startplasma-x11;; xfce|xfce4 ) exec startxfce4;; # Nenhuma sessão conhecida, tenta como comando * ) exec $1;; esac
Para passar o argumento sessão:
$ xinit sessão
ou
$ startx ~/.xinitrc sessão
Inicializando aplicativos sem um gerenciador de janela
É possível iniciar apenas aplicativos específicos sem um gerenciador de janela, embora provavelmente isso seja útil apenas com um único aplicativo mostrado no modo de tela cheia. Por exemplo:
~/.xinitrc
... exec chromium
Alternativamente, o binário pode ser chamado diretamente a partir do prompt de comando, conforme descrito em #Sobrescrever xinitrc.
Com esse método, você precisa definir a geometria de cada janela do aplicativo por meio de seus próprios arquivos de configuração (se possível).
Veja também also Gerenciador de exibição#Iniciando aplicativos sem um gerenciador de janela.
Faça redirecionamento usando startx
Veja Xorg#Redirecionamento do log da sessão para detalhes.