Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Layer от Май 19, 2011, 06:18



Название: запуск внешних скриптов с правами рута
Отправлено: Layer от Май 19, 2011, 06:18
есть у меня пара sh скриптов, для остановки и запуска mysql сервера соответсвенно:
Код
Bash
sudo /etc/init.d/mysql stop
 
Код
Bash
sudo /etc/init.d/mysql start
 

без sudo оно не работает.

запускаю я их из приложения qt таким образом:
Код
C++ (Qt)
   QString program = "bash";
   QStringList arguments;
   arguments << "-c" << currentDir + "/start.sh";
   int res = sh.execute(program, arguments);
...................
 

если само приложение запускается из под рута, то всё нормально работает (за исключением того что стиль контролов другой)
если же компилю обычно из под юзера, то при попытке запуска скрипта в консоли сборки выдает законно:  bash: ..../start.sh: "Отказано в доступе".

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

и второй вопрос, я программно заменяю файл my.cnf в директории /etc/mysql/
это тоже возможно только тогда, когда программа запущена из под рута?


Название: Re: запуск внешних скриптов с правами рута
Отправлено: Mysterious от Май 19, 2011, 06:35
Чтобы разрешить юзеру запускать скрипты необходимо настроить sudo.
Используй команду visudo.


Название: Re: запуск внешних скриптов с правами рута
Отправлено: Пантер от Май 19, 2011, 07:17
kdesudo или gksudo используй.


Название: Re: запуск внешних скриптов с правами рута
Отправлено: Layer от Май 19, 2011, 08:54
Чтобы разрешить юзеру запускать скрипты необходимо настроить sudo.
Используй команду visudo.


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


Название: Re: запуск внешних скриптов с правами рута
Отправлено: GreatSnake от Май 19, 2011, 09:23
Скачай xdg-su (http://cgit.freedesktop.org/xdg/xdg-utils/plain/scripts/xdg-su) скрипт и "носи" его со своим приложением.
Он сам найдёт нужную gui sudo-запускалку. В случае, если ничего не найдёт подходящего, то запустит xterm с login-om.


Название: Re: запуск внешних скриптов с правами рута
Отправлено: Пантер от Май 19, 2011, 09:25
Скачай xdg-su (http://cgit.freedesktop.org/xdg/xdg-utils/plain/scripts/xdg-su) скрипт и "носи" его со своим приложением.
Он сам найдёт нужную gui sudo-запускалку. В случае, если ничего не найдёт подходящего, то запустит xterm с login-om.
Спасибо за хорошее решение. Добавляю в закладки.


Название: Re: запуск внешних скриптов с правами рута
Отправлено: Layer от Май 19, 2011, 09:40
kdesudo или gksudo используй.

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


Название: Re: запуск внешних скриптов с правами рута
Отправлено: Layer от Май 19, 2011, 09:43
Скачай xdg-su (http://cgit.freedesktop.org/xdg/xdg-utils/plain/scripts/xdg-su) скрипт и "носи" его со своим приложением.
Он сам найдёт нужную gui sudo-запускалку. В случае, если ничего не найдёт подходящего, то запустит xterm с login-om.

Спасибо, попробую!


Название: Re: запуск внешних скриптов с правами рута
Отправлено: GreatSnake от Май 19, 2011, 09:46
Цитировать
попробовал, но кнопки всё равно другого стиля, нежели если приложение запускать обычным способом.
как можно обойти?
Естественно kdesudo использует кде-шную тему, gksudo гномовскую, а твоя апп qt-шную.
И как ты это хочешь обойти?
Пиши свою sudo-запускалку. Только, если не знаешь псевдо-терминалы, сам не напишешь.


Название: Re: запуск внешних скриптов с правами рута
Отправлено: Blackwanderer от Май 19, 2011, 11:32
попробовал, но кнопки всё равно другого стиля, нежели если приложение запускать обычным способом.
как можно обойти?
Потому что настройки внешнего вида берутся уже не для текущего пользователя, а для рута (он ведь тоже пользователь и у него своя домашняя папка со своими настройками). А поскольку настройки внешнего вида (иконки, темы для окон и виджетов и т.д.) для рута навряд ли задавались, то они берутся по умолчанию.


Название: Re: запуск внешних скриптов с правами рута
Отправлено: GreatSnake от Май 19, 2011, 11:37
Цитировать
Потому что настройки внешнего вида берутся уже не для текущего пользователя, а для рута (он ведь тоже пользователь и у него своя домашняя папка со своими настройками). А поскольку настройки внешнего вида (иконки, темы для окон и виджетов и т.д.) для рута навряд ли задавались, то они берутся по умолчанию.
На самом деле непонятно про какие кнопки ТС говорит - про кнопки kdesudo или gksudo или кнопки своей апп запущенной через sudo.


Название: Re: запуск внешних скриптов с правами рута
Отправлено: Layer от Май 19, 2011, 11:52
GreatSnake, кнопки своей app запущенной из под sudo :)

еще вопрос интересует, когда мы запускаем приложение в проекте - рабочим каталогом является путь к проекту, так?
а когда запускаю руками из консоли то currentPath() возвращает домашнюю папку, хотя лежит в той же директории проекта, это почему происходит?

или лан, заюзаю applicationFilePath...


Название: Re: запуск внешних скриптов с правами рута
Отправлено: wolfut от Май 31, 2011, 10:46
В первом примере есть строчка

int res = sh.execute(program, arguments);


sh - экземпляр какого класса? подскажите пожалуйста


Название: Re: запуск внешних скриптов с правами рута
Отправлено: GreatSnake от Май 31, 2011, 10:51
Цитата: wolfut
sh - экземпляр какого класса? подскажите пожалуйста
QProcess

PS. неужто так сложно в ассистенте в указателе вбить 'execute'  ???