我是 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
。此方法在标题为:的博客文章中进行了介绍:从 dmenu 输入密码。
$ 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
运行一个名为 say 的脚本:
#!/bin/bash
command="$@";st -- $command
这样当你运行时dterm sudo command
就会弹出一个终端来输入密码
作为额外的好处,您还可以通过 dmenu 运行任何终端应用程序
ps st 是一个终端,它可以替换为任何接受 -e 或 -- 参数的终端
pps 这假设您可以通过 dmenu 执行脚本