Estou ficando cansado desse problema agora, porque todas as versões do Ubuntu precisam ser tratadas de outra maneira, mas no 14.04 eu não sei mais o que fazer.
Meu problema:
Meu PC está começando automaticamente todos os dias para atuar como meu alerta, porque um crontab inicia um script escolhendo uma música para tocar, inicia o Rhythmbox, adiciona o arquivo ou a lista escolhida para reproduzir fila e reproduzir.
O problema agora é que os scripts funcionam perfeitamente quando eu estou rodando a partir de um terminal, mas iniciado pelo crontab O Rhythmbox não está começando em grande parte.
Meu crontab:
MAILTO=""
XAUTHORITY=~/.Xauthority
DISPLAY=:0.0
# m h dom mon dow command
*/10 * * * * /scripts/copy_loop.sh &
#start alert
50 6 * * 1 /scripts/alert.sh #mo
50 6 * * 2 /scripts/alert.sh #di
50 6 * * 3 /scripts/alert.sh #mi
50 6 * * 4 /scripts/alert.sh #do
50 6 * * 5 /scripts/alert.sh #fr
30 7 * * 6-7 /scripts/alert.sh #sa/so
O script /script/copy_loop.sh
é outro script que funciona perfeitamente (mas não precisa iniciar nenhum programa ...)
script de alerta:
#! / bin / bash
logfile="/scripts/log/alert.log"
exec >> $logfile 2>&1
echo "***********************************"
echo "* Start ("'date +'%d.%m.%Y %H:%M''") as 'whoami' *"
echo "***********************************"
#To avoid heart-attacks ;)
amixer set Master 14
echo "Turning monitors on and waiting 5 seconds."
#Force Monitor to turn on (grafik bug!)
xset dpms force on
sleep 5
#how many days should a song be blocked?
days=25
#Create array of music
music=( "Dubstep von Hannes/1-45 The Sound of Dubstep 4 - Mix 1.mp3"
"Purity Ring's Shrines.MP3"
"XXYYXX - XXYYXX (Full Album).MP3"
"Bonobo/Days to Come Disc 1/"
"LIQUID STRANGER - BABYLON OUTCAST (DJ MIX).MP3"
"Wisdom - Beautiful Chillstep.mp3"
"Sizzlebird - Artist Mix.mp3"
"Yann Tiersen - Amelie Soundtrack.mp3"
"chillstep mix 2013 vol.3.mp3"
"Burning Snowflakes Mix.mp3"
"Parov Stelar - Daylight/"
"Parov Stelar - Coco/Disc 1/"
"Parov Stelar - Coco/Disc 2/"
"Seeed/"
"Salvation 2 Hour Best of Chillstep Mix.mp3"
"Lonely Nights Wonderful Chillstep Mix.mp3"
"Caribou - Swim (Full Album).mp3"
"Gorillaz Plastic Beach 2010/"
"Griechenland/Pendulum - Hold Your Colour/"
"Griechenland/Pendulum In Silico/"
"Pendulum - Immersion/"
"Aphex Twin - Selected Ambient Works 85-92.MP3"
"RJD2 - Deadringer (Full Album).MP3"
"SOLAR FIELDS - RANDOM FRIDAY (ALBUM) HQ.MP3"
"Deep Cuts/"
"Silent Shout/"
"Gorillaz/"
"Kosheen/(2002) resist/"
"Dub_Fx/Everythinks A Ripple/"
"Griechenland/B-Complex/"
)
for (( i=0; i < 1; i++ )); do
choose=${music[$(($RANDOM % ${#music[@]}))]}
#check if song is blocked
cat /scripts/alertBlock | grep "$choose" > /dev/null
if [[ $? == 0 ]]; then
#song is blocked
echo "$choose is blocked"
i=-1
fi
done
#write to file, so it can't be played the next given days
lines='wc -l < /scripts/alertBlock'
#cut the last entry
tail -n $(($days - 1)) /scripts/alertBlock > /scripts/.temp
cat /scripts/.temp > /scripts/alertBlock
echo "$choose" >> /scripts/alertBlock
echo "$choose chosen and added to Block-List"
echo "waiting for Rhythmbox to start"
rhythmbox-client --no-present &
#ok=false
#while [[ $ok == false ]]; do
# rhythmbox-client --check-running
#
# if [[ $? == 0 ]]; then
# ok=true
# else
# ok=false
# fi
#done
sleep 10
echo $choose | grep '/$'
if [[ $? == 0 ]]; then
cd "/home/julian/Music/$choose"
echo "Clearing queue"
rhythmbox-client --clear-queue 2>&1
# To avoid adding pictures and such crap
rhythmbox-client --enqueue *.mp3
rhythmbox-client --enqueue *.wav
rhythmbox-client --enqueue *.ogg
rhythmbox-client --enqueue *.flac
sleep 2
rhythmbox-client --play
else
rhythmbox-client --no-start --play-uri="/home/julian/Music/$choose" 2>&1
fi
echo "Music player started. Have Fun!"
echo "**************************"
echo "* End ("'date +'%d.%m.%Y %H:%M''") *"
echo "**************************"
Basicamente, o script liga os monitores (funciona perfeitamente) ajusta o volume (funciona perfeitamente) escolhe uma música e a adiciona à Block-List (funciona perfeitamente) e inicia o rhythmbox (meh ... se funcionasse o add to playqueue e as coisas funcionariam também ...)
Em distribuições antigas (12.10 até 13.10), o Rhythmbox estava começando (adicionando DISPLAY=:0.0 sudo -u julian
ou iniciando via rhythmbox-client --no-present
), mas agora todas essas coisas não funcionam mais.
O arquivo de log gerado ao iniciar o script a partir do terminal:
***********************************
* Start (28.05.2014 07:56) as julian *
***********************************
Simple mixer control 'Master',0
Capabilities: pvolume pvolume-joined pswitch pswitch-joined
Playback channels: Mono
Limits: Playback 0 - 31
Mono: Playback 14 [45%] [-25.50dB] [on]
Turning monitors on and waiting 5 seconds.
RJD2 - Deadringer (Full Album).MP3 chosen and added to Block-List
waiting for Rhythmbox to start
Musicplayer startetd. Have Fun!
**************************
* End (28.05.2014 07:56) *
**************************
O Rhythmbox começa e toca
iniciado por crontab:
***********************************
* Start (28.05.2014 06:50) as julian *
***********************************
Simple mixer control 'Master',0
Capabilities: pvolume pvolume-joined pswitch pswitch-joined
Playback channels: Mono
Limits: Playback 0 - 31
Mono: Playback 14 [45%] [-25.50dB] [on]
Turning monitors on and waiting 5 seconds.
Purity Ring's Shrines.MP3 chosen and added to Block-List
waiting for Rhythmbox to start
(rhythmbox-client:5655): GLib-GIO-CRITICAL **: g_dbus_proxy_new_sync: assertion 'G_IS_DBUS_CONNECTION (connection)' failed
Musicplayer startetd. Have Fun!
**************************
* End (28.05.2014 06:50) *
**************************
Eu vejo a mensagem de erro aqui, mas não sei como me livrar dela.
Qualquer ajuda seria apreciada.
Editar:
Para ir um passo mais profundo: Há duas questões interessantes para mim:
- Por que todas as versões se comportam de maneira diferente com seu crontab?
- Desculpe esta pergunta sarcástica, mas qual é a razão pela qual ela não é tratada como um comando digitado pelo usuário? É óbvio que é necessário adicionar a instrução DISPLAY =: 0.0, mas não é óbvio adicionar o arquivo xauthority, além disso, não funciona de forma alguma.
Se o rhythmbox começar, então existem duas possibilidades:
1. Ele é executado em uma instância própria, então rhythmbox-client
não o vê.
2. Ele é executado em uma instância encapsulada de lightdm / unity, portanto as teclas de atalho no teclado não estão funcionando e, se fechadas, a música é reproduzida, mas é necessário matá-lo com killall rhythmbox
, iniciando o Rhythmbox via unidade em qualquer maneira (acesso rápido no painel de áudio também), cria uma segunda instância.
Eu estou apenas supondo agora, mas eu acho que os dois últimos pontos acontecem porque o crontab está fazendo o seu trabalho não exatamente no nome do usuário que está configurado.
Qualquer ajuda seria muito apreciada.
Editar 2014-06-16:
Para trazer mais informações: Parece que nem é possível iniciar qualquer interface gráfica em 14.04:
11 8 * * * gnome-terminal
11 8 * * * DISPLAY=:0.0 gnome-terminal
Nenhuma das opções acima está funcionando. Tenho certeza que em 13.04 e 13.10 isso funcionou ... Então ainda investigando ...