如果从 .xsessionrc 启动,xautolock/ssh-add 无法与 ssh-agent 交互

如果从 .xsessionrc 启动,xautolock/ssh-add 无法与 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然后在终端中运行xautolock命令,一切都会按预期进行。.xsessionrc

为什么不能通过与 SSH 代理的对话生成ssh-add -D进程,而通过常规终端生成进程却可以?xautolock.xsessionrcssh-add -Dxautolock

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命令不知道代理的存在,但这对我来说似乎很奇怪。

答案1

X 窗口管理器通过命令启动ssh-agent dbus-launcher --exit-with-session i3,这意味着 SSH 代理在窗口管理器之前启动。然而,Debian.xsessionrc在此之前进行了源代码,因此当xautolocker启动时,SSH 代理尚未启动,并且ssh-add与代理通信所需的环境变量尚未设置。

一种解决方案是修改.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

相关内容