sound
如果 Ubuntu每次我断开连接时都将静音,我的生活就会更轻松headphones
,因为每次周围环境都不同(例如白天/夜晚),但输出音量相同。
我可能会弄清楚这个脚本,但必须与 交互Ubuntu event listener
。到目前为止,我对此一无所知。
我将非常感激针对这两个问题的解决方案或提示,但不会package
为如此简单的事情安装任何东西,这些东西太长了update
+我希望我的系统尽可能干净或合理。
实际上,我会根据所了解的内容写出更多我所不知道的解决方案reaction to events
,比如在连接时自动调整 USB 鼠标设置(他们为什么要重置?)或在连接时自动启用 GSM 调制解调器。
答案1
首先,alsamixer
在终端中打开程序(Ctrl+Alt+T)。
检查自动静音是否已启用。您可以使用左右键导航到它,并使用上下键切换值。Esc 退出。
现在,如果您不使用耳机静音,然后插上耳机,再拔下耳机,扬声器的声音应该保持静音。至少在我的计算机上,启用自动静音后,我可以让扬声器保持静音,而耳机插入后可以输出声音。
答案2
简短回答
- 要查看通知,您必须安装notify-osd
sudo apt install notify-osd
<my_name>.sh
在你的目录中创建一个文本文件/home/<user_name>/
。并为文件添加执行权限chmod +x /home/<user_name>/<my_name>.sh
将以下文本粘贴到
<my_name>.sh
文件中#!/bin/bash acpi_listen | while IFS= read -r line; do if [ "$line" = "jack/headphone HEADPHONE plug" ] then amixer -D pulse set Master mute notify-send "headphones connected. Sound is muted" elif [ "$line" = "jack/headphone HEADPHONE unplug" ] then amixer -D pulse set Master mute notify-send "headphones disconnected. Sound is muted" fi done
去启动配置linux 系统(ubuntu、kubuntu、xubuntu 等)的菜单。将
/home/<user_name>/<my_name>.sh
文件设置为自动启动 和您的桌面环境(xfce、KDE、Gnome 等)。
警告!如果你使用 KDE,那么不要添加文件"Start script before KDE"
或"Application"
使用bash /home/<user_name>/<my_name>.sh
。
使用作为脚本(场景)和“从 KDE 开始”。
如果如果您已经这样做了,则按ctrl + alt + F2
,以用户身份登录并删除rm /home/<user_name>/<my_name>.sh
。如果您没有删除权限,则在删除之前重新安装磁盘mount -o remount, rw /
。
如何编辑脚本
一些基于 Linux 的系统缓存自动启动脚本。这意味着即使您编辑/home/<user_name>/<my_name>.sh
和logout / login
或restart
系统,脚本也将保持不变。
在 KDE 中,您可以在中找到缓存的脚本符号链接/home/<user_name>/.config/autostart-scripts/<my_name>.sh
。<my_name>.sh
手动删除文件,logout / login
系统,将脚本添加到autostart
并重复logout / login
。
在我看来,这KDE 错误。我不知道其他 DE(xfce、Gnome 等)
你需要知道什么
您可以看到如上"jack/headphone HEADPHONE plug"
代码所示的文本。这是耳机事件名称。
要查看事件:
1.在控制台中输入acpi_listen
2.插头和拔耳机(或其他设备)
3. 您将在安慰. 它将类似于下面的文本
user@user-PC:~$ acpi_listen
jack/headphone HEADPHONE unplug
jack/microphone MICROPHONE unplug
jack/headphone HEADPHONE plug
jack/microphone MICROPHONE plug
如果上述脚本中的事件名称是不同的然后将其替换为来自安慰输出。
ACPI 和事件
要查看和测试 ACPI 事件,您可以使用事件测试
sudo apt install evtest
user@user-PC:~$ sudo evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0: Lid Switch
/dev/input/event1: Power Button
/dev/input/event2: Power Button
/dev/input/event3: AT Translated Set 2 keyboard
/dev/input/event4: Video Bus
/dev/input/event5: SynPS/2 Synaptics TouchPad
/dev/input/event6: COMPANY USB Device
/dev/input/event7: COMPANY USB Device
/dev/input/event8: COMPANY USB Device
/dev/input/event9: HP Wireless hotkeys
/dev/input/event10: HDA Intel HDMI HDMI/DP,pcm=3
/dev/input/event11: HDA Intel HDMI HDMI/DP,pcm=7
/dev/input/event12: HDA Intel HDMI HDMI/DP,pcm=8
/dev/input/event13: HDA Intel HDMI HDMI/DP,pcm=9
/dev/input/event14: HDA Intel HDMI HDMI/DP,pcm=10
/dev/input/event15: HDA Intel PCH Mic
/dev/input/event16: HDA Intel PCH Headphone
/dev/input/event17: HP WMI hotkeys
/dev/input/event18: HP Webcam: HP Webcam
Select the device event number [0-18]: 16
Input driver version is 1.0.1
Input device ID: bus 0x0 vendor 0x0 product 0x0 version 0x0
Input device name: "HDA Intel PCH Headphone"
Supported events:
Event type 0 (EV_SYN)
Event type 5 (EV_SW)
Event code 2 (SW_HEADPHONE_INSERT) state 1
Properties:
Testing ... (interrupt to exit)
Event: time 1522588668.319567, type 5 (EV_SW), code 2 (SW_HEADPHONE_INSERT), value 0
Event: time 1522588668.319567, -------------- SYN_REPORT ------------
Event: time 1522588670.035275, type 5 (EV_SW), code 2 (SW_HEADPHONE_INSERT), value 1
Event: time 1522588670.035275, -------------- SYN_REPORT ------------
由于某些原因,/etc/acpi/events/jack
它对我来说不起作用。可能是我错了配置_SND_HDA_输入插孔选项。要测试该使用
sudo grep CONFIG_SND_HDA_INPUT_JACK /boot/config-$(uname -r)
我的回答基于这回答。
答案3
您可以通过设置耳机插入/拔出事件的 ACPI 监听器来自动执行此操作:
$ grep headphone /etc/acpi/handler.sh -A 11
jack/headphone)
case "$3" in
plug)
logger "Headphones plugged"
amixer sset 'Headphone' 30%
;;
unplug)
logger "Headphones unplugged"
amixer sset 'Speaker' 30%
;;
esac
;;
$ systemctl restart acpid
其他方式:/etc/acpi/handler.sh
您可以创建另一个配置文件并指定自己的脚本来处理这些事件 ,而无需进行修改/etc/acpi/events/
。使用默认配置作为模板:
$ cat /etc/acpi/events/anything
# Pass all events to our one handler script
event=.*
action=/etc/acpi/handler.sh %e
查看man acpid
更多详细信息。