Câu hỏi Khởi động Rhythmbox qua crontab


Tôi đang cảm thấy mệt mỏi với vấn đề này ngay bây giờ, bởi vì mọi phiên bản của Ubuntu cần phải được xử lý theo cách khác, nhưng trong 14.04 tôi không biết phải làm gì nữa.

Vấn đề của tôi: PC của tôi bắt đầu tự động mỗi ngày để hoạt động như cảnh báo của tôi, bởi vì crontab bắt đầu một kịch bản chọn nhạc để phát, khởi động Rhythmbox, thêm tệp hoặc danh sách đã chọn để phát hàng đợi và phát.

Vấn đề bây giờ là, các kịch bản hoạt động hoàn hảo khi tôi chạy nó từ một thiết bị đầu cuối, nhưng bắt đầu bởi crontab Rhythmbox chủ yếu là không bắt đầu.

Crontab của tôi:

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

Các /script/copy_loop.sh script là một kịch bản khác chạy hoàn hảo (nhưng nó không phải bắt đầu một chương trình nào cả ...)

cảnh báo-script:     #! / 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 "**************************"

Về cơ bản kịch bản bật màn hình (hoạt động hoàn hảo) điều chỉnh âm lượng (hoạt động hoàn hảo) chọn một bài hát và thêm nó vào Danh sách chặn (hoạt động hoàn hảo) và bắt đầu nhịp điệu (meh ... nếu nó làm việc thêm vào playqueue và mọi thứ cũng sẽ hoạt động ...)

Trong phân phối cũ (12.10 cho đến 13.10) Rhythmbox đã bắt đầu (thêm DISPLAY=:0.0 sudo -u julian hoặc bắt đầu qua rhythmbox-client --no-present) nhưng bây giờ tất cả những điều này không hoạt động nữa.

Tệp nhật ký được tạo khi bắt đầu tập lệnh từ thiết bị đầu cuối:

***********************************
* 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) *
**************************

Rhythmbox bắt đầu và phát

bắt đầu bởi 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) *
**************************

Tôi thấy thông báo lỗi ở đây, nhưng tôi không biết cách loại bỏ nó.

Bất kỳ trợ giúp sẽ được đánh giá cao.

Chỉnh sửa: Để đi sâu hơn một bước: Có hai câu hỏi thú vị dành cho tôi:

  1. Tại sao mọi phiên bản hoạt động khác với crontab của nó?
  2. Xin lỗi câu hỏi này, nhưng lý do gì không được xử lý như một lệnh đã gõ của người dùng? Rõ ràng là người ta phải thêm câu lệnh DISPLAY =: 0.0, nhưng hoàn toàn KHÔNG rõ ràng để thêm tệp xauthority, hơn nữa, nó không hoạt động bất kỳ.

Nếu nhịp điệu bắt đầu, thì có hai khả năng:  1. Nó chạy trong một trường hợp riêng, vì vậy rhythmbox-client không nhìn thấy nó.  2. Nó chạy trong một trường hợp đóng gói của lightdm / unity, do đó, các phím nóng trên bàn phím không hoạt động và, nếu đóng, âm nhạc phát trên, nhưng người ta phải giết nó với killall rhythmbox bởi vì, bắt đầu Rhythmbox thông qua sự thống nhất theo bất kỳ cách nào (truy cập nhanh vào bảng điều khiển âm thanh), tạo ra một thể hiện thứ hai.

Tôi chỉ đoán bây giờ, nhưng tôi nghĩ rằng, hai điểm cuối cùng xảy ra bởi vì crontab đang làm công việc của mình không thực sự trong tên của người sử dụng nó được thiết lập.

Bất kỳ trợ giúp sẽ được rất đánh giá cao.

Chỉnh sửa 2014-06-16: Để hiển thị thêm thông tin: Có vẻ như, thậm chí không thể bắt đầu bất kỳ giao diện đồ họa nào trong 14.04:

11 8 * * * gnome-terminal
11 8 * * * DISPLAY=:0.0 gnome-terminal

Không có điều nào ở trên đang hoạt động. Tôi khá chắc chắn trong 13.04 và 13.10 điều này làm việc ... Vì vậy, vẫn còn điều tra ...


2
2018-05-28 06:01


gốc




Các câu trả lời:


rhythmbox-client yêu cầu dbus giao tiếp với rhythmbox. Bạn cần đặt biến môi trường DBUS_SESSION_BUS_ADDRESS cho rhythmbox-client. Giá trị có thể thu được từ môi trường với một tập lệnh như thế này.

touch $HOME/Xdbus
chmod 600 $HOME/Xdbus
env | grep DBUS_SESSION_BUS_ADDRESS > $HOME/Xdbus
echo 'export DBUS_SESSION_BUS_ADDRESS' >> $HOME/Xdbus

Chạy kịch bản này sau khi bạn đăng nhập. Sau đó, trong kịch bản alert.sh bạn có thể nguồn $ HOME / Xdbus trước khi bạn chạy rhythmbox-client.


2
2017-08-03 16:38





Thử xuất các biến trước khi chạy tập lệnh:

50 6 * *  export XAUTHORITY && export DISPLAY=:0 && /scripts/alert.sh #mo
...

nhớ để kiểm tra DISPLAY được kết nối với người dùng bằng cách nhập:

w

0
2018-06-16 06:55



Bây giờ rhythmbox bắt đầu, nhưng rhythmbox-client "không nhìn thấy" nó. Nó một lần nữa chạy trong một ví dụ "của riêng", nhưng cảm ơn ý tưởng - wolfjuli


Bây giờ tôi đã chọn một cách hoàn toàn khác để giải quyết vấn đề này:

Kịch bản bây giờ chờ đợi với một tập tin nămo cho đến khi một lệnh từ phương pháp tiếp cận crontab và sau đó bắt đầu làm việc. Do đó tôi có thể bắt đầu kịch bản khi khởi động và làm cho nó hoạt động khi crontab nói làm như vậy. Bây giờ trình quản lý hiển thị bắt đầu tập lệnh và không phải là crontab, bây giờ trông giống như sau:

#start alert
50 8 * * 1 echo "start;`whoami`;'`date`'" > /scripts/alert/com_fifo #mo
30 7 * * 2 echo "start;`whoami`;'`date`'" > /scripts/alert/com_fifo #di
...

Tôi xin lỗi nhưng việc đăng các tập lệnh là khó có thể, bởi vì nó đã được chia thành nhiều tập tin để có thể sử dụng lại một số chức năng. Về cơ bản nó trông như thế này:

hellNotFrozen=true
com="/scripts/alert/com_fifo"

#clear fifo file
rm $com >/dev/null 2>&1 
mkfifo $com

while [[ $hellNotFrozen ]]; do

    #read fifo-file - this statement is blocking!
    inp=`cat $com` #$inp now holds the text pasted into the com-file

    #...do other stuff here        
    rhythmbox-client --enqueue "/data/Music/$chosenFolder/*"
    rhythmbox-client --play

done

Cảm ơn tất cả các câu trả lời của bạn.


0
2017-09-11 16:56