Bash脚本可在终端仿真器中使用,但不能作为i3键绑定

时间:2018-06-21 12:20:30

标签: linux bash arch 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 + 1的默认键绑定已删除,i3重新启动)。

2 个答案:

答案 0 :(得分:2)

~/.bash_profilebash的配置文件,因此仅在bash启动时(作为交互式登录shell或由其他bash配置文件有意提供时)加载。 ~/.bashrc)。 i3本身不会从~/.bash_profile加载任何内容, X.org 也不会加载任何内容。因此,除非您从bash shell(例如从控制台使用startx)开始X会话,否则将不会加载对PATH的任何更改,并且i3将不知道添加了~/binPATH

如果您想为PATH本身修改i3,那么~/.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_profile时,bash或类似文件中的任何设置都可能会进一步修改该值。

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

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

起作用。

答案 1 :(得分:0)

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

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