web-dev-qa-db-ja.com

xautolock / ssh-addは、.xsessionrcから起動された場合、ssh-agentと対話できません。

xautolockを使用して画面をロックし、一定時間操作がないとラップトップを一時停止します。これは正常に機能します。 xautolockは_.xsessionrc_から開始されます。

_xautolock -time 60 -detectsleep -locker '~/bin/lockscreen --suspend' &
_

_~/bin/lockscreen_スクリプトは、特に_ssh-add -D_を実行して、実行中のSSHエージェントからすべてのSSHキーを削除します。ただし、これは、xautolockが_.xsessionrc_から生成された場合は機能しません。_ssh-add -D_コマンドは、認証エージェントと通信できないと文句を言います。

ただし、ターミナルから_ssh-add -D_は問題なく実行できます。また、_pkill xautolock_を実行してから、ターミナルで_.xsessionrc_からxautolockコマンドを実行すると、すべてが期待どおりに機能します。

_ssh-add -D_から生成されたxautolockから生成された_.xsessionrc_プロセスがSSHエージェントと通信できないのに、通常の端末から生成されたxautolockから生成された_ssh-add -D_ができないのはなぜですか?

_ps auf_はこのツリーを示しています:

_root     24126  0.0  0.1 105812  5032 tty1     Ss   18:34   0:00 /bin/login --        
andreas  24132  0.0  0.1  40232  4956 tty1     S    18:34   0:00  \_ -zsh
andreas  24140  0.0  0.0   4328  1576 tty1     S+   18:34   0:00    \_ /bin/sh /usr/bin/startx
andreas  24162  0.0  0.0  15944  1952 tty1     S+   18:34   0:00      \_ xinit /etc/X11/xinit/xinitrc -- /etc/X11/xinit/xserverrc :0 vt1 -auth /tmp/serverauth.afXu0ohTRz
root     24163  1.4  0.5 165868 20048 tty1     S    18:34   0:02        \_ /usr/bin/X -nolisten tcp :0 vt1 -auth /tmp/serverauth.afXu0ohTRz
andreas  24169  0.0  0.2 113572 10600 tty1     S    18:34   0:00        \_ x-window-manager
andreas  24203  0.0  0.7 489436 26380 tty1     Sl   18:34   0:00          \_ nm-applet
andreas  24204  0.0  0.0  20140  2700 tty1     S    18:34   0:00          \_ xautolock -time 60 -detectsleep -locker ~/bin/lockscreen --suspend
andreas  24209  0.0  0.0  22196  2680 tty1     S    18:34   0:00          \_ /usr/bin/unclutter -idle 1 -root
andreas  24212  0.0  0.0  10688   340 ?        Ss   18:34   0:00          \_ /usr/bin/ssh-agent /usr/bin/dbus-launch --exit-with-session x-window-manager
_

私の唯一の理論は、xautolockがSSHエージェントの前に開始されるため、フォークされた_ssh-add_コマンドはエージェントの存在を認識しないということですが、それは私には非常に奇妙に思えます。

2
Andreas

Xウィンドウマネージャーは、コマンドssh-agent dbus-launcher --exit-with-session i3を介して開始されます。これは、SSHエージェントがウィンドウマネージャーの直前に開始されることを意味します。ただし、Debianはこれが発生する前に.xsessionrcをソースするため、xautolockerが開始されたとき、SSHエージェントは開始されておらず、ssh-addがエージェントと通信するために必要な環境変数は開始されていません。設定されています。

1つの解決策は、.xinitrcを変更して、.xsessionrcを調達する前にエージェントを起動することです。

if command -v 'ssh-agent' >/dev/null 2>&1; then
    eval $(ssh-agent -s)
fi

[ -e $HOME/.xsessionrc ] && . $HOME/.xsessionrc

x-window-manager

if command -v 'ssh-agent' >/dev/null 2>&1; then
    ssh-agent -k
fi
1
Andreas