Por favor,
alguém pode me dar uma luz no .xinitrc
arquivo? Eu me esforço para encontrar um bom manual para responder a algumas das minhas perguntas práticas:
- Ele se declarou como script geral do Bash, mas na verdade não é.
- Por que alguns comandos exigem
exec
e outros não? - O que é esse
exec
comando afinal? - É uma construção binária ou sintática específica para
xinitrc
? - O que pode ser executado pelo exec e o que não?
- Como definir as variáveis ambientais corretamente?
A maioria dos usuários de distros convencionais nem precisa saber sobre o xinitrc
, e o mesmo era verdade para mim, até que eu tive que configurar o shell "makeshift" do Kodi; usando o gerenciador de janelas super minimalista TWM e lançando o Kodi em tela cheia, porque kodi-standalone
o shell não funciona para mim.
Mas voltando ao xinitrc
:
Exemplo de trabalho:
#!/bin/bash
/usr/bin/twm &
sleep 1
exec xterm
Por que twm
e sleep
não precisa , exec
mas xterm
faz?
Não funciona exemplo:
#!/bin/bash
/usr/bin/twm &
sleep 1
exec WINDOWING=x11 /usr/bin/kodi -geometry +0+0
Aqui exec
executou apenas WINDOWING=x11
, mas ignorou o resto da linha. Eu fiz isso funcionar apenas envolvendo WINDOWING=x11 /usr/bin/kodi -geometry +0+0
em outro script Bash, desta vez um comum, e aquele colocado como o único argumento para exec
; então finalmente funcionou.
O
exec
comando substitui o processo shell atual pelo processo resultante da execução do comando fornecido. Semexec
, o controle seria devolvido à sessão de shell em espera assim que o comando terminasse. Comexec
, o shell atual é substituído, portanto, nenhum outro comando será executado a partir de seu script a partir desse ponto.O
~/.xinitrc
arquivo é um script de shell. Ele inicia o gerenciador de janelas (twm
no seu caso), e possivelmente outros clientes X11 que você pode querer iniciar inicialmente (comoxterm
ou algum outro terminal, exeyes
, obviamente). Não há sintaxe especial para este script, além de que deve ser um script válido (já que é executado por um interpretador de script de shell).No seu primeiro exemplo, você usa
Isso substitui o processo de shell atual por
xterm
. Semexec
, você teria exatamente o mesmo efeito visível , mas o.xinitrc
script ficaria em segundo plano esperando paraxterm
terminar antes de terminar (já que esse foi o último comando no arquivo).Observe que, se você tivesse feito
exec twm
, o shell teria se substituído, otwm
que significa que não seria capaz de executar os outros comandos no script. É por isso que você começatwm
como um processo em segundo plano (com&
no final). O sono está lá para permitirtwm
iniciar corretamente antes de iniciar o terminal. Não acho que isso seja estritamente necessário. Na verdade, se você não precisa de decorações de janela ou de poder mover janelas ou redimensioná-las, não há necessidade de executartwm
ou qualquer outro gerenciador de janelas (pelo menos não para executar uma tela inteiraxterm
).No seu segundo exemplo, você usa
Agora, o
exec
comando não pode ser usado para definir variáveis de ambiente assim. Em vez disso, você definiria e exportaria aWINDOWING
variável antes de invocarkodi
: