Arka fon
Sesin HDMI TV'den dizüstü bilgisayar hoparlörlerine geçmesi durumunda bekleme / devam sırasında da benzer bir sorun yaşadım. Devam ettiğinde ses Dizüstü hoparlörlerde kalır ve çıkış cihazını TV'ye manuel olarak sıfırlamak zorunda kalırdım System Settings
-> Sound
.
Bu yükseltme ile ilk can sıkıcı deneyimleri oldu Ubuntu 14.04 için 16.04 ve kök ile gelir PulseAudio 8'e yükseltme edildi 16,04 LTS
Çok fazla arama yaptıktan sonra adlı bir komut dosyası oluşturdum TV-sound
. TV'yi kendiniz gibi takıp çıkarmama rağmen, bazı google aramaları yaptım ve durumunuzda çalışmak için komut dosyasının bir varyasyonunu oluşturdum. Test ettim ve işe yarıyor.
1. Adım: Sesi bağlı cihazlar arasında değiştirmek için komut dosyası oluşturun
hotplugtv
Udev adlı bir komut dosyası yaratacağız . Aynı komut dosyası birçok yerde çağrılabilir. Örneğin, test lock-screen-timer
sırasında ekran kilidi sırasında sesin Dizüstü bilgisayara geri döndüğü yerde kullandım .
cd /usr/local/bin
sudo touch hotplugtv
sudo chmod +x hotplugtv
gksu gedit hotplugtv
Editör boş bir ekranla açıldığında, aşağıdakileri kopyalayıp ekrana yapıştırın:
#! /bin/bash
# NAME: hotplugtv
# PATH: /usr/local/bin
# DESC: Update pulseaudio output device when HDMI TV plugged / unplugged
# CALL: called from /etc/udev/rules.d/99-monitor-hotplug.rules
# DATE: Created Nov 26, 2016.
# NOTE: logs output using log-file
# UPDT: Dec 14, 2016 - Sometimes /sys/class/drm/card0 & sometimes /sys/class/drm/card1
# so use /sys/class/dmcard* instead.
if [[ $(cat /sys/class/drm/card*-HDMI-A-1/status | grep -Ec "^connected") -eq 1 ]]; then
# log-file "HDMI TV connected" ~/bin/log-hotplugtv;
/bin/sleep 2;
export PULSE_RUNTIME_PATH="/run/user/1000/pulse/";
sudo -u rick -E pacmd set-card-profile 0 output:hdmi-stereo;
else
# log-file "HDMI TV disconnected" ~/bin/log-hotplugtv;
export PULSE_RUNTIME_PATH="/run/user/1000/pulse/";
sudo -u rick -E pacmd set-card-profile 0 output:analog-stereo;
fi
exit 0
İki örneğini rick
kendi kullanıcı kimliğinizle (ör UTF-8
. Vb.) Değiştirmeniz gerekir .
Bu kullanıcı adı otomatik olarak bir bash değişkenine ayarlanmış daha profesyonel olabileceğini biliyorum ama henüz bu kadar yetenekli değilim :( Her neyse, dosyayı kaydedin ve çıkın gedit
.
2. Adım: udev kuralları oluşturun
udev, HDMI monitörünüzü takıp çıkarırken çalışırken takma olaylarını izler. Yeni bir kural oluşturmak için aşağıdakileri yazın.
cd /etc/udev/rules.d
sudo cp 70-persistent-net.rules 99-hotplugtv.rules
gksu gedit 99-hotplugtv.rules
NOT: Dosya 70-persistent-net.rules
dizininizde yoksa, oraya başka bir dosya kopyalayın. Dosya içeriğine ihtiyacımız yok, sadece dosyalarımızın aynı olduğundan emin olmak için dosya izinlerine ihtiyacımız var.
Editör, bir grup alakasız metni gösterecek, vurgulayıp silecektir. Ardından aşağıdaki kodu vurgulayın ve düzenleyiciye yapıştırın:
# NAME: 99-hotplugtv.rules
# PATH: /etc/udev/rules.d
# DESC: Update pulseaudio output device when HDMI TV plugged / unplugged
# CALL: automatically called on system events
# DATE: Created Nov 26, 2016.
# NOTE: in future may requre systemd service hooks
ACTION=="change", SUBSYSTEM=="drm", ENV{HOTPLUG}=="1", RUN+="/usr/local/bin/hotplugtv"
Dosyayı kaydet ve çık.
Kuralı etkinleştirmek için (yeniden başlatmadan) udev'i yeniden yüklememiz gerekir:
sudo udevadm control --reload-rules
Artık HDMI monitörünüzü / TV'nizi ve ses düğmelerini uygun şekilde takıp çıkarabilirsiniz.
Uyarı
Sistemimde, HDMI takılı değilken ses otomatik olarak Dizüstü bilgisayar hoparlörlerine döner. Sisteminizde olmadı. HDMI takılı değilken ses dizüstü hoparlörlerinize gitmezse kodda daha fazla iyileştirme yapılması gerekebilir. Lütfen işlerin nasıl çalıştığını / çalışmadığını aşağıda yorum yoluyla yanıtlayın.
CLI'de hızlı test
Terminali kullanarak kodu hızlı bir şekilde test edebilirsiniz:
export PULSE_RUNTIME_PATH="/run/user/1000/pulse/";
HDMI / TV'ye geç:
sudo -u rick -E pacmd set-card-profile 0 output:hdmi-stereo;
Dahili hoparlörlere geri dönün:
sudo -u rick -E pacmd set-card-profile 0 output:analog-stereo;
rick
Kullanıcı adınızla değiştirmeyi unutmayın .
- İlk
export
satır muhtemelen gerekli değildir, ancak sadece güvenli olmak için dahil ettim.
- Birden fazla ses kartınız varsa veya
hdmi-stereo
betiğinizi yazmadan önce doğru parametreleri bulmak için ince ayarlardan başka bir şey gerekiyorsa.
PulseAudio içinde cihaz adınızın şifresini çözme
Aşağıdaki kod aynı komutu iki kez kullanır. Bir kez ses harici HDMI TV'ye ayarlandığında. Ses dizüstü bilgisayarın yerleşik hoparlörlerine ayarlandığında ikinci kez. PulseAudio adını her gördüğünüzde:
$ pacmd list-sinks | grep -e 'name:' -e 'index'
* index: 28
name: <alsa_output.pci-0000_00_1b.0.hdmi-stereo>
───────────────────────────────────────────────────────────────────────────────
$ pacmd list-sinks | grep -e 'name:' -e 'index'
* index: 30
name: <alsa_output.pci-0000_00_1b.0.analog-stereo>
Birden fazla ses kartınız olduğunda
aplay -l
0'dan büyük kartlarınız olup olmadığını görmek için komutu kullanın. Eğer öyleyse, komut dosyalarınızda uygun kart numarasını kullanmanız gerekecektir. Örneğin:
$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: 92HD91BXX Analog [92HD91BXX Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 3: HDMI 0 [HDMI 0]
Subdevices: 0/1
Subdevice #0: subdevice #0
Yukarıdaki örnekte, farklı çıkış kaynaklarına sahip tüm kart numaraları 0'dır. USB hoparlörleriniz varsa 0'dan farklı bir kart numarasına sahip olabilirler.
Düzenle 2 Aralık 2016
Bilinmeyen bir nedenden dolayı senaryo bugün kırıldı. Yukarıdaki kod okumak için kullanılan: "$ (cat / sys / class / drm / card0-HDMI-A-1 / status" ama değiştirmek card0
zorunda kaldı card1
ve yukarıdaki kod böyle revize edildi. Ne değiştiğini açıklayamıyorum 26 Kasım 2016'dan bu yana düzenli Ubuntu güncellemeleri dışında benim sistemimde.
Düzenle 14 Aralık 2016
Geri tekrar açık olması için gerekli kod Yukarıda: "$ (cat / sys / class / DRM / card0-HDMI-A-1 / durum" Yerine arasındaki kod revize card0
ve card1
referansına, revize programı açılışta bağlı card*
iki senaryoyu yakalamak için .