簡體   English   中英

Bash 腳本適用於終端模擬器,但不適用於 i3 鍵綁定

[英]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_profilebash的配置文件,因此僅在bash啟動時加載(作為交互式登錄 shell 或由其他 bash 配置文件明確提供,例如~/.bashrc )。 i3本身不會從~/.bash_profile加載任何內容, X.org也不會。 因此,除非您從 bash shell(例如從控制台使用startx )啟動 X 會話,否則不會加載對 PATH 的任何更改,並且i3不會知道~/bin被添加到PATH

如果你想修改i3本身的PATH ,那么~/.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時,這個值可能會被~/.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM