5

我有一个在终端窗口中正确运行的锁屏脚本(通过 i3lock),但在 i3 配置中用作键绑定时却没有。

该脚本非常简单:

# Take screenshot
scrot /tmp/screenshot.png

# Pixelate and add central logo
magick /tmp/screenshot.png -scale 10% -scale 1000% -gravity center /home/user/bin/archlogo.png -composite /tmp/lock.png

# Lock using pixelated image & logo
i3lock -e -f -c 000000 -i /tmp/lock.png

该脚本被保存~/bin/lock并可执行。该目录也已在我的~/.bash_profile.

没有错误信息,只是终端光标短暂闪烁。

中的相关行~/.config/i3/config

# lock screen
bindsym $mod+l exec lock

(删除了 $mod+l 的默认键绑定并重新启动了 i3)。

4

2 回答 2

3

~/.bash_profile是一个配置文件,bash因此仅在bash启动时加载(作为交互式登录 shell 或当它由其他 bash 配置文件显式获取时,例如~/.bashrc)。i3本身不会从X.org~/.bash_profile加载任何内容。因此,除非您从 bash shell(例如从控制台)启动您的 X 会话,否则对 PATH 的任何更改都不会被加载,并且不会知道要添加到.startxi3~/binPATH

如果你想PATHi3自己修改,那就~/.bash_profile不是正确的地方。不幸的是,对于 X 会话,“正确的位置”很大程度上取决于您如何启动它(例如,从控制台使用start或使用某些桌面管理器,如lightdmor kdm)。

PATH您可以为to添加一个设置~/.pam_environment,至少在 Arch 上应该将给定值添加到系统默认设置的PATH. 例如,如果您将以下内容放入您的~/.pam_environment

PATH=/home/soundscape/bin

默认值为

/usr/local/sbin:/usr/local/bin:/usr/bin

你最终会得到

/home/soundscape/bin:/usr/local/sbin:/usr/local/bin:/usr/bin

当然,这个值可能会~/.bash_profile在你启动bash.

注意: ~/.pam_environment不支持任何参数扩展,所以添加类似

PATH=${PATH}:${HOME}/bin

不会工作

于 2018-06-21T13:50:44.270 回答
1

我记得类似的事情......尝试像这样指定绝对路径,可能exec不尊重$PATH环境变量:

# lock screen
bindsym $mod+l exec "${HOME}/bin/lock"
于 2018-06-21T12:29:01.127 回答