●
아치 리눅스에서 sudo를 사용할 때 as 대신 에 비밀번호 문자를 어떻게 에코합니까 *
?
설치해서 사용 nerd-fonts
하고 있어요alacritty
터미널 에뮬레이터.
visudo를 사용하여 sudoers 파일을 수정하고 다음을 사용하여 에코 문자를 활성화했습니다.
Defaults env_reset,pwfeedback
답변1
sudo
자신만의 비밀번호 입력 루틴 에서 ,*
하드코딩되어 있다, 그러나 sudo
그래픽 명령(예: )을 포함한 외부 명령을 사용하여 비밀번호를 입력 ssh-askpass
하거나 /usr/libexec/seahorse/ssh-askpass
직접 구현할 수도 있습니다.
이제 또한 *
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는 멀티바이트를 지원하지 않습니다. 이 프롬프트에 멀티바이트 문자를 입력하면 문자에 있는 바이트 수만큼 글머리 기호가 표시됩니다. 그래도 여전히 잘 작동할 것입니다.