grebenkoff 0 12 октября, 2021 Опубликовано 12 октября, 2021 · Жалоба Приветствую, уважаемые! Использую плату Raspberry Pi3, на Qt.5.15.11, в QT Creatore написал тестовое приложение на основе QWidget - кнопочка, EditBox, TextLabel, короче, хелловорлд. Компилировал на ПК в Ubuntu с помощью cross-compile toolchain. На Raspberry крутится Linux на основе Debian с графическим интерфейсом LXDE. Qt скомпилировано c поддержкой OpenGL. При запусках моей программки обнаружил следующее: 1. Если запустить программу от имени пользователя (Pi), то текст с клавиатуры можно вводить и по русски и по английски, переключение языка ввода нормально работает. Но если запустить от имени администратора (sudo), то печатает только английскими буквами и на нажатие комбинации переключения языка ввода (у меня Alt+Shift),программа не реагирует. 2. Внешний облик программы также зависит от того, запущена она с правами пользователя или с помощью sudo. Подскажите пожалуйста, как настроить ввод русских букв при запуске программы от имени администратора? А также, от чего зависит внешний вид программы Qt (разеры окна, вид рамки, высота шрифтов...), при запуске от имени различных пользователей? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 12 октября, 2021 Опубликовано 12 октября, 2021 · Жалоба 3 часа назад, grebenkoff сказал: Подскажите пожалуйста, как настроить ввод русских букв при запуске программы от имени администратора? Найти - какая комбинация клавиш установлена для переключения языка в профиле администратора? Видимо она другая чем у вас. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy_Em 1 12 октября, 2021 Опубликовано 12 октября, 2021 (изменено) · Жалоба Небось, у рута LC_ALL=C, как и положено? Кстати, запускать графический софт от рута нельзя ни в коем случае! А внешний вид зависит от культяпной темы, в хомяке смотрите, что у вас там понастроено (~/.qt/qtrc, кажись - я к культяпкам крайне негативно отношусь)… Изменено 12 октября, 2021 пользователем Eddy_Em Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
grebenkoff 0 13 октября, 2021 Опубликовано 13 октября, 2021 · Жалоба 18 hours ago, jcxz said: Найти - какая комбинация клавиш установлена для переключения языка в профиле администратора? Видимо она другая чем у вас. А где бы это посмотреть? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
grebenkoff 0 14 октября, 2021 Опубликовано 14 октября, 2021 · Жалоба Нашел ответ вот тут: https://askubuntu.com/questions/872792/what-is-xdg-runtime-dir В двух словах, запуская приложение как пользователь и как root, мы запускаем его с разным окружением. Чтобы программа запущенная от имени root работала с окружением пользователя, нужно это делать так: sudo -E MyApp Да, и еще, я знаю, что запуская свою программу от имени администратора я поступаю очень и очень плохо. Но на данный момент, чтобы получить доступ к регистрам управления GPIO Raspberry Pi я использую библиотеку bcm2835, а она может добыть нужные адреса только когда работает как root. Может кто-нибудь знает, как обойти данную проблему? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 217 14 октября, 2021 Опубликовано 14 октября, 2021 · Жалоба 12 минут назад, grebenkoff сказал: Может кто-нибудь знает, как обойти данную проблему? Внимательно изучите документацию на библиотеку, там это описано: Цитата If the library runs with any other effective UID (ie not root), then bcm2835_init() will attempt to open /dev/gpiomem, and, if successful, will only permit GPIO operations. In particular, bcm2835_spi_begin() and bcm2835_i2c_begin() will return false and all other non-gpio operations may fail silently or crash. If your program needs acccess to /dev/mem but not as root, and if you have the libcap-dev package installed on the target, you can compile this library to use libcap2 so that it tests whether the exceutable has the cap_sys_rawio capability, and therefore permission to access /dev/mem. To enable this ability, uncomment the #define BCM2835_HAVE_LIBCAP in bcm2835.h or -DBCM2835_HAVE_LIBCAP on your compiler command line. After your program has been compiled: sudo setcap cap_sys_rawio+ep *myprogname* Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
grebenkoff 0 14 октября, 2021 Опубликовано 14 октября, 2021 · Жалоба 22 minutes ago, makc said: Внимательно изучите документацию на библиотеку, там это описано: Спасибо, попробую! А ведь я уже читал это, но почему-то, при первом прочтении упустил из виду, что нужно сначала установить libcap-dev. Видимо, для меня мало просто читать документацию, ее еще надо понимать )))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy_Em 1 14 октября, 2021 Опубликовано 14 октября, 2021 · Жалоба Есть же и через /sys/ интерфейс возможность доступа к GPIO. Понятно, что это намного медленней, чем через DMA, но если сотни килогерц не нужны, вполне оправдано. Была какая-то библиотечка, wiredpi, что ли... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tarbal 4 15 октября, 2021 Опубликовано 15 октября, 2021 · Жалоба Когда надо управлять не из root теми ресурсами которые только root может я пишу демона с ограниченными возможностями. Ну чтобы только те команды, которые нужны для работы. Скажем, если надо писать по нескольким адресам, то только по этим адресам он и может писать. Запискаю демона из root, а с демоном уже из своей программы разговариваю. По pipe или socket. Можно через файл, но немного кривовато получается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
grebenkoff 0 16 октября, 2021 Опубликовано 16 октября, 2021 · Жалоба On 10/14/2021 at 10:15 PM, Eddy_Em said: Есть же и через /sys/ интерфейс возможность доступа к GPIO. Понятно, что это намного медленней, чем через DMA, но если сотни килогерц не нужны, вполне оправдано. Была какая-то библиотечка, wiredpi, что ли... Спасибо за совет. Я начинающий линуксоид, поэтому подскажите пожалуйста, где найти пример кода, в котором можно посмотреть как это сделать? Скорость не проблема, в моем случае нужно поднять ножку, подержать 1 секунду, опустить и т.п. On 10/15/2021 at 5:54 AM, Tarbal said: Когда надо управлять не из root теми ресурсами которые только root может я пишу демона с ограниченными возможностями. Ну чтобы только те команды, которые нужны для работы. Скажем, если надо писать по нескольким адресам, то только по этим адресам он и может писать. Запискаю демона из root, а с демоном уже из своей программы разговариваю. По pipe или socket. Можно через файл, но немного кривовато получается. Благодарю за ответ, а можете скинуть какой-нибудь пример или ссылку дать, где про это с примерами кода написано? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy_Em 1 17 октября, 2021 Опубликовано 17 октября, 2021 · Жалоба wiringpi.com Google: "raspberry pi sysfs interface" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tarbal 4 18 октября, 2021 Опубликовано 18 октября, 2021 · Жалоба On 10/16/2021 at 9:41 AM, grebenkoff said: Благодарю за ответ, а можете скинуть какой-нибудь пример или ссылку дать, где про это с примерами кода написано? Это не совсем ответ на ваш вопрос. Это про то как из простого пользователя добираться до ресурсов доступных администратору. О чем писали, ответившие вам. Конфигурация программы зависит от нескольких факторов, которые отличаются для админа и пользователя. В самой апликации может стоять переключение и разная реакция. Есть настройки, которые индивидуальны для каждого пользователя. Они в основном устанавливаются в .profile и .bashrc (Точка перед именем обязательна. Так в Линуксе делают скрытые файлы.) Это набор переменных оболочки. Команда printenv покажет вам их. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy_Em 1 18 октября, 2021 Опубликовано 18 октября, 2021 · Жалоба 4 hours ago, Tarbal said: Это набор переменных оболочки. За внешний вид отвечают настройки в директориях ~/.qt и ~./config. У ТС проблема с переключением локали. Здесь явно не передается ENV от пользователя к руту. Поэтому рутовская настройка локали (LC_MESSAGES и т.п.), если она — C, POSIX или en_EN, не позволяет менять язык при переключении (хоткей ни от каких настроек не зависит, т.к. он — "общекутешный". Если у рута локаль прописана в /root/.bashrc, то никак это изменить не получится (сразу после логина хоть с su -l, хоть с sudo -E этот файл читается). Могут быть и другие "приколы". Я, честно говоря, никогда не пробовал от рута запускать иксовые приложения, так что однозначно сказать не могу. Да, для того, чтобы работать с DMA, необязательно от рута утилиты запускать! Можно сделать эдакий "прокси", установить ему SUID-бит, да гонять от обычного пользователя. Открыли локальный сокет, записали данные - "прокси" выполнил требуемое и вернул ответ. Понятно, что сетевые службы от рута тоже некомильфо запускать, но то, что сокет локальный, спасет от доступа извне. К нему смогут подключиться лишь локально зашедшие на комп тем или иным способом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gridinp 3 8 ноября, 2021 Опубликовано 8 ноября, 2021 · Жалоба 14.10.2021 в 19:50, grebenkoff сказал: Да, и еще, я знаю, что запуская свою программу от имени администратора я поступаю очень и очень плохо. Но на данный момент, чтобы получить доступ к регистрам управления GPIO Raspberry Pi я использую библиотеку bcm2835, а она может добыть нужные адреса только когда работает как root. Может кто-нибудь знает, как обойти данную проблему? Нельзя использовать эту библиотеку в линуксе, система будет сбоить и зависать, изредка. Используйте штатное средство,- драйвер /dev/gpiochip0 через библиотеку libgpiod Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
grebenkoff 0 9 ноября, 2021 Опубликовано 9 ноября, 2021 · Жалоба 10 hours ago, gridinp said: Нельзя использовать эту библиотеку в линуксе, система будет сбоить и зависать, изредка. Используйте штатное средство,- драйвер /dev/gpiochip0 через библиотеку libgpiod Спасибо за совет! Подскажите, где можно посмотреть примеры кода с использованием этих средств? 1 minute ago, grebenkoff said: Спасибо за совет! Подскажите, где можно посмотреть примеры кода с использованием этих средств? Сам спросил, сам ответил: https://embeddedbits.org/new-linux-kernel-gpio-user-space-interface/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться