[英]Bash script works in terminal emulator, but not as i3 keybind
我有一个锁屏脚本(通过 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_profile
是bash
的配置文件,因此仅在bash
启动时加载(作为交互式登录 shell 或由其他 bash 配置文件明确提供,例如~/.bashrc
)。 i3
本身不会从~/.bash_profile
加载任何内容, X.org也不会。 因此,除非您从 bash shell(例如从控制台使用startx
)启动 X 会话,否则不会加载对 PATH 的任何更改,并且i3
不会知道~/bin
被添加到PATH
。
如果你想修改i3
本身的PATH
,那么~/.bash_profile
不是正确的地方。 不幸的是,对于 X 会话,“正确的位置”很大程度上取决于您如何启动它(例如,从带有start
的控制台或某些桌面管理器(如lightdm
或kdm
)。
您可以将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"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.