Sté*_*las 12
按Ctrl+G你的键盘让你的终端模拟器发送0x7 字节,也就是^G
ASCII 中的 BEL 字符又名\a
(警报)。
大多数终端发出蜂鸣声(或视觉钟,像闪烁的屏幕),当他们收到该字符时,即当应用程序写该字符到终端设备的文件,或当回波该终端装置的TTY纪律的将其原封不动地发回。
如果您输入:
printf '\a'
Run Code Online (Sandbox Code Playgroud)
或者:
printf '\7'
Run Code Online (Sandbox Code Playgroud)
您应该看到闪光或听到哔声。
如果没有,请检查您的终端模拟器配置,默认情况下可能会禁用铃声。您可能还需要在桌面环境中为 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
Run Code Online (Sandbox Code Playgroud)
(用您选择的一个替换声音样本)。
现在,要在您按下 时听到哔声Ctrl-G,您需要应用程序来回显该^G
字符。或者对于没有自己的行编辑器的应用程序,在模式下让 tty 设备行规则回显它icanon
。
默认情况下,Linux 上的行规则会回显它,但它会将其回显为^G
(^
和G
字符)。这可以改变
stty -echoctl
Run Code Online (Sandbox Code Playgroud)
如果你这样做:
stty -echoctl; cat
Run Code Online (Sandbox Code Playgroud)
您会听到蜂鸣声或看到屏幕闪烁Ctrl+G。虽然没有stty -echoctl
或之后stty echoctl
,您会看到^G
显示在 上Ctrl+G。
在交互式 shell 应用程序(如zsh
或 )的提示下bash
,或在可视化应用程序(如vi
、emacs
、mutt
、aptitude
... )中,应用程序可以决定在^G
从终端设备文件中读取该 BEL/字符时执行其想做的任何事情。
Inemacs
^G
用于中止当前的编辑器操作。在mode中zsh
或bash
处于emacs
mode时是相同的(bash
使用 GNU 或其他应用程序readline
,这也受bell-style
和prefer-visible-bell
参数的影响)。作为其中的一部分,他们确实向^G
终端发送了一个字符,这应该会引起哔哔声/闪烁。
一些可能相关的查询当前配置的命令(其中许多仅适用于使用基于 gtk 的桌面环境和 的 GNU/Linux 系统pulseaudio
):
检查终端设备线路echo
规程相关的参数(对于cat
不实现自己的终端用户界面 (TUI) 的应用程序):
stty -a | grep echo
Run Code Online (Sandbox Code Playgroud)^G
在 shell 的提示下映射到什么操作:
bindkey '^G' # in zsh or tcsh
bind -p | grep C-g # in bash
Run Code Online (Sandbox Code Playgroud)GNUreadline
配置中的 bell 相关设置:
grep bell /etc/inputrc ~/.inputrc
bind -v | grep bell # bash
Run Code Online (Sandbox Code Playgroud)xterm
终端模拟器中的铃声相关设置:
appres XTerm | grep -i bell
Run Code Online (Sandbox Code Playgroud)在一些基于 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
Run Code Online (Sandbox Code Playgroud)X11铃铛配置:
xset q | grep bell
Run Code Online (Sandbox Code Playgroud)pulseaudio 中响铃相关的配置:
pactl list | awk -vRS= -vORS='\n\n' '/bell|pcsp/'
Run Code Online (Sandbox Code Playgroud)
(在此处的 Linux Mint Cinnamon 系统上,/usr/bin/start-pulseaudio-x11
执行/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
Run Code Online (Sandbox Code Playgroud)它们是否被明确禁用(列入黑名单):
grep -r pcsp /etc/modprobe*
Run Code Online (Sandbox Code Playgroud)已加载但已禁用?
find /sys/module -path '*pcsp*/enable' -exec grep -H . {} +
Run Code Online (Sandbox Code Playgroud)PC 扬声器是否可用作 ALSA 设备:
alsactl -f alsa.dump store; sed '/pcsp/,/^}/!d' alsa.dump
Run Code Online (Sandbox Code Playgroud)并^G
发送到Linux虚拟控制台发出蜂鸣声?
printf \\a | sudo tee /dev/tty0
Run Code Online (Sandbox Code Playgroud)播放x11-bell
(假设已定义)是否会发出声音?
pactl play-sample x11-bell
Run Code Online (Sandbox Code Playgroud)pcspkr
模块是否注册了输入事件设备?
find /sys/class/input -lname '*/pcsp*/event*' -ls
Run Code Online (Sandbox Code Playgroud)