天天看點

arch linux休眠後沒有聲音解決思路

真TM的讨厭解決問題。

留一個思路給下個問題,解決問題的權重是推薦度和時間順序

解決思路

1.檢視arch wiki

原因無2.

搜尋

sound

sound arch wiki

内容很少,就看英文吧。

Drivers and interface – hardware support and control
Usermode API (libraries) – utilized and required by applications
(optional) Usermode sound servers – best for the complex desktop, needed for multiple simultaneous audio apps, and vital for more advanced capabilities e.g. pro audio
(optional) Sound frameworks – higher-level application environments not involving server processes```
這幾個東西我大概了解。下面就是确定這幾個東西哪個出毛病了。
           

A default Arch installation already includes the kernel sound system

這個肯定不适合我,因為我剛剛裝的時候沒有聲音。

是以,linux核心沒有我的聲霸卡的驅動。

我是安裝了alsamixer才有聲音。這個是一個應用軟體,是以可能被

systemd

控制着。休眠後它會沒聲音,是以

極有可能是和systemd的設定有關

。這裡我先保留一絲質疑。畢竟沒有卻确鑿證據。

對比蛛絲馬迹,确定大緻方向

我安裝了ALSA,和它的設定有關系。

wiki上說它提供低級的支援對聲霸卡。

---oss

,更古老,更好用,不過被alsa在2002年超過。

後來更新了,後來好像是從close到opensource在2007年。

并且加上了一個開源許可,GPL。oss沒有alsa支援的硬體裝置那麼廣泛,但在某些方面做的比alsa好。

總結:Unix like的系統的驅動層對聲音有2種解決方案。一種是支援硬體更廣的alsa,一種是後來趕超但支援裝置不完善的oss。

那麼就是這裡出現了問題。并且是alsa出現了問題。

我需要詳細的閱讀alsa的文檔。

這個時候換個思路。到github上找issure。

到github上找issure

好吧。搜尋alsamixer沒找到想要的。

搜alsa.雖然肯定沒找到。因為這個玩意是核心驅動嘛。

但也知道很多人基于它開發一些控制聲音的程式。那麼也進一步驗證了這個東西是個驅動。

詳細閱讀ALSA文檔

ALSA arch wiki

The Advanced Linux Sound Architecture (ALSA) provides kernel driven sound card drivers. It replaces the original Open Sound System (OSS).
           

剛上來就開始怼oss。呵呵。

Besides the sound device drivers, ALSA also bundles a user space driven library for application developers. 
           

捆綁有庫檔案,這和之前在github上看到的項目不謀而合。回想一下,github上面寫的那些玩意兒極有可能被收藏進python庫裡面。我去驗證一下。

驗證了。原來開源就是這麼個玩意兒~~~啧啧。

總結,ALSA挑戰了OSS在unix linux系統上對聲音控制的權威地位。主要就是開發了一些庫,提供給開發者,讓他們能夠去利用他們的函數,屏蔽底層聲霸卡細節,開發出自己的軟體。

好吧,ALSA是聲霸卡驅動領域的老大哥。。。

我的電腦隻是休眠後沒聲音,剛開機是用聲音的。并且休眠後連接配接耳機照樣有聲音。沒有走聲霸卡那條線。emmm,這确實不是ALSA的鍋。我現在需要看看建立在ALSA之上實際控制我聲音的軟體是誰。

我懷疑是alsamixer

确定ALSA之上的應用層軟體

ALSA Utilities

Install the alsa-utils package. This contains (among other utilities) the alsamixer and amixer utilities. amixer is a shell command to change audio settings, while alsamixer provides a more intuitive ncurses based interface for audio device configuration.

If you need high quality resampling install the alsa-plugins package to enable upmixing/downmixing and other advanced features.

那麼就是這個alsamixer了。

還有一個指令行版本的amixer。先不管它。

思考一下。

先看一下alsamixer的介紹。

alsamixer是一個ALSA的工具。支援多聲霸卡多裝置。

麥克應該也屬于聲霸卡一類。它屬于聲音的輸入裝置。

這裡的輸入輸出應該是針對CPU的。

有一個簡單的方法來驗證是不是和alsamixer有關系。我先把這倆東西給删了。

一個是alsamixer,一個是amixer.

這兩個都删除以後對聲音并沒有影響。

開機後預設靜音。然後通過另外一個軟體可以解除靜音。

然後休眠後還是沒聲音。這個時候就去

systemd

的官網上面瞧瞧别人的bug。

好吧,事情的真兇已經快浮出水面。要麼是systemd,要麼,emmm,我真想不出來其他了。

直接在這位仁兄的倉庫裡搜alsa。

好吧,有兩頁,有點多。我看看archwiki有沒有更多的介紹。

ALSA和系統化

在ALSA-utils的軟體包提供了systemd單元的配置檔案alsa-restore.service和alsa-state.service預設。

systemctl status alsa-restore.service
systemctl status alsa-state.service
           

這些将在安裝過程中自動安裝和激活(通過提供的軟體包連結到sound.target)。兩者都不預設運作,因為它們依靠使用者的一些有意識的決定來知道應該采用哪種方法。選項如下:

alsa-restore.service/var/lib/alsa/asound.state在啟動時讀取并在關閉時寫入更新的值,前提是已認證alsactl store在某個時間點運作來提供更新值

alsa-state.service(重新)在守護程式模式下啟動actact,以在使用者有意識地alsactl daemon至少啟動一次之後再次連續跟蹤并保持音量變化

兩種方法互斥,您可以根據需要選擇兩種方法之一,有關更多資訊,請參見alsactl(1)

您可以使用檢查狀态systemctl。

這個restore很重要,而且我需要systemctl啟動它。

$ amixer sset Master unmute
$ amixer sset Speaker unmute
$ amixer sset Headphone unmute
           

哦,

systemctl status alsa-restore.service
systemctl status alsa-state.service
           

這倆是用來管理alsa驅動的。

看你選用哪種。如果輸入上面的三條指令,那麼預設啟動的是alsa-restore.service,這倆服務隻要有一個啟動,另外哪個就不啟動了。

emmm.再來休眠測試一下。

好吧,果然沒有聲音了。

再關機又啟動又有聲音了。

然後alsa-restore的這個服務隻是啟動了一下就finish了。

然後它在我休眠之後沒有重新整理。。。

我嘗試用

systemctl restart alsa-restore.service

來啟動。

服務也重新運作并且退出了,但是沒有用。

我嘗試重新運作這三個指令:

$ amixer sset Master unmute
$ amixer sset Speaker unmute
$ amixer sset Headphone unmute
           

然後再運作:

systemctl restart alsa-restore.service

.

然後還是不行。

是以,得出結論,想用這個

alsa-state.service

網上有人說:我先重新開機試試。
```
pacman -S pulseaudio pulseaudio-alsa pavucontrol paprefs lib32-pulseaudio
```
```
journalctl --user --no-pager -b -u pulseaudio
//列印一段時間的啟動資訊
```
/etc/asound.state
````

[systemd 詳細講](https://www.cnblogs.com/alongdidi/p/systemd_systemctl.html)

一切可能都是這個玩意兒的鍋。