[英]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.