编辑:这个问题似乎也影响到 18.04。
我从 15.10 开始就有这个问题,但是在升级到 16.04 后它开始真正磨我的齿轮。
假设我插入了耳机。我重新启动\重新登录\启动到ubuntu,然后播放音乐。它来自内置扬声器而不是耳机。
我可以看到在音频设置菜单中检测到耳机,但只有在我更换设备或重新插入耳机后,它们才能工作。
这在 15.10 上更容易被忽略,因为当时启动后,一切都被静音了。耳机和扬声器,如果在上述启动之前有耳机。
我会在问题中添加日志,但我真的不知道哪个或如何获取它们(我愿意接受建议)。问题发生在戴尔 Inspiron 3537 笔记本电脑上,它内置了 Realtek 声卡。
它的侧面有一个输出插孔,既可以作为输入也可以作为输出。
输出 pacmd listcards
2 card(s) available.
index: 0
name: <alsa_card.pci-0000_00_03.0>
driver: <module-alsa-card.c>
owner module: 6
properties:
alsa.card = "0"
alsa.card_name = "HDA Intel HDMI"
alsa.long_card_name = "HDA Intel HDMI at 0xc0810000 irq 49"
alsa.driver_name = "snd_hda_intel"
device.bus_path = "pci-0000:00:03.0"
sysfs.path = "/devices/pci0000:00/0000:00:03.0/sound/card0"
device.bus = "pci"
device.vendor.id = "8086"
device.vendor.name = "Intel …Run Code Online (Sandbox Code Playgroud) 我的笔记本电脑(使用 12.04 LTS)使用 HDMI 连接显示器进行双屏设置。一切正常,但每次连接/断开电缆时,我都必须转到“声音”首选项并手动更改声音输出设备。
有什么方法可以在连接/断开电缆时更改声音输出设备,所以当我连接显示器时,声音输出设置为 HDMI,当我断开连接时,声音又回到笔记本电脑扬声器?
我见过一些类似的问题,但是找不到解决方案,而且它们都已经有几年了。
当我将笔记本电脑插入电视 HDMI 端口时,我必须手动浏览声音选项并选择 HDMI 才能让声音通过电视播放。有没有办法让它在连接时自动切换?
谢谢
您知道如何将耳机插入笔记本电脑的辅助插孔时,内置扬声器会自动静音并且声音从耳机中传出吗?我想要的正是 HDMI。
有时,我将带有内置扬声器的显示器连接到我的笔记本电脑以观看视频。当视频在显示器上(距离我的桌子 3 m 远)但声音从我的笔记本电脑的内置扬声器(笔记本电脑放在桌子上)上时,这很奇怪。
当然,我可以直接进入声音设置,将输出通道切换到HDMI。但是,后来,当我几个小时前移除 HDMI 电缆并且甚至可能在一个完全不同的位置时,声音将无法播放,因为声音服务器仍然尝试通过 HDMI 播放它,但没有任何连接到它.
在没有通过 HDMI 连接设备时自动切换回内置扬声器更为重要,但在连接设备时切换到通过 HDMI 输出的声音仍然非常好。
这显然适用于 11.10,但不适用于 16.04。
我有一台带 HDMI 端口的笔记本电脑。当我们无家可归并与朋友住在一起时,我一直在用 HDMI 电缆将其插入他们的环绕声接收器。为了让声音正常工作,我必须打开声音设置作业并将硬件配置文件从“模拟立体声输出”切换到“数字立体声(HDMI)输出”,以使声音来自环绕声而不是笔记本电脑的扬声器。
当我拔下插头时,我必须反过来做才能让声音从扬声器中传出。
我对这样做有点厌烦了。我想编写这个脚本。我已经看过这个问题及其答案,但是pacmd list-sinks当声音配置文件下拉列表显示多个选项时,只显示一个接收器。
是否有一个 udev 事件我可以将其挂钩,以便它可以在 HDMI 状态发生变化时运行脚本?
我想学习 udev 规则。这是我所做的:
victor@X301A1:~$ ls /etc/udev/rules.d/
70-persistent-cd.rules 70-persistent-net.rules README
Run Code Online (Sandbox Code Playgroud)
然后:
victor@X301A1:~$ sudo gedit /etc/udev/rules.d/01-my-first-udev.rules
Run Code Online (Sandbox Code Playgroud)
我的规则:
ACTION=="add", RUN+="echo HELLO ! > /home/victor/udev_test_log.txt"
Run Code Online (Sandbox Code Playgroud)
保存文件后:
sudo udevadm control --reload-rules
Run Code Online (Sandbox Code Playgroud)
我预计连接 USB 设备会写入文件,但没有任何反应。我哪里错了?
每当我连接到蓝牙耳机时,我都会尝试自动运行此脚本。
我已经用以下行创建了文件 /etc/udev/rules.d/80-bt-headset.rules
ACTION=="add", SUBSYSTEM=="input" ATTR{name}=="00:22:37:3D:DA:50" RUN+="/home/USER/.local/bin/a2dp.py 00:22:37:3D:DA:50"
Run Code Online (Sandbox Code Playgroud)
但它没有做任何事情。条件很好,当我输入时会触发一个简单的测试命令。手动运行时,脚本本身也能正常工作。
这里出了什么问题?
更新:运行脚本时出错sudo -u USER(有关详细信息,请参见下文)。这可能是问题吗?对同一用户执行 sudo 操作会如何破坏事情?
更新 2:在替换pacmdwith pactlin 的所有实例a2dp.py(并替换list-sinkswithlist sinks使其成为有效的 pactl 命令)后,sudo -u USER工作,但是, udev 规则仍然没有。在/var/log/syslog我只看到这条线
systemd-udevd[32629]: Process '/home/USER/.local/bin/a2dp_2.py 00:22:37:3D:DA:50' failed with exit code 1.
Run Code Online (Sandbox Code Playgroud)
更新 3(解决方案):使用环境变量修改后的 skript(pacmd -> pactl,请参阅更新 2)DISPLAY=:0并XAUTHORITY=/home/USER/.Xauthority成功。udev 规则:
ACTION=="add", SUBSYSTEM=="input" ATTR{name}=="00:22:37:3D:DA:50" ENV{DISPLAY}=":0" ENV{XAUTHORITY}="/home/USER/.Xauthority" RUN+="/home/USER/.local/bin/a2dp_2.py 00:22:37:3D:DA:50"
Run Code Online (Sandbox Code Playgroud)
正在按预期工作。
(现在唯一剩下的问题是,脚本本身会触发规则,因为它重新连接耳机,导致无限循环。但是,这是一个单独的问题,应该不难找到解决方法。在事实上,当我开始这个线程时,我期待这种行为。)
条件很好: 该行:
ACTION=="add", SUBSYSTEM=="input" …Run Code Online (Sandbox Code Playgroud)