Bash 脚本在终端仿真器中有效,但不适用于 i3 键绑定
Bash script works in terminal emulator, but not as i3 keybind
我有一个锁屏脚本(通过 i3lock)可以在终端中正确运行 window,但在 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 已重新启动)。
我记得类似的东西...尝试像这样指定绝对路径,可能是 exec
不遵守 $PATH
环境变量:
# lock screen
bindsym $mod+l exec "${HOME}/bin/lock"
~/.bash_profile
是 bash
的配置文件,因此仅在 bash
启动时加载(作为交互式登录 shell 或者当它由其他 bash 配置文件,例如 ~/.bashrc
)。 i3
本身不会从 ~/.bash_profile
加载任何内容,X.org 也不会。因此,除非您从 bash shell 启动 X 会话(例如从控制台使用 startx
),否则不会加载对 PATH 的任何更改,并且 i3
不会知道关于 ~/bin
被添加到 PATH
.
如果你想为i3
本身修改PATH
,那么~/.bash_profile
不是正确的地方。不幸的是,对于 X 会话,"right place" 很大程度上取决于您如何启动它(例如,从控制台使用 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
不会工作。
我有一个锁屏脚本(通过 i3lock)可以在终端中正确运行 window,但在 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 已重新启动)。
我记得类似的东西...尝试像这样指定绝对路径,可能是 exec
不遵守 $PATH
环境变量:
# lock screen
bindsym $mod+l exec "${HOME}/bin/lock"
~/.bash_profile
是 bash
的配置文件,因此仅在 bash
启动时加载(作为交互式登录 shell 或者当它由其他 bash 配置文件,例如 ~/.bashrc
)。 i3
本身不会从 ~/.bash_profile
加载任何内容,X.org 也不会。因此,除非您从 bash shell 启动 X 会话(例如从控制台使用 startx
),否则不会加载对 PATH 的任何更改,并且 i3
不会知道关于 ~/bin
被添加到 PATH
.
如果你想为i3
本身修改PATH
,那么~/.bash_profile
不是正确的地方。不幸的是,对于 X 会话,"right place" 很大程度上取决于您如何启动它(例如,从控制台使用 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
不会工作。