Можна запустити мою програму з привілеями root, використовуючи sudo
:
sudo ./MyApp
Чи можна налагодити додаток Qt за допомогою привілеїв root за допомогою QtCreator? Як я можу це зробити в системі Ubuntu?
Можна запустити мою програму з привілеями root, використовуючи sudo
:
sudo ./MyApp
Чи можна налагодити додаток Qt за допомогою привілеїв root за допомогою QtCreator? Як я можу це зробити в системі Ubuntu?
Відповіді:
Tools-> Options-> Environment
General
під **System** Group
опцією є Terminal
опція ./usr/bin/xterm -e
. Замініть його на /usr/bin/xterm -e sudo
або /usr/bin/gnome-terminal -x sudo
.Apply
і OK
кнопки .Projects
, виберіть Run
Опція. Під Run
Груповим вікном виберіть Run in Terminal
.Пам'ятайте: sudo
варіант повинен бути там
Редагувати /etc/sudoers
за допомогоюsudo visudo
Наступного разу, коли ви запустите програму, вона буде викликана в новій xterm
або gnome-terminal
з Super User Permissions та попросить кореневий пароль .
Я вирішив це, запустивши Qt Creator як root.
sudo /usr/bin/qtcreator
Тепер він отримає кореневий дозвіл програми, коли я компілюю і налагоджуватиму. Тепер можна налагодити моє додаток з привілеєм root.
Запустити це як корінь - жахлива ідея. Натомість використовуйте джерело та змусьте qtcreator використовувати sudo для запуску gdb подібним чином. Потрібно запустити qtcreator з tty та auth sudo перед запуском qtcreator або налаштувати свого користувача на sudo без паролів (не рекомендується). Я буду кодувати більш повне рішення пізніше.
Код / налагодження зайняло у мене 1-2 години без попереднього знання QT. Більшість цього часу було витрачено на очікування завершення компіляції
https://gist.github.com/ppetraki/a0080da047047ea184c6
--- qtcreator-3.0.1.orig/src/plugins/debugger/gdb/gdbprocess.cpp
+++ qtcreator-3.0.1/src/plugins/debugger/gdb/gdbprocess.cpp
@@ -59,7 +59,11 @@ QByteArray GdbProcess::readAllStandardEr
void GdbProcess::start(const QString &cmd, const QStringList &args)
{
- m_gdbProc.setCommand(cmd, Utils::QtcProcess::joinArgs(args));
+ QStringList sudoArgs;
+ sudoArgs << cmd << args;
+ QString sudoCmd = QString::fromUtf8("/usr/bin/sudo");
+
+ m_gdbProc.setCommand(sudoCmd, Utils::QtcProcess::joinArgs(sudoArgs));
m_gdbProc.start();
}
Я запустив би програму з терміналу з сервером GDB (як root), а потім з'єднався з сервером за допомогою gdb від QtCreator. Ви б почали gdbserver із чимось подібним:
$ sudo gdbserver host:2345 ./MyApp
Тут ви розміщуєте сервер з портом 2345. Ви також можете перевірити, чи дійсно ваша програма працює з UID 0.
$ sudo ps -u
Тепер у Qt Creator перейдіть налагодження -> Почати налагодження -> Приєднати до запуску сервера налагодження. Заповніть форму ... найважливішим є адреса порту та сервера. Я вибрав 127.0.0.1 і 2345. Ви можете вибрати перерву в основному, щоб перерватися на початку програми. Сервер GDB не запускає програму, поки ви не підключитесь.
Наступні дії були рекомендовані на форумі підтримки Qt:
У Qt Creator додайте віддалений пристрій Linux у меню Опції -> Пристрої. Встановіть його адресу як localhost, а користувача як root. Створіть пару ключів аутентифікації та вставте відкритий ключ до /root/.ssh/authorized_keys
. Потім клонуйте Комплект робочого столу в Опції -> Набори та встановіть пристрій для нового набору на пристрій, який ви створили на попередньому кроці.
Тепер, коли ви починаєте налагоджувати, Qt Creator повинен автоматично підключатися через ssh до localhost як root, запускати gdbserver та виконувати налагодження.
Він працює і для запуску без налагодження.
Можливо, вам слід встановити установку своєї програми на віддаленому хості, але це вже інша історія, і це робиться по-різному для Qmake та QBS.