在NVIDIA GeForce GTX 1050 Ti上没有HDMI音频

我在HP Omen 15上运行Ubuntu 17.10上的内核v4.13.0-36-generic。我有一个混合的NVIDIA Optimus显卡。 我是双启动Windows 10,它可以通过我试图在Ubuntu中使用的同一HDMI线缆从同一个外部显示器播放音频。 我可以在Ubuntu的外接显示器上看到video。

我尝试在Ubuntu的内置声音设置GUI和脉冲音频音量控制中切换我的音频输出设备 ,但在前者中没有出现HDMI音频设备,而在后者中所有HDMI设备都显示为拔出插头。

使用通过软件和更新的附加驱动程序选项卡安装的专有nvidia-384驱动程序,我获得了最大的成功。 使用此驱动程序,我可以在外接显示器上看到video,通过笔记本电脑扬声器播放音频,并可靠地启动。

我尝试使用ppa中的 nvidia-387nvidia-390 :graphics-drivers / ppa安装了bumblebeebumblebee-nvidiaprimus ,但我甚至无法使用这些驱动程序在外部显示器上可靠地启动或查看video。 我观察到/etc/bumblebee/xorg.conf.nouveau/etc/bumblebee/xorg.conf.nvidia我的GeForce GTX 1050 Ti检测为独立显卡,我认为这是不正确的,但我不确定如何覆盖这些设置表明我的显卡是混合型的。

我已经列入黑名单,因为我无法启用nouveau可靠启动。

我安装了NVIDIA-Linux-x86_64-390.25.run ,但重新启动后卡在启动循环中,所以我运行了sudo nvidia-uninstall

我没有安装lowlatency内核。

如果它导致问题,我禁用Wayland。

我禁用了安全启动。

我尝试使用内核v4.15.4,但只发现它更难以可靠启动。

我尝试重新扫描我的GPU所连接的PCI桥上的PCI总线 。 我不知道如何从混合图形模式切换到专用图形模式,因为该解决方案的作者建议,所以这可能是它不适合我的原因。

 $ aplay -l **** List of PLAYBACK Hardware Devices **** card 0: PCH [HDA Intel PCH], device 0: ALC295 Analog [ALC295 Analog] Subdevices: 1/1 Subdevice #0: subdevice #0 card 0: PCH [HDA Intel PCH], device 3: HDMI 0 [HDMI 0] Subdevices: 1/1 Subdevice #0: subdevice #0 card 0: PCH [HDA Intel PCH], device 7: HDMI 1 [HDMI 1] Subdevices: 1/1 Subdevice #0: subdevice #0 card 0: PCH [HDA Intel PCH], device 8: HDMI 2 [HDMI 2] Subdevices: 1/1 Subdevice #0: subdevice #0 card 0: PCH [HDA Intel PCH], device 9: HDMI 3 [HDMI 3] Subdevices: 1/1 Subdevice #0: subdevice #0 card 0: PCH [HDA Intel PCH], device 10: HDMI 4 [HDMI 4] Subdevices: 1/1 Subdevice #0: subdevice #0 $ lspci 00:00.0 Host bridge: Intel Corporation Xeon E3-1200 v6/7th Gen Core Processor Host Bridge/DRAM Registers (rev 05) 00:01.0 PCI bridge: Intel Corporation Skylake PCIe Controller (x16) (rev 05) 00:02.0 VGA compatible controller: Intel Corporation Device 591b (rev 04) 00:04.0 Signal processing controller: Intel Corporation Skylake Processor Thermal Subsystem (rev 05) 00:14.0 USB controller: Intel Corporation Sunrise Point-H USB 3.0 xHCI Controller (rev 31) 00:14.2 Signal processing controller: Intel Corporation Sunrise Point-H Thermal subsystem (rev 31) 00:16.0 Communication controller: Intel Corporation Sunrise Point-H CSME HECI #1 (rev 31) 00:17.0 SATA controller: Intel Corporation Sunrise Point-H SATA Controller [AHCI mode] (rev 31) 00:1c.0 PCI bridge: Intel Corporation Sunrise Point-H PCI Express Root Port #1 (rev f1) 00:1c.4 PCI bridge: Intel Corporation Sunrise Point-H PCI Express Root Port #5 (rev f1) 00:1c.5 PCI bridge: Intel Corporation Sunrise Point-H PCI Express Root Port #6 (rev f1) 00:1c.6 PCI bridge: Intel Corporation Sunrise Point-H PCI Express Root Port #7 (rev f1) 00:1f.0 ISA bridge: Intel Corporation Sunrise Point-H LPC Controller (rev 31) 00:1f.2 Memory controller: Intel Corporation Sunrise Point-H PMC (rev 31) 00:1f.3 Audio device: Intel Corporation Device a171 (rev 31) 00:1f.4 SMBus: Intel Corporation Sunrise Point-H SMBus (rev 31) 01:00.0 3D controller: NVIDIA Corporation GP107M [GeForce GTX 1050 Mobile] (rev a1) 03:00.0 Unassigned class [ff00]: Realtek Semiconductor Co., Ltd. RTS522A PCI Express Card Reader (rev 01) 04:00.0 Network controller: Intel Corporation Wireless 7265 (rev 61) 05:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 15) 

非常感谢任何能够达到这一点的人。 任何建议将不胜感激。

非常感谢Rudi Daemen 。 他的解决方案解决了我的GTX 1060上的音频问题。 你可以尝试他的解决方案:

  1. 创建文件/etc/systemd/system/fix-hdmi-audio.service

     [Unit] Description=nVidia HDMI Audio Fixer Before=systemd-logind.service display-manager.service After=module-init-tools.service [Service] Type=oneshot ExecStart=/usr/local/bin/fix-hdmi-audio.sh [Install] WantedBy=multi-user.target 
  2. 创建文件/usr/local/bin/fix-hdmi-audio.sh

     #!/bin/sh setpci -s 01:00.0 0x488.l=0x2000000:0x2000000 rmmod nvidia-uvm nvidia-drm nvidia-modeset nvidia sh -c 'echo 1 > /sys/bus/pci/devices/0000:01:00.0/remove' sh -c 'echo 1 > /sys/bus/pci/devices/0000:00:01.0/rescan' modprobe nvidia nvidia-modeset nvidia-drm nvidia-uvm 

    并将其设置为runnable: chmod +x /usr/local/bin/fix-hdmi-audio.sh

  3. 启用服务: systemctl enable fix-hdmi-audio.service

  4. 安装apt install pavucontrol然后启动“PulseAudio Volume Control”。 在“配置”选项卡中,您只能看到“内部音频”。

  5. 重启。 插上HDMI并播放一些音乐。 启动“PulseAudio音量控制”。 在“配置”选项卡中,您应该看到“内部音频”和“HDA NVidia”。
    在“播放”标签中,音乐播放器右侧有一个按钮。 您可以选择“内部音频”或“HDA NVidia”。 选择“HDA NVidia”。

注意

重启后,你可以看到

 01:00.1 Audio device: NVIDIA Corporation Device 10f1 (rev a1) 

lscpi的输出中。

https://github.com/hhfeuer/nvhda#install-using-dkms解决了我的问题。 它利用了Ping和我自己上面链接的相同策略 。 很可能setpci -s 01:00.0 0x488.l=0x2000000:0x2000000不能用于我的硬件设置。

请注意,这适用于GTX 970M但适用于1060等。

使用setpci路由的问题是多重屏幕重置,因为lightdm被重新加载。 也许是因为我有三台显示器:

  • 50英寸电视通过内置HDMI硬连线到nVidia卡
  • 17英寸内置显示器由Intel iGPU驱动
  • 32英寸电视通过Thunderbolt连接并由Intel iGPU驱动

更大的问题是设置systemd和bash脚本的复杂性。

在这个链接上找到的基于内核的c语言解决方案: https : //bugs.freedesktop.org/show_bug.cgi?id = 75985 #c33远远优于它。 我已经在下面添加了大部分链接,并对我的平台进行了一些修改。


我的系统规格:

 i7-6700HQ + GTX 970M Linux kernel version: 4.13.0-26-generic Nvidia driver Version: 384.130 OS: Ubuntu 16.04.5 LTS 

我可以确认,由Maik Freudenberg [评论27]发布的内核模块在我的系统上工作正常。 谢谢你的修复。 HDMI音频设备现在可以正常工作。

我下载并解压缩了文件nvhda.tar.xz 。 我创建了目录~/nVidia进行提取。

在终端运行命令:

 cd ~/nVidia make sudo make install echo nvhda | sudo tee -a /etc/initramfs-tools/modules echo "options nvhda load_state=1" | sudo tee /etc/modprobe.d/nvhda.conf sudo update-initramfs -u # This updated newest kernel 4.15.0-26 sudo update-initramfs -u -k `uname -r` # Update booted 4.13.0-36 reboot 

通过此修复,我没有注意到电源管理或系统稳定性方面的任何问题。 插入/拔出HDMI线后,HDMI音频在系统启动后从睡眠状态恢复后工作。