Скрипт Bash работает в эмуляторе терминала, но не в качестве 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 был перезапущен).

2 ответа

~/.bash_profile это файл конфигурации для bash и как таковой загружается только когда bash запускается (как интерактивная оболочка входа в систему или когда она явно получена из других файлов конфигурации bash, например ~/.bashrc). i3 сам ничего не загружает из ~/.bash_profile и не делает X.org. Так что, если вы не начнете свой сеанс X из оболочки Bash (например, с startx с консоли) любые изменения в PATH не будут загружены и i3 не будет знать о ~/bin добавляется в PATH,

Если вы хотите изменить PATH за i3 сам тогда ~/.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_profile или похожие файлы при запуске bash,

Замечания: ~/.pam_environment не поддерживает расширение параметров, поэтому добавление чего-то вроде

PATH=${PATH}:${HOME}/bin

не будет работать

Я помню нечто подобное... попробуйте указать абсолютный путь, как это, может быть, что exec не соблюдает $PATH переменная окружения:

# lock screen
bindsym $mod+l exec "${HOME}/bin/lock"
Другие вопросы по тегам