我习惯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
.xsessionrc
ssh-add -D
xautolock
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