端末パスワード エコ文字変更

端末パスワード エコ文字変更

Arch Linuxで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.confsudo実行します-A

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

私が知る限り、Term :: ReadPasswordはマルチバイトをサポートしていません。このプロンプトでマルチバイト文字を入力すると、文字内のバイト数だけ箇条書きが表示されます。それでもまだうまくいきます。

おすすめ記事