Как запустить значок.desktop из sudo

Я создал значок на рабочем столе для gddccontrol, но чтобы запустить его, мне нужно запустить его из sudo. Есть ли способ запустить команду с иконки на рабочем столе, как,

sudo -pPASSWORD gddccontrol

поэтому он не будет спрашивать у меня пароль в терминале?

Я просто хочу щелкнуть и запустить его с разрешениями sudo.

[Desktop Entry]
Type=Application
Name=GDDCControl
Terminal=false
Comment=gddccontrol ddccontrol
Exec=sudo -pPASSWORD gddccontrol
Icon=~/Pictures/10429.png

Когда я запускаю иконку из терминала с помощью следующей команды Exec, она работает хорошо, но не работает в Launcher:(

Exec=echo mypasswd | sudo -S gddccontrol

3 ответа

Решение

НИКОГДА не используйте свой пароль, хранящийся в .desktop файл. Это ужасно небезопасно.

Кроме того, вы не можете запускать сложные команды в .desktop файл просто так, но это уже другая тема.

Что делать

У вас есть несколько вариантов:

  1. добавлять gddccontrol к sudoers файл, как объяснено, например, здесь. Это можно сделать, если вы уверены, что приложение не может быть использовано для совершения злонамеренных действий.

    Тогда используйте

    Exec=sudo gddccontrol
    

    в Exec=-линия

  2. Другим вариантом является замена Exec= строка:

    Exec=gksu gddccontrol
    

    В этом случае после нажатия на значок вам будет предложено ввести пароль через графический интерфейс.
    Возможно, вам нужно установить gksu:

    sudo apt-get install gksu
    

С помощью sudo по определению подскажет запрос пароля. Что вам нужно сделать, это предоставить разрешения на выполнение для вашего пользователя. Я не уверен, где находится эта программа, но ради этого ответа, давайте предположим, что это /usr/bin/,

В терминале запустите это:

sudo chmod o+x /usr/bin/gddccontrol

Эта команда предоставляет другим пользователям (таким как вы) право на запуск программы без разрешения.

Затем в файле.desktop просто используйте:

Exec=gddccontrol

Откройте свой терминал и запустите эту команду

cd /usr/share/applications

После этого запустите эту команду

sudo gedit application.desktop

и скопируйте и вставьте следующее для x64-битных машин

#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Icon[en_US]=/opt/lampp/htdocs/favicon.ico
Exec=sudo /opt/lampp/manager-linux-x64.run
Comment[en_US]=start xampp manager
Name[en_US]=xampp
Name=xampp
Comment= start xampp application

Заменить

Exec=sudo /opt/lampp/manager-linux-x64.run

с путем к приложению, которое вы хотите запустить, в моем случае это менеджер xampp

Заменить

Icon[en_US]=/opt/lampp/htdocs/favicon.ico

с путем к значку вашего приложения.

Сохраните файл и запустите эту команду ниже

sudo visudo

Добавьте следующую строку в конец вашего файла

<your-username> ALL = NOPASSWD: <path of application>

Введите свое имя пользователя и вставьте путь к своему приложению без угловых скобок, подобных этой

nelson ALL = NOPASSWD: /opt/lampp/manager-linux-x64.run

Сохраните файл и проверьте, что он там есть.

Надеюсь это поможет.

Я против жесткого кодирования пароля в текстовом файле, поэтому я могу придумать два возможных решения:

  1. сделайте общесистемное редактирование, чтобы каждая команда, выданная вашим пользователем с помощью sudo, запускалась как суперпользователь без запроса пароля. Вы можете узнать, как в этом ответе

  2. Если ты не хочешь sudo команды должны всегда выполняться с подсказкой пароля, рекомендуется использовать gksu перед вашей командой, чтобы запросить пароль в графическом окне, а не записывать ваш необработанный пароль в файл.

Другие вопросы по тегам