LINUX.ORG.RU

Программное выставление рут прав для GUI приложения

 , ,


0

3

Собственно, приложение должно иметь рут права, а запускать его всегда с консоли - не айс (ну или как минимум, не должно быть обязательным условием). Хотелось бы чтобы юзер вводил пасс в какое-то гуишное окошечко и если все нормально - приложению давались рут права.

Собственно, выглядеть это должно как в Synaptic или в менеджере обновлений, которые при запуске просят пароль так, как я описал выше.

Пробовал с помощью wxWidgets и функции wxShell() кидать в консоль «su», а потом пасс, но реакции никакой. И вывод тоже был пуст.

Собственно, как это можно сделать?

Вам поможет что-то вроде gksudo. Конкретный код привести не могу, но в гугле он должен быть.

Weres ★★★
()
Ответ на: комментарий от Jefail

Ну, как я понял, gksu и gksudo вызываются опять таки с терминала и там в качестве параметра (или уже в самом окошке) указывается, какая программа будет вызвана. Есть ли способ это сделать внутри какого-то приложения?

Попробовал сделать такой вот примитивный скриптик:

#! /bin/sh
gksu <имя приложения>

Однако во-первых, ничего не запускается, а во-вторых, до меня не сразу дошло, но скрипт тоже надо вызывать с консоли.

Есть, конечно, идея сделать еще одно приложение-пустышку, которое, собственно, будет вызывать gksu через wxShell(), с именем реального приложения в качестве параметра, но это, как мне кажется, уже более чем просто костыль =\

Mizantrop_LoL
() автор топика

В Qt Installer Framework что-то есть подобное. Там окошко вызывается из самой программы установки, если начинаешь ставить что-то в раздел, запись в который возможно лишь под root'ом.

EXL ★★★★★
()
Ответ на: комментарий от EXL

Не, мне и инсталятор-то не нужен. Просто программе надо доступ на запись к файлу в procfs. А без рута оно не пускает =\

Mizantrop_LoL
() автор топика
Ответ на: комментарий от Mizantrop_LoL

Ну, как я понял, gksu и gksudo вызываются опять таки с терминала

Наводящий вопрос: а как ты хочешь что-бы пользователь запускал твоё приложение? Через иконку в «пуске»? А как «иконка в пуске» запускает приложения?

MrClon ★★★★★
()
Ответ на: комментарий от MrClon

Ну типа того. Я предполагаю, там должна быть символьная ссылка (хотя точно я не знаю, как оно устроено). И если я правильно понял намек, то если в нее записать что-то типа gksudo <путь к бинарнику>, то она будет запускать таки gksudo с нужным аргументом?

Mizantrop_LoL
() автор топика
Ответ на: комментарий от Mizantrop_LoL

Символьная ссылка может ссылаться только на файл или директорию (или устройство). Параметров выхова в ней быть не может.
То что ты имеешь в виду называется .desktop файл. Это текстовый файл в специальном формате. описание формата есть в сети, да и просто посмотреть содержимое desktop-файлов других программ достаточно что-бы примерно понять что к чему.

MrClon ★★★★★
()
Ответ на: комментарий от MrClon

Отличненько. Благодарю. А эта вот штука, она во всех основных дистрибутивах же одинакова, да? Ну, я имею ввиду, это ж не является фишкой какого-то семейства дистрибутивов/среды рабочего стола?

Mizantrop_LoL
() автор топика
Ответ на: комментарий от Mizantrop_LoL

.desktop файлы это стандартный стандарт около-линуксовых десктопов. А вот способ получения рутовых прав может меняться в зависимости от дистрибутива и настроек. Но это уже забота не разработчика, а мэйнтейнера (который должен знать как это правильно делать в том дистрибутиве для которого он собирает софтину), от разработчика требуется только не слишком мешать мэйнтейнеру.

MrClon ★★★★★
()

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

vvn_black ★★★★★
()
Ответ на: комментарий от x905

Могу так же спросить, а чем хуже?

Как я понял ТС, рут права нужны только для записи в procfs, а зачем для этого повышать права всему приложению, включая GUI?

vvn_black ★★★★★
()
Ответ на: комментарий от vvn_black

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

например есть wireshark - ее надо запускать от рута, иначе не включить все режимы сетевой карты

конечно надо смотреть по задаче, но демон не всегда удобен

x905 ★★★★★
()
Ответ на: комментарий от Mizantrop_LoL

программе надо доступ на запись к файлу в procfs

Так зачем всю программу под рутом пускать? Из программы запустить gksu(do) your_script_to_write_to_procfs.sh «$what_to_write» «$where_to_write» и всё.

Можно пойти дальше (проще). Это «gksu(do) your_script_to_write_to_procfs.sh» заменить на элементарный SUID-бинарник. Там строк на 10-20 С'ишного кода.

anonymous
()
Ответ на: комментарий от t184256

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

x905 ★★★★★
()

DE-независимый вариант

xdg-su -c "/usr/sbin/application"

Будет вызвана программа именно от твоего DE: gksu, kdesu или другая.

ZenitharChampion ★★★★★
()
Ответ на: комментарий от x905

утверждение

например есть wireshark - ее надо запускать от рута, иначе не включить все режимы сетевой карты

ложно и наглым образом вводит в заблуждение. есть еще что обсудить?

t184256 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.