xbindkeys escape quotes

4

Como posso escapar de citações em comandos .xbindkeysrc? Nenhum desses trabalhos.

"pacmd dump|awk --non-decimal-data '$1~/set-sink-volume/{system ("pacmd "$1" "$2" "$3+2500)}'"

"pacmd dump|awk --non-decimal-data '\~/set-sink-volume/{system ("pacmd "\" "\" "\+2500)}'"

"pacmd dump|awk --non-decimal-data '\~/set-sink-volume/{system (\"pacmd \"\\" \"\\" \"\+2500)}'"

"pacmd dump|awk --non-decimal-data '$1~/set-sink-volume/{system (\"pacmd \"$1\" \"$2\" \"$3+2500)}'"

(Os comandos aumentam o nível de volume do PulseAudio)

    
por Danilo Bargen 14.03.2012 / 16:00

2 respostas

4

Há dois problemas separados aqui e tentarei abordar ambos.

O primeiro é como citar corretamente um comando em .xbindkeysrc .

Tudo o que você precisa fazer é usar um comando que funcione em bash e, em seguida, colocar aspas duplas em torno dele.

Por exemplo, para um comando com espaço, você teria que executar

"/home/user/My Programs/progname"

ou

/home/user/My\ Programs/progname

em bash .

O que significa que você precisa

""/home/user/My Programs/progname""

ou

"/home/user/My\ Programs/progname"

no seu .xbindkeysrc .

Tecnicamente, o que está acontecendo é que xbindkeys remove o par mais externo de aspas duplas e, em seguida, executa a sequência restante usando sh -c .

No seu exemplo, o comando

pacmd dump|awk --non-decimal-data '$1~/set-sink-volume/{system ("pacmd "$1" "$2" "$3+2500)}'

funciona bem no bash, então acho que o problema está em outro lugar.

Tente executar xbindkeys com a opção -v , o que faz com que xbindkeys seja executado em primeiro plano, para que você possa ver erros no seu terminal.

No meu caso, isso mostra que a causa subjacente não é ruim, mas pacmd está dando um erro

...
No PulseAudio daemon running, or not running as session daemon.

mas se você tem o PulseAudio funcionando, eu acho que você precisa mudar pacmd para pactl , porque a página man diz que pacmd não aceita argumentos, e vários outros exemplos na web mostram usando pactl para este fim.

    
por 31.10.2012 / 20:27
4

Como solução alternativa, crie um script de shell ~ / bin / mychangevolume com os comandos não-escapados como eles apareceriam na linha de comando. Algo como

#!/bin/bash
incr=$1
pacmd dump | awk --non-decimal-data '$1~/set-sink-volume/{system ("pacmd "$1" "$2" "$3'$incr')}'"

Em seguida, chame esse script em .xbindkeysrc

"mychangevolume +2500"
    
por 15.06.2012 / 16:33