繼上上上個月遇到WIFI連不上的問題後,我們的樹莓派又發生了一件詭異的事。因為專題需要,我們買了一個喇叭。
又因為Pi zero沒有3.5mm的音訊輸出而買了一個USB音效卡。
全部插上去之後,放了一首歌,有聲音,是個能用的音效卡跟喇叭呢!才怪,它在播放的過程中突然莫名其妙發出人聲,不播放的時候也是。簡單說就是什麼都沒做它就會出現聲音,差不多十多秒發出一次吧。那個當下真的超毛的(ꐦ°᷄д°᷅)幸好不是在夜深人靜的時候一個人待在自己的房間測試,不然肯定嚇死。
大約呆滯加茫然了幾分鐘後開始找問題了。一開始打算嘗試聽懂它在說什麼,才好上網google啊。不過很遺憾的是我只能聽出它在講英文……(大概吧)
那就只能直接google了,打了幾個關鍵字像「樹莓派 固定出聲」、「樹莓派 自動播放」。結果只找到「教」人如何讓樹莓派自動播放,沒有提到為什麼會自動播放啊༼;´༎ຶ ༎ຶ༽
好吧,google技術不佳。只能自己想辦法解決了。※以下指令皆為root輸入,一般使用者需在前面加上sudo
首先,一定不可能是樹莓派裡面住人在講話吧。所以一定有個什麼程式在背景跑得很開心。於是查看了下正在運行中的程式。
root@raspberrypi:~# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 1 13:42 ? 00:00:10 /sbin/init splash root 2 0 0 13:42 ? 00:00:00 [kthreadd] root 6 2 0 13:42 ? 00:00:00 [mm_percpu_wq] root 7 2 0 13:42 ? 00:00:00 [rcu_tasks_rude_] ... ... root 1347 2 0 13:48 ? 00:00:00 [kworker/0:0-events] root 1571 2 1 13:52 ? 00:00:00 [kworker/u2:0-brcmf_wq/mmc1:0001:1] root 1573 1087 0 13:52 pts/0 00:00:00 ps -ef
……有夠多欸。一個一個看顯然不可能,不過會播放音訊,就一定有那個檔案對吧?既然這樣,那我把這個樹莓派的音訊檔全部挖出來比對不就行了?本身在這台樹莓派上也沒有新增其他音訊檔,理論上找出來的都是它內建的。(Linux好像比較常出現*.wav的音訊格式,似乎跟ALSA這東東有關,不過我也不大了解)
root@raspberrypi:~# find / -name *.wav /usr/share/gui-pkinst/instcomp.wav /usr/share/gui-pkinst/inst.wav /usr/share/gui-pkinst/instfail.wav /usr/share/gui-pkinst/instcompr.wav /usr/share/piwiz/srprompt.wav /usr/share/sounds/alsa/Side_Left.wav /usr/share/sounds/alsa/Rear_Left.wav /usr/share/sounds/alsa/Noise.wav /usr/share/sounds/alsa/Front_Left.wav /usr/share/sounds/alsa/Rear_Center.wav /usr/share/sounds/alsa/Side_Right.wav /usr/share/sounds/alsa/Rear_Right.wav /usr/share/sounds/alsa/Front_Center.wav /usr/share/sounds/alsa/Front_Right.wav find: ‘/run/user/1000/gvfs’: Permission denied
雖然看起來是挺多的,不過跟運行程式的上百條比起來真的是好太多了。接下來要做的就是聽聽看、比對一下,很幸運的是前幾個就試中了!答案是/usr/share/piwiz/srprompt.wav這個音訊在搞鬼啊!有了檔案名稱,就代表距離找到執行它的程式不遠了。經過一番努(估)力(狗)後終於知道那東西是幹甚麼的了!它是一個提醒!至於提醒什麼……我真的找不到(google障礙)只知道跟piwiz這個東西有關,似乎是個軟體。總之,只要把那個正在運行的程式殺掉好了。
root@raspberrypi:~# ps -ef | grep piwiz root 722 1 0 14:34 ? 00:00:00 sudo -AE piwiz root 739 722 0 14:34 ? 00:00:03 piwiz root 3108 1052 0 15:10 pts/0 00:00:00 grep piwiz root@raspberrypi:~# kill 722 ; ps -ef | grep piwiz #因為幾個程式之間有相依性,所以只要刪掉最一開始的程式其他子程式就會跟著消失。然後檢查一下程式是否真的不見了 root 1158 1133 0 15:28 pts/0 00:00:00 grep piwiz #此為上述指令,並非該程式
不過重開機後還是會自動播放這個音檔,每次手動殺掉背景程式顯然不太可能,這畢竟是要拿來做專題的啊。當然可以直接把那個音檔改名,讓程式抓不到就不會播放了。不過還我還是想從根本解決––找到執行這項指令的程式,然後刪掉它。
root@raspberrypi:~# rm /etc/xdg/autostart/piwiz.desktop #piwiz.desktop即為執行指令的程式 root@raspberrypi:~# shutdown -r now #重啟 root@raspberrypi:~# ps -ef | grep piwiz #檢查是否還會自動執行程式 root 1114 992 0 15:36 pts/0 00:00:00 grep piwiz #此為上述指令,並非該程式
搞定!再見了嚇死人的提示音!
小收穫:在找資料的過程中意外查到了設備啟動時的流程和啟動模式等級,雖然了解得不深入,但多少有些概念٩( ᐛ )و