我读到在终端中按Ctrl+会发出蜂鸣声。G我已经尝试过,但没有任何反应。为什么?
我正在使用 GNOME 终端和 Bash。
答案1
按下Ctrl+G键盘即可打开终端模拟器发送0x7 字节,又名^G
ASCII 中的 BEL 字符,又名\a
(警报)。
大多数终端都会发出嘟(或视觉铃声,如屏幕闪烁),当他们收到该字符,即当应用程序将该字符写入终端设备文件时,或者当回声该终端设备的 tty 规则将其原封不动地发回。
如果您输入:
printf '\a'
或者:
printf '\7'
您应该看到闪光或听到蜂鸣声。
如果没有,请检查您的终端仿真器配置,铃声可能默认被禁用。您可能还需要在桌面环境中全局启用它,以使用 gnome-terminal 等精美的集成终端模拟器。如果仍然不起作用,请尝试使用适当的终端模拟器,例如xterm
.
在 X11 中,终端仿真器(或它们使用的库)通常会XBell()
在未配置屏幕闪烁时调用标准 X 库函数来发出蜂鸣声。
可以使用命令配置蜂鸣声(音高、基本音量、持续时间)xset b
。
在 Linux 和 PC 上,默认情况下,X 服务器将使用 PC 扬声器。然而现在,pcspkr
通常默认情况下禁用该功能。
相反,应用程序可以向 X 服务器注册来处理这些铃声。pulseaudio
许多桌面环境中使用的声音服务器可以做到这一点。
如果尚未配置为执行此操作,您可以取消注释或将这些行添加到您的~/.config/pulse/default.pa
文件中(或/etc/pulse/default.pa
系统范围内):
load-sample-lazy x11-bell /usr/share/sounds/freedesktop/stereo/bell.oga
load-module module-x11-bell sample=x11-bell
(将声音样本替换为您选择的声音样本之一)。
现在,要在按下 时听到蜂鸣声Ctrl-G,您需要应用程序回声那个^G
角色。或者对于没有自己的行编辑器的应用程序,请使用 tty 设备行规则回声处于icanon
模式时。
默认情况下,Linux 上的行规则将回显它,但它将回显为^G
(^
和G
字符)。这可以改变
stty -echoctl
如果你这样做:
stty -echoctl; cat
您会听到蜂鸣声或看到屏幕闪烁Ctrl+G。如果没有stty -echoctl
或 之后stty echoctl
,您会看到^G
显示在 上Ctrl+G。
zsh
在交互式 shell 应用程序(如或)的提示下bash
,或者在可视化应用程序(如vi
、emacs
、mutt
、 ...)中,应用程序可以决定在从终端设备文件aptitude
读取该 BEL/ 字符后执行任何操作。^G
在emacs
^G
是为了中止当前编辑器操作。它在zsh
或模式bash
下是相同的emacs
(与bash
或其他使用 GNU 的应用程序readline
,也受bell-style
和prefer-visible-bell
参数的影响)。作为其中的一部分,他们确实将一个^G
字符发送回终端,这应该会引起蜂鸣声/闪烁。
一些可能相关的命令来查询当前配置(其中许多仅适用于使用基于 gtk 的桌面环境的 GNU/Linux 系统和pulseaudio
):
检查终端设备线路规则
echo
相关参数(对于cat
此类不实现自己的终端用户界面(TUI)的应用程序):stty -a | grep echo
^G
shell 提示符下映射到的操作:bindkey '^G' # in zsh or tcsh bind -p | grep C-g # in bash
GNU
readline
配置中与响铃相关的设置:grep bell /etc/inputrc ~/.inputrc bind -v | grep bell # bash
终端模拟器中响铃相关设置
xterm
:appres XTerm | grep -i bell
在一些基于 gtk 的终端模拟器或环境中:
gsettings list-recursively | grep -i bell dconf dump / | awk '/^\[/{p=$0};/bell/{print p ORS $0}' gconftool -R /apps/gnome-terminal/profiles | grep bell
X11铃配置:
xset q | grep bell
脉冲音频中与铃声相关的配置:
pactl list | awk -vRS= -vORS='\n\n' '/bell|pcsp/'
(在此处的 Linux Mint Cinnamon 系统上,
/usr/bin/start-pulseaudio-x11
执行 a/usr/bin/pactl load-module module-x11-bell "display=$DISPLAY" "sample=bell.ogg"
但从未定义/上传bell.ogg
示例,因此除非您执行此操作,否则铃声不会工作pactl upload-sample /usr/share/cinnamon/sounds/bell.ogg bell.ogg
)pcspkr
或内核模块是否snd-pcsp
已加载:lsmod | grep pcsp
它们是否被明确禁用(列入黑名单):
grep -r pcsp /etc/modprobe*
已加载但已禁用?
find /sys/module -path '*pcsp*/enable' -exec grep -H . {} +
PC 扬声器是否可用作 ALSA 设备:
alsactl -f alsa.dump store; sed '/pcsp/,/^}/!d' alsa.dump
^G
发送到Linux虚拟控制台会发出蜂鸣声吗?printf \\a | sudo tee /dev/tty0
播放
x11-bell
(假设已定义)会发出声音吗?pactl play-sample x11-bell
模块是否注册了输入事件设备
pcspkr
?find /sys/class/input -lname '*/pcsp*/event*' -ls