linux - Bash 脚本在终端仿真器中工作,但不能作为 i3 键绑定(bind)

标签 linux bash archlinux i3

我有一个锁屏脚本(通过 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+l 的默认键绑定(bind)并重新启动了 i3)。

最佳答案

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

如果您想修改i3 本身的PATH,那么~/.bash_profile 不是正确的地方。不幸的是,对于 X session ,“正确的位置”在很大程度上取决于您如何启动它(例如,从控制台使用 start 或使用一些桌面管理器,如 lightdmkdm )。

您可以将 PATH 的设置添加到 ~/.pam_environment,这 - 至少在 Arch 上 - 应该将给定值添加到系统默认设置 >路径。例如,如果您将以下内容放入 ~/.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

工作。

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

相关文章:

linux - Bash 脚本添加参数中收到的数字

bash - 200 >"$somefile"完成了什么?

linux - I2C EEPROM 读/写 Cubieboard 2 Arch Linux

linux - 当 `pacman -Udd package.pkg.tar` 时,依赖性检查跳过在 pacman 中不起作用

archlinux - 如何使用pacman查看发行说明/变更日志

linux - expect + 如何识别 expect break 因为超时?

linux - 如何逐行计算没有单词的行 word2 -bash 在哪里

c++ - -fshort-wchar 和 std::wstring - 段错误

linux - 两个文件的嵌套循环

javascript - 在我获取 .env 文件内的所有变量后,如果在 bash 或系统中定义了它们,如何替换其中任何变量的值