Ubuntu Unity 16.10‘sudo:没有 tty 存在并且没有指定 askpass 程序’

Ubuntu Unity 16.10‘sudo:没有 tty 存在并且没有指定 askpass 程序’

我编写了一个脚本,用于在工作和家庭之间切换时设置/取消代理设置。该脚本运行完美,现在我想每次登录时自动运行它,因此我将其放入我的 .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

但是不输入密码也可以吗?

相关内容