带有密码提示的 /etc/network/if-up.d 脚本

带有密码提示的 /etc/network/if-up.d 脚本

我想要一个脚本,当建立特定接口上行链路(大学局域网)时可以让我登录。

问题是我不想将密码硬编码到脚本中。有没有办法在脚本中提示输入密码if-up.d

例如,这不起作用,因为没有设置 DISPLAY 变量(设置一个没有帮助):

# create temp file to store password
tmp=`tempfile`

xterm -e /bin/bash -c "read -s -p \"Enter password: \" mypassword; echo \"\$mypassword\" > $tmp"

# read in password and delete temp file
mypassword=`cat $tmp`
rm -f $tmp
echo $mypassword

答案1

好的,所以您主要要做两件事:在启动桌面会话时添加提示,询问您的密码,并在每次再次打开界面时进行提示。

因此,你需要使用 Upstart会议作业以保证启动 X 会话并设置 DISPLAY 变量。会话作业进入~/.config/upstart/,而不是/etc/init/,并且它们以非 root 用户身份运行。您需要确保您的桌面会话实际上使用 Upstart 作为会话初始化。Unity 肯定会这样做,其他一些 Ubuntu 版本也是如此。只需运行initctl list-sessions以查看是否有任何 Upstart 会话启动即可。

无论如何,这里是要使用的会话作业:

# change IFACE= to whatever interface it is, unless it is all interfaces.
# in that case just omit the IFACE=
start on desktop-start or :sys:net-device-up IFACE=eth99

task

# put your script in this location
exec /usr/local/bin/unilan-password

此外,您很可能希望使用 Zenity 而不是 xterm 来提示用户。可以使用以下命令代替 bash 命令:

mypassword=$(zenity --entry --text="Enter University LAN password" --hide-text)

command如果您无法识别$(command),那么它是一种比 更好的命令替换方法。zenity当然,请确保您已安装该软件包。

相关内容