![“ssh-agent dwm”从.xinitrc启动,但未设置环境变量](https://linux22.com/image/183334/%E2%80%9Cssh-agent%20dwm%E2%80%9D%E4%BB%8E.xinitrc%E5%90%AF%E5%8A%A8%EF%BC%8C%E4%BD%86%E6%9C%AA%E8%AE%BE%E7%BD%AE%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F.png)
我得到一个.xinitrc
包含以下行的文件:
# it will start my window manager
ssh-agent dwm
之后我得到了一个进程,但是 当我从 启动终端时,像和 这样
ssh-agent
的环境变量 不存在。有什么想法吗?$SSH_AGENT_PID
$SSH_AUTH_SOCK
dwm
我希望只有一个ssh-agent
过程。每次调用都ssh-add
应该连接到启动的代理dwm
。
答案1
ssh-agent
输出您需要连接到它的环境变量,通过调用eval
您立即将这些变量加载到您的环境中。
为什么ssh-agent
自己不能做到这一点?
在Unix中,进程只能修改自己的环境变量,并将它们传递给子进程。它不能修改其父进程的环境,因为系统不允许。这是非常基本的安全设计。
与此相关的阅读这。
因此,将你的`.xinitrc保留为:
eval $(ssh-agent) &
exec dwm
答案2
在你的.xinitrc
dwm 中应该用 exec 调用。以下为我设置了 dwm 代理:
exec ssh-agent dwm
运行 startx 然后打开终端会显示代理已加载。