Bu konu bir çözümü açıklamaktadır. Herhangi bir çözüm açıklanmadığını düşünüyorsanız konuyu rapor edebilirsiniz.

Zyrtek

Yetkin
Katılım
21 Ocak 2024
Mesajlar
323
Çözümler
3
Beğeniler
196
Yer
Kocaeli

Konu Başlıkları Gizle

  1. 1 Uygulama
  2. 2 Kontrol
  3. 3 Kaldırma
Fedora'da Fuxi H6 Pro kulaklığımı kullanırken garip bir ses sorunu yaşıyordum. Ses %100'deyken sorunsuz çalışıyor, ancak KDE üzerinden sesi biraz kıstığımda ya aşırı düşüyor ya da tamamen kesiliyordu.

Biraz araştırdıktan sonra sorunun PipeWire/KDE'den değil, kulaklığın USB Audio Mixer'ının Linux'a bildirdiği ses seviyesi değerlerinden kaynaklandığını fark ettim. Sorun yaşanırken PipeWire tarafında ses seviyesi normal şekilde kademeli olarak (örneğin %100 → %99 → %90) değişirken, ALSA tarafında bu değer 100 → 34 → 0 gibi aniden düşüyordu.


Kernel logları şöyleydi:

Sticky Mixer values (0/100/1 => 80), disabling
Warning! Unlikely small volume range (=100), linear volume or Custom curve?

Snd_usb_audio içindeki Quirk'leri denediğimde MIXER_PLAYBACK_LINEAR_VOL sorunu çözdü.

Kullandığım quirk:
040b:0897:0x08000000
Bunu uyguladıktan sonra ALSA'daki ses değerleri düzgün ve kademeli değişmeye başladı ve %100'ün altına inince sesin kaybolması sorunu ortadan kalktı.

Ayrıca MIXER_GET_CUR_BROKEN (0x40000000) Quirk'ini de ayrı olarak denedim. İkisini birlikte 0x48000000 olarak uyguladığımda kernel her ikisini de aktif ediyordu, ancak bu sefer sol/sağ kanal ses dengesi bozuluyordu.

Bu yüzden şu anda yalnızca 0x08000000 kullanıyorum.


Bu cihaz (040b: 0897) için ALSA/kernel tarafında daha önce de düzeltme çalışmaları yapılmış. Özellikle MIXER_GET_CUR_BROKEN ile ilgili bir quirk Upstream'e eklenmiş durumda.

Ancak kullandığım Fedora 44 7.1.13-200.FC44.X86_64 kernelinin kaynaklarında 040b: 0897 için bu quirk atamasını göremedim.

Burada ayrıca belirtmek gerekirse, MIXER_PLAYBACK_LINEAR_VOL (0x08000000) çözümü yapılan testler sonucunda bulundu. Upstream'deki MIXER_GET_CUR_BROKEN çalışması ise ayrı bir düzeltme.


Bu sorunu çözmek için yaklaşık 2-3 saat Claude ile uğraştım ve sonunda bu çözüme ulaştım. Sorunu düzeltecek bir Sh dosyası hazırladım, ihtiyacı olan kullanabilir.

İndirme Linki:

fuxi-h6-pro-fix.sh

Dosyayı indirdikten sonra SHA-256 değeri şu şekilde kontrol edilebilir:

sha256sum fuxi-h6-pro-fix.sh

İlk olarak dosyaya çalıştırma izni verilir:

chmod +x fuxi-h6-pro-fix.sh
Workaround'u uygulamak için:

./fuxi-h6-pro-fix.sh apply
İşlem tamamlandıktan sonra sistem yeniden başlatılır:

sudo reboot
Yeniden başlatma sonrasında kontrol etmek için:

./fuxi-h6-pro-fix.sh check
Workaround'u kaldırmak için:

Kod:
./fuxi-h6-pro-fix.sh remove
sudo reboot

Script'in check modu aşağıdaki kontrolleri otomatik olarak sırayla yapıyor. İstenirse aynı adımlar elle de tekrarlanabilir.

Öncelikle cihazın USB kimliği kontrol edilir. Benim cihazımın USB ID'si 040b:0897:

lsusb | grep -i '040b:0897'
Mevcut modprobe. D ayarı ve çalışan snd_usb_audio quirk değeri:

Kod:
cat /etc/modprobe.d/fuxi-h6-pro.conf
cat /sys/module/snd_usb_audio/parameters/quirk_flags

ALSA tarafındaki bilgisayarım ses seviyesi:

amixer -c Pro get PCM
Sorun mevcutken bu değerin PipeWire'daki kademeli değişimin aksine 100 → 34 → 0 gibi aniden düştüğü gözlemlenebilir.

Kernel tarafındaki ilgili mesajlar şu filtreyle taranır:

sudo dmesg | grep -iE '040b|0897|linear volume|broken mixer|sticky mixer|quirk'

Uygulama​

Script root yetkisiyle çalışıp aşağıdaki içeriği /etc/modprobe.d/fuxi-h6-pro.conf dosyasına yazar:

options snd_usb_audio quirk_flags=040b:0897:0x08000000
Ardından Initramfs'i yeniler:

dracut --force
Ve sistemin yeniden başlatılmasını ister.

Bilinçli olarak yalnızca MIXER_PLAYBACK_LINEAR_VOL (0x08000000) uygulanır. MIXER_GET_CUR_BROKEN (0x40000000) eklenmez, çünkü yapılan testlerde ikisi birlikte kullanıldığında sol/sağ kanal ses dengesi bozuldu.

Kontrol​

Check modu modprobe. D içeriğini, çalışan quirk_flags değerini, USB cihaz durumunu, ALSA bilgisayarım seviyesini ve ilgili kernel loglarını tek seferde kontrol edip özetler.

Beklenen ana kernel satırı:

applying playback linear volume quirk
Yeniden başlatma sonrasında aktif quirk şu komutla ayrıca doğrulanabilir:

cat /sys/module/snd_usb_audio/parameters/quirk_flags
Beklenen değer:

040b:0897:0x08000000

Kaldırma​

remove modu /etc/modprobe.d/fuxi-h6-pro.conf dosyasını siler ve Initramfs'i yeniden oluşturur.

Değişikliğin tamamen etkisizleşmesi için sistem yeniden başlatılır:

sudo reboot

Not: Bu workaround USB ID'si 040b: 0897 olan cihaz için hazırlandı. Farklı bir cihazda uygulamadan önce lsusb ile VID: PID değerinin kontrol etmenizi tavsiye ederim.