Jump to content
From ArchWiki

Status de tradução: Esse artigo é uma tradução de Xinit. Data da última tradução: 2019-11-09. Você pode ajudar a sincronizar a tradução, se houver alterações na versão em inglês.

Artigos relacionados

- Gerenciador de exibição
- Xorg
- xprofile
- Xresources

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.

Nota: Xinit possui seu próprio comportamento padrão em vez de executar o arquivo. Veja xinit(1) para detalhes.

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

Nota: No mínimo, certifique-se de que o último bloco if em `/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.

Dica: `-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`.

Nota: Para habilitar novamente o redirecionamento da saída da sessão X para o arquivo de log do Xorg, adicione a opção `-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

Nota: O xinit não oferece suporte a múltiplos displays quando outro servidor X já está iniciado. Para isso você deve especificar o display anexando `-- :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

Nota: pkill vai matar todas as instâncias X em execução. Para matar especificamente o gerenciador de janela no terminal virtual atual, execute:

    $ 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).

Nota: Display precisa se especificado (pois o carregamento `/etc/X11/xinit/xinitrc.d/` é ignorado) para algumas operações para funcionar (por exemplo, para daemons de notificação). [2]
Dica: Isso pode ser usado para iniciar programas de interface gráfica comum, mas sem qualquer recurso básico de gerenciador de janela. Veja também #Inicializando aplicativos sem um gerenciador de janela e Executando um programa em uma tela X separada.

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

Dica: Esse método pode ser combinado com login automático a um console virtual.

### 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).

Dica: Isso pode ser útil para lançar jogos gráficos, nos quais a sobrecarga de um compositor pode ajudar a melhorar o desempenho da execução do jogo.

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.

Category:

- Xorg commands (Português)