在 arch linux 上,当我使用 sudo 时,如何将密码字符回显为 as●
而不是*
?
我已经nerd-fonts
安装了,正在使用alacritty
我的终端仿真器。
我已经使用 visudo 修改了 sudoers 文件,并使用启用了回显字符
Defaults env_reset,pwfeedback
答案1
在sudo
自己的密码输入例程中,*
是硬编码的,但您也可以sudo
使用外部命令来输入密码,包括图形命令,例如ssh-askpass
,/usr/libexec/seahorse/ssh-askpass
或实现您自己的命令。
现在还要注意, while*
是 ASCII 集的一部分,并且在系统上的所有区域设置中应该是不变的,但●
不是并且在极少数字符集中找到,并且其编码随区域设置而变化。在 UTF-8 中,它以 3 个字节进行编码,因此您需要一个可以处理多字节字符的例程,并且可以●
在用户的区域设置中对其进行编码,并在区域设置没有此类字符时回退到其他字符一个人物。
例如,您可以将其写为:
#! /usr/bin/perl
use Term::ReadPassword;
use Encode::Locale;
use Encode;
$Term::ReadPassword::USE_STARS = 1;
my $bullet = encode(locale => "\N{BLACK CIRCLE}");
$Term::ReadPassword::STAR_STRING = $bullet eq '?' ? '*' : $bullet;
$pass = read_password(join " ", @ARGV);
if (defined($pass)) {
print "$pass\n";
} else {
exit(1);
}
运行export SUDO_ASKPASS=/path/to/that-script
或Path askpass /path/to/that-script
添加/etc/sudo.conf
并sudo
运行-A
:
$ sudo -A id -u
[sudo] password for you: ●●●●●●●●●●●●●●
0
请注意,据我所知,Term::ReadPassword 不支持多字节。如果在该提示下输入多字节字符,则将显示与该字符中的字节数一样多的项目符号。不过它应该仍然可以正常工作。