Você provavelmente precisará especificar o caminho completo para o programa pacmd, provavelmente /usr/local/bin/pacmd
Estou usando o seguinte para verificar se algum programa está sendo gravado em pias pulseaudio:
pacmd list-sink-inputs
Isso funciona bem direto de um terminal. Isso me dá essa saída:
1 sink input(s) available.
index: 4
driver: <protocol-native.c>
flags: START_CORKED
state: RUNNING
sink: 0 <alsa_output.pci-0000_00_1b.0.analog-stereo>
volume: front-left: 24144 / 37% / -26.02 dB, front-right: 24144 / 37% / -26.02 dB
balance 0.00
muted: no
current latency: 59.33 ms
requested latency: 25.00 ms
sample spec: float32le 2ch 48000Hz
channel map: front-left,front-right
Stereo
resample method: copy
module: 7
client: 3 <Firefox>
properties:
media.name = "AudioStream"
application.name = "Firefox"
native-protocol.peer = "UNIX socket client"
native-protocol.version = "30"
application.process.id = "1241"
application.process.user = "balajeerc"
application.process.host = "smallguy"
application.process.binary = "firefox"
application.language = "en_IN"
window.x11.display = ":0"
application.process.machine_id = "82f34b545d7441ad9439148d54b19c2e"
application.process.session_id = "c2"
application.icon_name = "firefox"
module-stream-restore.id = "sink-input-by-application-name:Firefox"
No entanto, quando eu executo isso como parte de um cron job, ele não me dá nada (string vazia) mesmo quando o áudio está sendo reproduzido.
Por que isso seria o caso?
EDITAR: Em resposta a alguns dos comentários abaixo, tentei mais algumas coisas. Agora estou executando com caminho completo e erro de log usando:
/usr/bin/pacmd list-sink-inputs >> $LOG_FILE 2>&1
Isso mostra o seguinte registro, que é essencialmente o que é impresso para o stderr, pois o stdout, como mencionei antes, está vazio:
No PulseAudio daemon running, or not running as session daemon.
A entrada do meu crontab é a seguinte:
*/2 * * * * /home/balajeerc/.i3/utils/idle_check_suspend.sh
Esta é uma entrada de usuário crontab, não raiz.
onde idle_check_suspend.sh
é o script onde minha chamada de pacmd é.
Informação do sistema:
Kernel version: 4.8.0-49-generic
Ubuntu 16.04
pacmd 8.0
Compiled with libpulse 8.0.0
Linked with libpulse 8.0.0
Você provavelmente precisará especificar o caminho completo para o programa pacmd, provavelmente /usr/local/bin/pacmd
Por questões de segurança e conveniência, a maioria das distribuições usa o armazenamento integrado do usuário em / run / user / para seus controles de daemon. No cron, ele não possui as variáveis de ambiente relevantes configuradas, por isso não sabe qual caminho usar. Você precisará defini-lo da seguinte maneira no seu script:
export PULSE_RUNTIME_PATH="/run/user/$(id -u)/pulse/"
Se não for um caminho padrão, você também pode fazer eco da variável $ PULSE_RUNTIME_PATH para descobrir para onde está apontando atualmente.