更改终端密码回显字符

更改终端密码回显字符

在 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-scriptPath askpass /path/to/that-script添加/etc/sudo.confsudo运行-A

$ sudo -A id -u
[sudo] password for you: ●●●●●●●●●●●●●●
0

请注意,据我所知,Term::ReadPassword 不支持多字节。如果在该提示下输入多字节字符,则将显示与该字符中的字节数一样多的项目符号。不过它应该仍然可以正常工作。

相关内容