Estou tentando iniciar awesome
o gerenciador de janelas como um subprocesso do ssh-agent
. Funcionou quando eu usei startx
( ssh-agent startx
). Mas agora estou tentando fazê-lo funcionar sob o lightdm
.
lightdm
começa /usr/bin/xinitrcsession-helper
:
#!/bin/bash
exec $HOME/.xinitrc
~/.xinitrc
:
ssh-agent awesome
E o que eu recebo é:
509 1 lightdm /usr/bin/lightdm
526 509 Xorg /usr/lib/Xorg :0 -seat seat0 -auth /run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
877 509 lightdm lightdm --session-child 14 21
1003 877 xinitrcse /bin/bash /usr/bin/xinitrcsession-helper
1028 1003 awesome awesome
1029 1028 ssh-a ssh-agent awesome
E set | grep SSH
não retorna nada.
Então eu começo outro xterm
( ssh-agent xterm
) e funciona:
1636 1 xterm xterm
1638 1636 bash bash
1651 1638 vim vim
9435 1651 xterm xterm
9447 9435 ssh-a ssh-agent xterm
9449 9435 bash bash
10464 9449 ps ps -eHo pid,ppid,comm,args
10465 9449 les less
O estranho aqui é que ssh-agent
é filho de um programa que ele inicia. Você pode explicar isso?
E como eu corro awesome
para que os programas que eu inicie depois disso possam ver ssh-agent
?
UPD Quanto ssh-agent
a ser filho do comando que executa. Isso é feito para poder substituir command
por ssh-agent command
. Então, ssh-agent
bifurca, e pai exec
é o command
.
UPD Meu mal, eu estava usando xbindkeys
para iniciar xterm
, e o primeiro passou a ser iniciado antes ssh-agent
. Como em, xbindkeys && ssh-agent awesome
. Então, não tinha SSH_*
variáveis para passar para xterm
. Ou então é a minha explicação mais provável. Ao usar awesome
as facilidades internas do start xterm
, as variáveis de ambiente são passadas corretamente.
Em sua atualização, você mencionou que você começa e
xterm
desdexbindkeys
que você executabindkeys
não terá o ambiente relacionado ao SSH e, como consequência disso,xterm
também não terá.Para resolver isso, sugiro
Agora, isso definiria as variáveis para
xbindkeys
eawesome
(o que pode ser o que você precisa e deseja), mas não mataria automaticamente ossh-agent
processo quando você fizer logout.Para isso, você pode usar (com
bash
),ou algo semelhante. Isso faria uma chamada
ssh-agent -k
que mataria o agente, assim que o shell saísse ou fosse encerrado porTERM
,HUP
ouINT
.A execução
eval
na saída dessh-agent -k
apenas desativaria as variáveis SSH e pode não ser necessária (já que o script está prestes a sair de qualquer maneira), portanto, a armadilha pode ser configurada para ser executada apenasssh-agent -k >/dev/null
em vez disso.A coisa sobre
ssh-agent
ser um processo filho do comando que ele inicia parece estranho.ssh-agent
bifurca o processo do agente real e, em seguida, substitui o processo original pelo do comando que deve ser executado (usandoexec()
). O resultado é que o processo original (xterm
em sua segunda árvore de processos) é o pai do agente:(o processo filho continua executando o resto do código)
Isso permite que você mate o agente sem muitas consequências para o comando que você deseja executar, por exemplo.