[RaspberryPi]解決Raspberry Pi接上喇叭後莫名其妙發出聲音問題

繼上上上個月遇到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  #此為上述指令,並非該程式

搞定!再見了嚇死人的提示音!

小收穫:在找資料的過程中意外查到了設備啟動時的流程和啟動模式等級,雖然了解得不深入,但多少有些概念٩( ᐛ )و

發表留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *