xbindkeys экранировать кавычки
Как я могу избежать кавычек в командах.xbindkeysrc? Ни одна из этих работ.
"pacmd dump|awk --non-decimal-data '$1~/set-sink-volume/{system ("pacmd "$1" "$2" "$3+2500)}'"
"pacmd dump|awk --non-decimal-data '\$1~/set-sink-volume/{system ("pacmd "\$1" "\$2" "\$3+2500)}'"
"pacmd dump|awk --non-decimal-data '\$1~/set-sink-volume/{system (\"pacmd \"\$1\" \"\$2\" \"\$3+2500)}'"
"pacmd dump|awk --non-decimal-data '$1~/set-sink-volume/{system (\"pacmd \"$1\" \"$2\" \"$3+2500)}'"
(Команды повышают уровень громкости PulseAudio)
2 ответа
Здесь есть два отдельных вопроса, и я постараюсь решить оба.
Во-первых, как правильно указать команду в .xbindkeysrc
,
Все, что вам нужно сделать, это принять команду, которая работает в bash
, затем поместите двойные кавычки вокруг этого.
Например, для команды с пробелом в ней вам нужно выполнить
"/home/user/My Programs/progname"
или же
/home/user/My\ Programs/progname
в bash
,
Что означает, что вам нужно
""/home/user/My Programs/progname""
или же
"/home/user/My\ Programs/progname"
в вашем .xbindkeysrc
,
Технически происходит то, что xbindkeys удаляет внешнюю пару двойных кавычек, а затем запускает оставшуюся строку, используя sh -c
,
В вашем примере команда
pacmd dump|awk --non-decimal-data '$1~/set-sink-volume/{system ("pacmd "$1" "$2" "$3+2500)}'
отлично работает в Bash, так что я думаю, что проблема в другом месте.
Попробуйте запустить xbindkeys
с -v
вариант, который делает xbindkeys
запустить на переднем плане, так что вы можете увидеть любые ошибки на вашем терминале.
В моем случае это показывает, что причина не плохая, но pacmd
дает ошибку
...
No PulseAudio daemon running, or not running as session daemon.
но если у вас работает PulseAudio, я думаю, вам нужно изменить pacmd
в pactl
потому что на странице руководства написано, что pacmd
не принимает аргументы, и несколько других примеров в Интернете показывают, используя pactl
для этого.
В качестве обходного пути создайте сценарий оболочки ~/bin/mychangevolume с не экранированными командами, как они будут отображаться в командной строке. Что-то вроде
#!/bin/bash
incr=$1
pacmd dump | awk --non-decimal-data '$1~/set-sink-volume/{system ("pacmd "$1" "$2" "$3'$incr')}'"
Затем вызовите этот скрипт из.xbindkeysrc
"mychangevolume +2500"