我有一个锁屏脚本(通过i3lock)可以在终端窗口中正常运行,但不能用作i3配置中的按键绑定(bind)。

该脚本非常简单:

# 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的默认键绑定(bind),并重新启动了i3)。

最佳答案

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

如果要为PATH本身修改i3,那么~/.bash_profile不合适。不幸的是,对于X session ,“正确的位置”在很大程度上取决于您的启动方式(例如,从控制台使用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

不起作用,而不起作用。

关于linux - Bash脚本可在终端仿真器中工作,但不能作为i3键绑定(bind),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50968451/

10-12 00:44