ASUS Chromebook C200 安装 FydeOs for PC 扬声器和耳机没有声音输出

嗯有可能,因为试着装 brunch 的时候好像会专门有内核启动参数的设置。比较在意的一点是在 chromeos 上面没有 chtmax98090,输出的是 byt-max98090。切换到 fydeos 显示的全是 chtmax98090。不懂音频,不知道有没有什么影响

我看brunch的sebanc说的也是要correctly recognized as chtmax98090

一般chromebook声卡在ubuntu上很好解决,很多都是直接能驱动,这种ubuntu上疑难杂症的不一定好搞,不行你就装brunch,反正那人在brunch上搞定了

谢谢你的帮助!brunch 的磁盘要求刚好达到16G,稍微有点勉强。fydeos 用起来很流畅,让老机子也能使用安卓应用,现在在使用用 superdisplay 做第二屏幕使用,已经吃灰的机子还能发挥余热已经很满足了

客气,我正好练习英文阅读 :face_with_peeking_eye:

直接把 ucm 文件复制过去不管用可能是因为 alsa 版本的问题。在网上搜索的时候看到

GalliumOS is based on Ubuntu 18.04, therefore it is still using the use case manager (UCM) and not the newer ucm2 you have on Manjaro.

想起来第一次执行 alsaucm -c chtmax98090 set _verb HiFi set _enadev Headphone 报错中出现过 ucm2。

ALSA lib /build/amd64-generic/tmp/portage/media-libs/alsa-lib-1.2.1.2-r2/work/alsa-lib-1.2.1.2/src/ucm/utils.c:261:(uc_mgr_config_load) could not open configuration file /usr/share/alsa/ucm2/chtmax98090/chtmax98090.conf
ALSA lib /build/amd64-generic/tmp/portage/media-libs/alsa-lib-1.2.1.2-r2/work/alsa-lib-1.2.1.2/src/ucm/parser.c:1605:(load_master_config) error: could not parse configuration for card chtmax98090
ALSA lib /build/amd64-generic/tmp/portage/media-libs/alsa-lib-1.2.1.2-r2/work/alsa-lib-1.2.1.2/src/ucm/main.c:963:(snd_use_case_mgr_open) error: failed to import chtmax98090 use case configuration -2
alsaucm: error failed to open sound card chtmax98090: No such file or directory

当时 chromeos 和 fydeos 中都没有 chtmax98090 这个文件夹。从 https://github.com/GalliumOS/galliumos-baytrail 处下载复制到手动创建的 ucm2 文件夹下,出现了新的错误。

ALSA lib /build/amd64-generic/tmp/portage/media-libs/alsa-lib-1.2.1.2-r2/work/alsa-lib-1.2.1.2/src/ucm/parser.c:1212:(parse_verb_file) error: HiFi.conf failed to parse verb
ALSA lib /build/amd64-generic/tmp/portage/media-libs/alsa-lib-1.2.1.2-r2/work/alsa-lib-1.2.1.2/src/ucm/main.c:963:(snd_use_case_mgr_open) error: failed to import chtmax98090 use case configuration -17
alsaucm: error failed to open sound card chtmax98090: File exists

认为也许是 byt-max98090 和 chtmax98090 不同,就没再继续下去。
看到可能跟版本有关,从 https://github.com/alsa-project/alsa-ucm-conf 处找对应 alsa-lib-1.2.1.2 对应的文件,发现直到 1.2.3 才出现有 chtmax98090。将 1.2.3 的文件复制过去按照报错执行到最后也仍旧是没有声音。
https://alsa-project.org/wiki/Changes_v1.2.2_v1.2.3 这里看到

Changelog between 1.2.2 and 1.2.3 releases

chtmax98090: add generic chtmax98090.conf and move Quawks init to the generic HiFi.conf
ucm2: chtmax98090: add generic HiFi.conf and SOF support
ucm2: enable possible SOF support in profile for Chromebook Asus C300
ucm2: Add profile for Chromebook Asus C300

不知道 1.2.3 之前的版本需要怎么做。
下载 chromebrew, 安装了 alsa_lib 和 alsa_utils,alsa_lib 的版本是 1.1.4
crew 下载文件的位置在 /usr/local/,把在 https://github.com/alsa-project/alsa-ucm-conf/releases/tag/v1.2.4 下载 1.2.4 的 ucm 文件, 粘贴到对应位置

/usr/local/share/alsa/ucm2
|-- chtmax98090
|   |-- HiFi.conf
|   `-- chtmax98090.conf
|-- codecs
|   `-- max98090
|       |-- EnableSeq.conf
|       |-- Headphones.conf
|       |-- HeadsetMic.conf
|       |-- InternalMic.conf
|       `-- Speaker.conf
`-- platforms
    `-- bytcr
        |-- PlatformDisableSeq.conf
        `-- PlatformEnableSeq.conf
5 directories, 9 files

依序执行

alsaucm -c chtmax98090 set _verb HiFI set _enadev Headphones
alsaucm -c chtmax98090 set _verb HiFI set _enadev Speaker
sudo mkdir /var/lib/alsa/
/usr/sbin/alsactl store

之后就有声音了。重启之后声音会又消失,需要手动再运行一遍 /usr/sbin/alsactl restore
另外会出现插上耳机之后耳机和扬声器会同时发出声音。找到可能能通过在 alsamixer 设置 auto mute 或是 amixer -c 0 sset 'Auto-Mute Mode' Enabled 来解决
但是这里 alsamixer 找不到 auto mute。执行 amixer 命令会出现 amixer: Unable to find simple control ‘Auto-Mute Mode’,0 错误
暂时是在需要使用耳机的时候,从 alsamixer 中选择对应声卡将扬声器声音关闭。

1 个赞

这么多资料,看着我也心动,想看ES8316能不能也按照这样解决。
我的声卡在dmesg里也会出现Audio Port: ASoC: no backend DAIs enabled for Audio Port

不过查阅资料时,从 https://www.linuxcompatible.org/story/linux-kernel-515rc7-released/
看到似乎要5.15内核才能解决,只能从openfyde里尝试了。
Fedora 35的5.14内核还是没有声音,不过UCM2里也没有对应的conf文件,
而ubuntu 22是5.15就有声音,设备名在fydeos里是bytcht-es8316,在ubuntu里面是sof-bytcht-es8316 。

尝试安装了chromebrew,也下载了1.2.4的UCM,
alsaucm -c bytcht-es8316 set _verb HiFi set _enadev Speaker
也没报错。HeadPhones和MonoSpeaker都报错。

块引用 从 chromeos 中使用 /usr/sbin/alsactl store -f /var/lib/alsa/asound.state 备份 asound.state 文件
然后在 fydeos 中恢复 /usr/sbin/alsactl init sudo /usr/sbin/alsactl store --file /var/lib/alsa/asound.state 没有什么效果

不知道你的成功和这个操作有没有直接关系,目前我还没从Ubuntu里提取这个。

2月12日追加更新:
发现ubuntu 21用的是5.11内核能正常驱动ES8316,
用aplay -l 显示也是bytcht-es8316,alsactl是1.2.4 。
从ubuntu里备份了UCM2文件夹,用alsactl 保存了asound.state .

在V16了弄出了声音,但接着浏览器不能播放视频了,powerwash也不能解决。

重新烧录了V15到U盘。
执行alsaucm listcards 报错


复制UCM2,播放视频正常,没声音
alsaucm listcards 报错少了一部分,没有出现声卡型号。

复制asound.state,播放视频正常,没声音
重新安装chromebrew,安装1.2.4 的 alsa_lib 和alsa utils ,播放视频正常,没声音。
alsaucm listcards 没有报错,可以出现很多个声卡型号。

alsaucm reset
alsaucm reload 播放视频正常,没声音
用了alsactl init 浏览器视频无法加载。


执行一次 alsaucm -c bytcht-es8316 set _verb HiFi set _enadev Speaker 视频能正常播放,也有声音了。
重启系统后,播放视频正常,没声音
执行一次alsactl restore ,播放视频正常,没声音 ,没有效果
执行一次 alsaucm -c bytcht-es8316 set _verb HiFi set _enadev Speaker 视频播放正常,有声音了。

我在 chromeos 上得到的 asound.state 并没有起作用,不知道是哪里做的不对还是确实不能用。不过从现在已经有声音的 fydeos 中使用的 asound.state 文件导入到从 u 盘启动的 fydeos 系统上,即便是 alsa_lib 版本不一致也是可以直接有声音的,虽然还是不知道该如何通过 alsaucm 设置。看起来你在 ubuntu 下得到的文件能在 fydeos 下使用,可能只需要 restore asound.state 就可以了。

另外不知道是不是打字的错误,发现你在 ubuntu 下得到的是 asound.conf 文件。 放在fydeos系统 /etc 下的是 asound.state, /var/lib/alsa/ 下的是 asound.conf。我在这边试的过程中,好像如果使用 alsactl store 没有通过 -f 指定文件名的话,默认生成的是 asound.state,alsactl restore 也是默认读取的 /var/lib/alsa/asound.state 文件。 /etc/ 下面只有 asound.conf 文件,里面的内容是这样子的

pcm.!default {
    type cras
}
ctl.!default {
    type cras
}

关于 alsaucm,在 brunch 的那个帖子里面,他给出的 set _enadev 设置对应的分别是 Headphone 和 Speakers, 但是在这台机器上起作用的是 Headphones 和 Speaker。
changlog 里有写 Changes v1.2.1.1 v1.2.1.2

ucm2: remove the old SectionDevice syntax (additional .0)

ucm2: change ‘Headphone’ to ‘Headphones’

虽然没有去找对应的文档,但是感觉 set _enadev 后面跟的应该是 ucm2 下文件里 SectionDevice 后面的内容,你可以试试 Headphones, Speaker, Headset, Mic。

现在我这里也还是会重启失效,需要再执行一遍 alsectl,可以把命令放在 /etc/init 下面,开机直接就可以有声音了

# /etc/init/restoresound.conf

description "restore alsa sound state"

start on started system-services

task

script
  if [ -r /var/lib/alsa/asound.state ]; then
    /usr/sbin/alsactl restore
  fi
end script

对了你需要把执行成功的状态 store 一下保存更改到文件里,然后 restore 才会加载当时的状态。

/etc 里面的是asound.conf ,不过好像不影响,最后一次没有动这个文件,我编辑帖子时候也发现打错了。
从ubuntu复制出来的也是/var/lib/alsa/里面的asound.state

看别人在安卓x86里的经验


可能asound.state有影响 。

我看到这里有MonoSpeaker所以想试试

我在根目录创建了一个snd.sh脚本,那样用bash snd就可以免去每次输入alsaucm -c bytcht-es8316 set _verb HiFi set _enadev Speaker 这么长一串,不过最希望是启动时能自动执行。

从你这里看到了曙光呀,虽然没看大明白:smiley:

找了好久自动静音的方法。不知道 Upstart 的用法对不对,但是能用就先凑合着了

# /etc/init/automute.conf 
description    "automatically mute the speaker when headset is plugged in"

start on started system-services
task

script
    device='/dev/input/event13'
    hp_in='*Event code 2 (SW_HEADPHONE_INSERT) state 1*'
    hp_insert='*type 5 (EV_SW), code 2 (SW_HEADPHONE_INSERT), value 1*'
    hp_remove='*type 5 (EV_SW), code 2 (SW_HEADPHONE_INSERT), value 0*'
    # numid=205,iface=MIXER,name='Speaker Volume'
    current_volume=$(amixer -c 1 cget 'numid=205' | grep ': values' | cut -d , -f 2)
    speaker_volume=$current_volume

    evtest $device | while read line; do
        case $line in
            $hp_insert)
                current_volume=$(amixer -c 1 cget 'numid=205' | grep ': values' | cut -d , -f 2)
                speaker_volume=$current_volume
                if [ "$current_volume" -gt 0 ]; then
                    amixer -c 1 cset 'numid=205' 0
                fi ;;
            $hp_remove)
                amixer -c 1 cset 'numid=205' $speaker_volume ;;
            $hp_in)
                if [ "$speaker_volume" -gt 0 ]; then
                    amixer -c 1 cset 'numid=205' 0
                fi ;;
        esac
    done

end script

我这里 speaker 没找到 mute,就手动设置音量了
运行 evtest 会有对应 event 的说明,amixer -c <card_N> controls 会给出操作的 numid

之前的那个回复不能编辑了,HiFi 的 I 大写了,修改放在这里

alsaucm -c chtmax98090 set _verb HiFi set _enadev Headphones
alsaucm -c chtmax98090 set _verb HiFi set _enadev Speaker
alsaucm -c chtmax98090 set _verb HiFi set _enadev Headset
alsaucm -c chtmax98090 set _verb HiFi set _enadev Mic
sudo mkdir /var/lib/alsa/
/usr/sbin/alsactl store

除非万不得别改 asound.conf, cras_client可以用来测试用

下次版本升级能不能把alsa_lib也升级一下,那我就不用再安装chromebrew了。

1 个赞

请问一下ES8316到底有没有声音,我用的是台电X98 看到已经加载了驱动程序。喇叭和耳机都不能使用

麻烦问一下 chromebrew 是不是安装不了了
提示:“Download failed :confused: Please check your network settings.”

安装1.2.4 的 alsa_lib 和alsa utils 还有别的办法吗?

隔了几个月,操作不太记得了,之前的v15的U盘也刷了v16.1,再重做了一次,到了这个我也不知道有没有安装好chromebrew。

上面操作回复得很乱的,我都不知道从哪里做起!能不能帮忙整理一下,如果是ES8316C声卡芯片,该如何一步步的操作呢?

能不能将你那ubuntu里备份的UCM2文件夹和asound.state文件网盘分享一下给我?
我看了一下,FydeOS最新的v16.1的三代至八代系统,Linux内核是v5.4,九至十二代系统内核是v5.15。
我在九至十二代系统上按Ctrl+Alt+F2进命令行去试试不知道是否可行,还是非得在openfyde去使用?

这个帖子里也没有论述过任何openfyde的内容,建议再看看全部的楼层。
我的前两天放的视频里面其实也展示了在哪里操作。你有想法可以自己先尝试一下,碰壁了再来给后人提个醒。