私は初めてdmenuを使います。sudo
dmenu権限を必要とするプログラムを実行しようとしています。私はフォローしましたこのリンク。だから私のフォルダには次の./dpass
スクリプトがあります。bin
#!/bin/bash
dmenu -p "$1" <&- && echo
私も次のコマンドを実行しました。
$ export SUDO_ASKPASS=/home/username/bin/dpass
bin
これで、次のフォルダがありますshutdown
。
#!/bin/bash
sudo -A shutdown -h now
dmenuで実行しようとするとパスワードを尋ねられますが、問題はパスワードを入力してもパスワードが隠されないことです。誰でも私のパスワードを見ることができるので、これは本当に安全ではないと思います。 dmenuでパスワードを隠す方法はありますか?
答え1
&& echo
通話が終わったら削除してみてくださいdmenu
。
#!/bin/bash
dmenu -p "$1" <&-
これにより、ユーザー入力エコーが無効になりますdmenu
。この方法は、次のタイトルのブログ投稿で説明されています。dメニューでパスワードを入力してください。
$ cat dpass #! /bin/sh # shellcheck disable=2046 caller="$(ps -o comm= -p $(ps -o ppid= -p $$))" prompt="${1:-[$caller]}" promptfg=black promptbg=red hidden=white font="Liberation Sans-20:Bold" dmenu -p "$prompt" -fn "$font" \ -nf "$hidden" -nb "$hidden" -sf "$promptfg" -sb "$promptbg" <&-
- パラメータが渡されない場合は、呼び出し側アプリケーションにプロンプト(赤い部分)が設定されます。したがって、ユーザーは常に一種のプロンプトを受け取ります。
&& echo
他のパスワードハンドラと連携するように末尾のステートメントを削除します。
答え2
からインスピレーションを受けるサーキットブレーカーチーム、私はstpromptというスクリプトを書いた。
#!/bin/bash
prompt="$1"
answer=$(st -o "-" -g 100x5 -c st-prompt sh -c "echo -n '$prompt: '; read -s ANSWER; echo \$ANSWER")
echo "${answer#*: }" | tr -d '\r'
スクリプトはユーザーにメッセージを表示し、入力を非表示にして応答を出力します。
特定のケースでは、このスクリプトを次のように使用できます。
sudopgm==$(echo "${options[@]}" | dmenu -i -p 'Programs that need sudo: ')
SUDO_ASKPASS=$(stprompt "sudo pass") sudo -A $sudopgm
stprompt
私のアプリケーションでそれを使用する方法の詳細ドットファイルを読む、そして私の例の使い方dmenu_ibmicmdスクリプト。
Fuseteamが言ったように、stはターミナルです。お好みの端末に交換可能です。
答え3
解決策は、dterm
次のスクリプトを実行することです。
#!/bin/bash
command="$@";st -- $command
これにより、端末を起動するとパスワードの入力を求めるdterm sudo command
ポップアップが表示されます。
追加ボーナスとして、dmenuを介してターミナルアプリケーションを実行することもできます。
ps stは端末であり、-eまたは--引数を受け入れる端末に置き換えることができます。
ppsはdmenuを介してスクリプトを実行できると仮定します。