AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1067064
Accepted
Joe
Joe
Asked: 2018-08-21 00:00:11 +0800 CST2018-08-21 00:00:11 +0800 CST 2018-08-21 00:00:11 +0800 CST

现在 kdesudo 消失了,如何在 kubuntu 18.04 上的 bash 中运行图形 sudo?

  • 772

sudoTL;DR:从 shell 脚本中生成图形的正确新方法是什么?

挥舞:

我刚刚从 kubuntu 16.04 升级到 18.04,我正在做正常的分类。

kdesudo在 18.04 中消失(未维护)。

我在带有 GUI i/o 的 bash 脚本中经常使用它。

一些帖子说使用kdesu- 这似乎很奇怪。我似乎记得它与有效用户或类似的东西混淆了。

那没有安装在我的PATH中。

我在

bigbird@sananda:~/pq$ ls -l /etc/alternatives/kdesu
rwxrwxrwx 1 root root 41 Aug 19 03:23 /etc/alternatives/kdesu -> 
/usr/lib/kde4/libexec/kdesu-distrib/kdesu

仍然说kde4。

我试过了sudo -A ls

它说

bigbird@sananda:~$ sudo -A ls
sudo: no askpass program specified, try setting SUDO_ASKPASS

我在几个圈子里看着ksshaskpassand ssh-askpass,但都说不打算直接调用它们。

我没有对ssh.

对于以普通用户身份执行几乎所有操作然后以 root 身份运行一两个命令的 bash 脚本,我需要它。这些脚本通常从没有打开终端窗口的桌面图标启动(我不需要或不想要一个。)它们经常使用yad(喜欢zenity或kdialog)与用户交互。

gui command-line kubuntu bash sudo
  • 4 4 个回答
  • 5040 Views

4 个回答

  • Voted
  1. Best Answer
    nobody special
    2018-08-21T04:24:13+08:002018-08-21T04:24:13+08:00

    正如您所发现的,您可以将 -A 选项与 sudo 一起使用,但您需要一种 gui 方法来为 sudo 提供密码。

    您可以随心所欲地编写这样的工具,只要它将密码传递回标准输出上的 sudo。我使用了很久以前有人向我建议的一个简单的解决方案,它使用了 kdialog,并且像所有简单的解决方案一样,从那时起它一直是我的首选。

    所以为自己创建一个简单的 kdialog 脚本,比如这个

        #!/bin/bash
        kdialog --password "Password required to proceed"
    

    现在你像这样使用 sudo

        #!/bin/bash
        export SUDO_ASKPASS=<path to your kdialog script>
        sudo -A foo
    

    如果您没有 kde,您当然可以为您的 gui 密码提供程序使用任何您想要的语言

    编辑:绕过 sudo passwd_tries 的解决方案

    这样您就可以只要求输入一次密码(如您所愿),您可以在脚本中的变量中捕获密码,然后使用 -S 开关将该变量直接传递给 sudo 命令。

    这样做的好处是它忽略了 sudo passwd_tries 规则,并且仍然需要交互式密码输入,因此密码不会存储在脚本中。

    PASSWD=$(kdialog --password "sudo password required")
    echo $PASSWD | sudo -S foo
    

    如果脚本中不需要多个 sudo 命令,也可以直接在一行上执行,像这样

    echo $(kdialog --password "sudo password required") | sudo -S foo
    

    当然,如果您想在所有脚本中使用标准的 kdialog 提示符,您可以使用我们之前讨论过的您自己的 kdialog 脚本来代替此处使用的 kdialog。

    从我的 POV 绕过 sudo 的 passwd_tries 的问题是,如果您输入错误的密码,您的脚本将继续处理 sudo 命令之后的任何命令,因此如果 sudo 提升命令对脚本的成功至关重要,那么您就会遇到问题。

    需要注意的是,来自 kdialog(或诸如 zenity 之类的替代方法)的密码是写在标准输出上的,这是我之前应该提到的,因此任何捕获 PID 标准输出的人都会看到您的密码。但是,您系统上的任何黑客都会做的远不止这些。

    • 6
  2. papampi
    2018-08-22T00:42:17+08:002018-08-22T00:42:17+08:00

    你有没有尝试过pkexec

    pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY gedit
    
    • 3
  3. Elder Geek
    2018-08-24T12:02:36+08:002018-08-24T12:02:36+08:00

    不仅是 kdesudo,而且也 gksu被弃用了。这些变化至少有点烦人。看来我们现在打算采用的方法是使用admin://前缀,例如,如果您kdesudo gedit /etc/default/grub现在习惯使用前缀,那么gedit admin:///etc/default/grub如果我放弃 16.04 以获得“新的和改进的”版本,这肯定需要一些时间来适应。

    另一种可能的解决方案是简单地在终端中启动脚本。

    来源:https ://www.linuxupprising.com/2018/04/gksu-removed-from-ubuntu-heres.html

    • 1
  4. Joe
    2018-08-21T23:08:44+08:002018-08-21T23:08:44+08:00

    我刚刚在这里找到了一些答案。

    它的要点是:

    目前,一种解决方法是查找kdesu系统上的安装位置

    你可以做的

    ls -l /etc/alternatives/kdesu
    

    然后为kdesudoto$HOME/.bashrc或者,如果你使用它, 为 to 添加一个别名$HOME/.bash_aliases。

    别名是

    ## Resurect kdesudo - this will probably fail eventually
    alias kdesudo='/usr/lib/kde4/libexec/kdesu-distrib/kdesu'
    

    确保将路径调整为kdesu您在上述步骤中找到的路径。

    这不适用于 KDE 下的某些程序,因为

    KDE 开发人员正在开发一种 polkit 路由,以允许其他应用程序临时提升权限,就像他们已经为 Kate 所做的那样。——灰极客

    当他们这样做时,他们会禁用直接提升,因为(如果它工作正常)你不再需要它了。当程序需要执行特权操作时,它只要求输入密码。这将如何在脚本中发挥作用还有待观察。

    • 0

相关问题

  • 如何从命令行判断机器是否需要重新启动?

  • iptables 的图形用户界面?

  • 文件权限如何工作?文件权限用户和组

  • 如何在 Vim 中启用全彩支持?

  • 从共享 NFS /home 到完整的 LDAP 解决方案

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve