Bash 脚本在终端模拟器中工作,但不能作为 i3 键绑定



我有一个锁屏脚本(通过 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(。

~/.bash_profilebash的配置文件,因此仅在bash启动时加载(作为交互式登录 shell 或当它被其他 bash 配置文件明确获取时,例如~/.bashrc(。i3本身不会从~/.bash_profile加载任何内容,也不会 X.org。因此,除非您从 bash shell 启动 X 会话(例如从控制台使用startx(,否则不会加载对 PATH 的任何更改,i3也不会知道~/bin被添加到PATH

如果要为i3本身修改PATH,则~/.bash_profile不是正确的位置。不幸的是,对于X会话,"正确的位置"在很大程度上取决于您如何启动它(例如,从带有start的控制台或使用某些桌面管理器(如lightdmkdm(。

你可以添加一个PATH设置~/.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时,~/.bash_profile或类似文件中的任何设置可能会进一步修改此值。

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

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

通。

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

# lock screen
bindsym $mod+l exec "${HOME}/bin/lock"

相关内容

最新更新