4

Как я могу избежать кавычек в командах .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 ответа2

4

Здесь есть два отдельных вопроса, и я постараюсь решить оба.

Первый - как правильно указать команду в .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 для этой цели.

4

В качестве обходного пути создайте сценарий оболочки ~/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"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .