Скрипт 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"