我编写了一个脚本,用于在工作和家庭之间切换时设置/取消代理设置。该脚本运行完美,现在我想每次登录时自动运行它,因此我将其放入我的 .profile 中(例如:source ~/bin/proxyscript.sh)。
当我使用 Ubuntu Gnome 时,这种方法有效,在登录时,我得到一个终端,它要求输入 sudo 密码。从版本 16.10 开始,我安装了干净版本的 Ubuntu Unity,现在登录时收到错误消息“sudo:没有 tty 存在,没有指定 askpass 程序”。
在脚本中我做了类似的事情:
sudo service cntlm stop
sudo sed ..... /etc/cntlm.conf
sudo service. cntlm start
我已经查看了 /etc/sudoers 文件并添加了以下内容,但没有得到良好的结果:
Defaults !/usr/bin/sed !requiretty
Defaults !/usr/sbin/service !requiretty
root ALL=(ALL:ALL) ALL
jeroen ALL=NOPASSWD: /bin/sed, /usr/sbin/service
我不知道现在该如何解决这个问题。有人知道吗?
谢谢。
答案1
您不应在脚本中使用。您可以在脚本中sudo
使用 policykit 代替:sudo
#!/bin/bash
pkexec env DISPLAY=:0 XAUTHORITY=/home/$USER/.Xauthority service cntlm stop & sed whatever is missing here
pkexec env DISPLAY=:0 XAUTHORITY=/home/$USER/.Xauthority service cntlm start
或者更好的是...只需先执行 sed 命令,然后重新启动服务,这样您只需输入两次密码
#!/bin/bash
pkexec env DISPLAY=:0 XAUTHORITY=/home/$USER/.Xauthority sed 'some sed stuff'
pkexec env DISPLAY=:0 XAUTHORITY=/home/$USER/.Xauthority service cntlm restart
此外,如果您仍然遇到问题,我建议从“启动应用程序”而不是从文件中运行脚本.profile
。您可以搜索“仪表板中的启动应用程序”
答案2
我改变了我的脚本并替换了sudo
:
pkexec env DISPLAY=:0 XAUTHORITY=/home/$USER/.Xauthority sed 'some sed stuff'
这有效,谢谢 mchild !
现在我得到一个弹出窗口来输入我的密码。并显示以下消息:
Authentication is needed to run '/usr/bin/env' as the super user
但是不输入密码也可以吗?