如何自动静音耳机断开? 或者如何将bash脚本点击到系统事件监听器?
如果每次断开headphones
时Ubuntu都会将sound
静音,我的生活会更容易,因为每次周围都不同(例如白天/夜晚),但输出音量相同。
我可以为此找出脚本,但不能没有与Ubuntu event listener
交互。 到目前为止我对此一无所知。
我会欣赏任何一个主题的解决方案或提示,但不是为了这么简单的事情而安装任何package
,其中一堆是update
方式太长+我喜欢我的系统可能是干净或推理。
实际上我会写出更多我不知道的解决方案, reaction to events
有reaction to events
的知识,比如在连接时自动调整USB鼠标设置(他们重置的地狱?)或者在连接时自动启用GSM调制解调器。
首先,在终端中打开alsamixer
程序(Ctrl + Alt + T)。
检查automute是否已启用。 您可以使用左右键导航到它,然后向上切换以切换值。 Esc退出。
现在,如果您在没有耳机的情况下静音,请插入耳机并再次拔下耳机,扬声器发出的声音应保持静音。 至少在我的机器上,启用自动静音后,我可以保持扬声器静音,而耳机可以在插入时输出声音。
简短的回答
- 要查看通知,您必须安装notify-osd
sudo apt install notify-osd
- 在
/home/
目录中创建文本文件/
。 并将执行权限添加到文件.sh chmod +x /home/
/ .sh -
将下面的文本粘贴到
文件中.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/
文件设置为使用桌面环境(xfce,KDE,Gnome等) 自动启动 。/ .sh
警告! 如果您使用KDE,则不要使用bash /home/
添加"Start script before KDE"
或"Application"
的文件。
用作脚本 (方案)和“从WITH KDE开始” 。
如果你已经这样做了,那么按ctrl + alt + F2
,以用户身份登录并删除rm /home/
。 如果您没有删除权限,则在删除mount -o remount, rw /
之前mount -o remount, rw /
磁盘。
如何编辑脚本
一些基于Linux的系统缓存自动启动脚本。 这意味着即使您编辑/home/
并logout / login
或restart
系统,脚本也将保持不变。
在KDE中,您可以在/home/
找到缓存的脚本符号链接。 手动删除
文件, 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事件,您可以使用evtest 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
对我不起作用。 可能我错了CONFIG_SND_HDA_INPUT_JACK选项。 测试那个用途
sudo grep CONFIG_SND_HDA_INPUT_JACK /boot/config-$(uname -r)
我的答案是基于这个答案。
您可以通过为耳机插头/拔出事件设置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/events/
创建另一个配置文件,并指定自己的脚本来处理这些事件,而不是修改/etc/acpi/handler.sh
。 使用默认配置作为模板:
$ cat /etc/acpi/events/anything # Pass all events to our one handler script event=.* action=/etc/acpi/handler.sh %e
看看man acpid
了解更多细节。