каждый.

Я занимаюсь разработкой приложений на Qt5, но для этого требуется низкоуровневый доступ к оборудованию, и, следовательно, его необходимо выполнять с правами root. Моими целевыми операционными системами являются Debian (ARM) и Ubuntu (x86).

Проблема в том, что все приложения, которые выполняются от имени root (через sudo), используют настройки и среду root.

Мне нужно как-то заставить приложение Qt работать с той же темой и шрифтами, что и у обычного пользователя.

Можно ли как-то этого добиться? Как выполнить через сценарий оболочки с дополнительными параметрами выполнения и командами?

Вот скриншоты, чтобы показать разницу:

Приложение Qt, работающее от имени root через sudo

Приложение Qt работает как пользователь

2 ответа2

0

К сожалению, кажется, что это невозможно в более новой версии Qt на последних дистрибутивах. Проблема описана в этой ссылке для Arch, но предложенный обходной путь не работает на Ubuntu/Debian.

Но нашел обходной путь, который, вероятно, будет намного лучше, если вы хотите 100% статического проектирования (на всех машинах) в корневом приложении Qt.

Вам нужно указать пользовательскую таблицу стилей Qt и пользовательский стиль для приложения:

sudo ./QtApplication -style Adwaita -stylesheet=./stylesheet.css

Доступные для системы стили находятся в /usr /lib /x86_64-linux-gnu /qt5 /plugins /styles /. В моем случае доступны следующие стили: Adwaita, Breeze и Oxygen. Эти стили влияют только на стиль элементов пользовательского интерфейса - например, кнопок, списков, циферблатов и так далее. Чтобы применить пользовательские цвета и шрифты пользовательского интерфейса, я использовал пользовательскую таблицу стилей. Я написал свой собственный на основе этой пользовательской таблицы стилей, предназначенной для QtCreator

Не уверен, как применить значок темы, но это не имеет большого значения в моем случае.

Это заставит приложение работать с полностью индивидуально заданным дизайном, независимо от того, как настроены локальный стиль и шрифты. Может использоваться пользователем и пользователем root

0

Ваши пользовательские темы находятся в ~/.themes в вашем домашнем каталоге, где root не будет искать. Общесистемные темы всегда будут работать нормально из /usr/share/themes .

Вы можете открыть свой терминал и ввести:

sudo ln -s ~/.themes /root/.themes

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

При необходимости вы также можете сделать то же самое для параметров шрифта и значка:

sudo ln -s ~/.icons /root/.icons
sudo ln -s ~/.fonts /root/.fonts

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .