Siánn-mih?Linux系統竟然有開關機音效(startup sound)?
視乎不同Linux發行版,可能會有不同的開機音效。
例如Ubuntu,在10年前的Unity桌面時代有開機音效,後來的版本就不見了。
現在,你只會在初次安裝Ubuntu的時候聽到登~登~的開機音效,真正裝好系統之後開機是沒有聲音的。
沒關係,你還是可以把他們加回來。
這篇文章Ivon將解說如何開啟Linux桌面的開機以及關機音效。
1. 啟用桌面環境內建的開機音效#
Linux的開機音效是由桌面環境負責播放的,像是KDE Plasma和GNOME。嚴格來說,這些「開機」音效是在登入桌面後才播放,而不是載入登入界面(Display Manager)前就播放,所以稱為「登入音效」比較正確。
KDE Plasma#
KDE Plasma的音效檔案位於/usr/share/sounds/
。KDE Plasma的音效主要來自於KDE主題包,例如KDE Plasma 5有「Oxygen」音效包,KDE Plasma 6則是「Ocean」音效包。
KDE Plasma 6以上版本,開啟系統設定 → 通知 → 系統通知
點選「登入」和「登出」,啟用播放音效。這裡的音效可以自訂要播放的檔案。
GNOME#
相較KDE Plasma,GNOME的開關機音效很難設定。
GNOME桌面的音效位於/usr/share/sounds/gnome/
。目前GNOME 48內建的Adwaita主題只有警告音效,需要依賴其他主題提供開機音效。比如freedesktop-theme
主題,或者Ubuntu的yaru-theme
主題(其他發行版多半也有這個套件)。
GNOME可以透過Libcanberra抽象層來播放開關機音效,它遵守XDG Sound Theme的音效規範,所以不一定要寫死音效檔路徑。
- Fedora的GNOME桌面應該已安裝
libcanberra
套件,所以會一併提供libcanberra的Systemd服務。編輯登入音效服務:
sudo vim /usr/lib/systemd/system/canberra-system-bootup.service
如果該檔案不存在,就參考Github範本自行新增。
- 確認
ConditionPathExists=
後面的登入音效路徑是否正確
ConditionPathExists=/usr/share/sounds/freedesktop/stereo/service-login.oga
同理,編輯
/usr/lib/systemd/system/canberra-system-bootup.service
,確認登出音效路徑是否正確。啟用登入與登出音效服務。
sudo systemctl daemon-reload
sudo systemctl enable canberra-system-bootup.service
sudo systemctl enable canberra-system-shutdown.service
另一種設定登入音效的方法是使用/usr/bin/canberra-gtk-play
,似乎只對Ubuntu的GNOME有效。
在Ubuntu應用程式列表找到「初始啟動程式」
新增自動啟動程式,新增登入音效,指令為
/usr/bin/canberra-gtk-play --id="desktop-login" --description="GNOME Login"
2. 使用Systemd服務播放登入音效#
這是更通用的方法。
桌面環境沒提供設定界面的話,就只能搭配播放軟體,在使用者登入桌面的時候播放開機音效了。Linux發行版多半有提供paplay
或canberra-gtk-play
程式,它不需要圖形界面也能播放/usr/share/sounds/
的音效。善用這個程式,你還可以寫一個指令稿,隨機播放登入音效。
- 此處使用Systemd user unit播放開機音效。新增使用者Systemd服務,啟用開機登入音效(我暫時找不到新增登出音效的作法)
vim ~/.config/systemd/user/login-sound.service
- 填入以下內容,將服務的啟動條件設定為等待sound.target,也就是PipeWire之類的音效伺服器載入才播放。ExecStart=後面是播放Yaru的desktop-login音效
[Unit]
Name=Play Login Sound
After=sound.target
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/usr/bin/paplay /usr/share/sounds/Yaru/stereo/desktop-login.oga
[Install]
WantedBy=default.target
- 啟用服務,接著重開機。它是一按下登入鍵就播放音效,而不是等桌面動畫載入完成才播放,並且只會播放一次。
systemctl --user daemon-reload
systemctl --user enable login-sound.service