Russian Qt Forum
Ноябрь 23, 2024, 07:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: запуск внешних скриптов с правами рута  (Прочитано 9940 раз)
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/
это тоже возможно только тогда, когда программа запущена из под рута?
Записан
Mysterious
Гость
« Ответ #1 : Май 19, 2011, 06:35 »

Чтобы разрешить юзеру запускать скрипты необходимо настроить sudo.
Используй команду visudo.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #2 : Май 19, 2011, 07:17 »

kdesudo или gksudo используй.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Layer
Гость
« Ответ #3 : Май 19, 2011, 08:54 »

Чтобы разрешить юзеру запускать скрипты необходимо настроить sudo.
Используй команду visudo.


думается, у конечного пользователя на его машине это нежелательно, править sudoers.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #4 : Май 19, 2011, 09:23 »

Скачай xdg-su скрипт и "носи" его со своим приложением.
Он сам найдёт нужную gui sudo-запускалку. В случае, если ничего не найдёт подходящего, то запустит xterm с login-om.
Записан

Qt 5.11/4.8.7 (X11/Win)
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Май 19, 2011, 09:25 »

Скачай xdg-su скрипт и "носи" его со своим приложением.
Он сам найдёт нужную gui sudo-запускалку. В случае, если ничего не найдёт подходящего, то запустит xterm с login-om.
Спасибо за хорошее решение. Добавляю в закладки.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Layer
Гость
« Ответ #6 : Май 19, 2011, 09:40 »

kdesudo или gksudo используй.

попробовал, но кнопки всё равно другого стиля, нежели если приложение запускать обычным способом.
как можно обойти?
Записан
Layer
Гость
« Ответ #7 : Май 19, 2011, 09:43 »

Скачай xdg-su скрипт и "носи" его со своим приложением.
Он сам найдёт нужную gui sudo-запускалку. В случае, если ничего не найдёт подходящего, то запустит xterm с login-om.

Спасибо, попробую!
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #8 : Май 19, 2011, 09:46 »

Цитировать
попробовал, но кнопки всё равно другого стиля, нежели если приложение запускать обычным способом.
как можно обойти?
Естественно kdesudo использует кде-шную тему, gksudo гномовскую, а твоя апп qt-шную.
И как ты это хочешь обойти?
Пиши свою sudo-запускалку. Только, если не знаешь псевдо-терминалы, сам не напишешь.
Записан

Qt 5.11/4.8.7 (X11/Win)
Blackwanderer
Гость
« Ответ #9 : Май 19, 2011, 11:32 »

попробовал, но кнопки всё равно другого стиля, нежели если приложение запускать обычным способом.
как можно обойти?
Потому что настройки внешнего вида берутся уже не для текущего пользователя, а для рута (он ведь тоже пользователь и у него своя домашняя папка со своими настройками). А поскольку настройки внешнего вида (иконки, темы для окон и виджетов и т.д.) для рута навряд ли задавались, то они берутся по умолчанию.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #10 : Май 19, 2011, 11:37 »

Цитировать
Потому что настройки внешнего вида берутся уже не для текущего пользователя, а для рута (он ведь тоже пользователь и у него своя домашняя папка со своими настройками). А поскольку настройки внешнего вида (иконки, темы для окон и виджетов и т.д.) для рута навряд ли задавались, то они берутся по умолчанию.
На самом деле непонятно про какие кнопки ТС говорит - про кнопки kdesudo или gksudo или кнопки своей апп запущенной через sudo.
Записан

Qt 5.11/4.8.7 (X11/Win)
Layer
Гость
« Ответ #11 : Май 19, 2011, 11:52 »

GreatSnake, кнопки своей app запущенной из под sudo Улыбающийся

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

или лан, заюзаю applicationFilePath...
« Последнее редактирование: Май 19, 2011, 12:06 от Layer » Записан
wolfut
Гость
« Ответ #12 : Май 31, 2011, 10:46 »

В первом примере есть строчка

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


sh - экземпляр какого класса? подскажите пожалуйста
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #13 : Май 31, 2011, 10:51 »

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

PS. неужто так сложно в ассистенте в указателе вбить 'execute'  Непонимающий
Записан

Qt 5.11/4.8.7 (X11/Win)
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.088 секунд. Запросов: 23.