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
_コマンドはエージェントの存在を認識しないということですが、それは私には非常に奇妙に思えます。
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