我想要一个脚本,当建立特定接口上行链路(大学局域网)时可以让我登录。
问题是我不想将密码硬编码到脚本中。有没有办法在脚本中提示输入密码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
当然,请确保您已安装该软件包。