| Summary: | Невозможно запустить графическое приложение в Wayland | ||
|---|---|---|---|
| Product: | Sisyphus | Reporter: | Sergey V Turchin <zerg> |
| Component: | SimplePAMApps | Assignee: | placeholder <placeholder> |
| Status: | NEW --- | QA Contact: | qa-sisyphus |
| Severity: | normal | ||
| Priority: | P5 | CC: | antohami, arseny, glebfm, ldv, placeholder, rider, shaba, vt |
| Version: | unstable | ||
| Hardware: | x86_64 | ||
| OS: | Linux | ||
| See Also: | https://bugzilla.altlinux.org/show_bug.cgi?id=53655 | ||
| Bug Depends on: | |||
| Bug Blocks: | 55611 | ||
|
Description
Sergey V Turchin
2025-03-13 14:36:55 MSK
2 Shaba: не знаешь, systemd ставит пользователю при логине $XDG_RUNTIME_DIR? (Ответ для Sergey V Turchin на комментарий #1) > 2 Shaba: не знаешь, systemd ставит пользователю при логине $XDG_RUNTIME_DIR? Отвечу сам. Да, pam_systemd устанавливает $XDG_RUNTIME_DIR при логине. Следовательно, `su -l` тоже должен По схожему алгоритму с https://git.altlinux.org/gears/s/systemd.git?p=systemd.git;a=blob;f=src/login/pam_systemd.c Там прямо xsprintf(rt, "/run/user/"UID_FMT, ur->uid); , за исключением проверок в validate_runtime_directory() Открывать сайты в веб-браузере от root кажется мне странной затеей. Проблема в том, что alterator-browser-qt запущен от root. Если была бы возможность запускать его от пользователя, а уже доступ к контенту он получал через авторизацию, как то происходит в веб-браузере, то всё было бы хорошо. Добиться того, чтобы XDG_RUNTIME_DIR правильно выставлялся в suминус-окружении — хорошая задача, давно пора это сделать. Но это не так-то просто сделать правильно :(
Этот каталог, как известно, создаётся по открытии первого сеанса некоторого uid и рекурсивно удаляется по закрытии последнего сеанса этого uid. То есть, все, кто порождают сеансы или иные окружения, где выставляется XDG_RUNTIME_DIR, должны обеспечить, что он есть. `su -l` от некоторого усера может стать первым процессом от этого усера с момента загрузки (это не про xdg-open из инсталлятора, а вообще), и в этом случае просто назначить XDG_RUNTIME_DIR нельзя, нужно обеспечить его создание кем-то привилегированным. Можно и забить, но это тогда сильноскрытое, трудноотлаживаемое ветвление между двумя ситуациями — каталог то есть, то нет, и со стороны кажется, будто от балды. Лучше одно поведение ("обеспечивать наличие"), чем два (у su и у всех остальных).
Системдоиды решили, что можно этого добиться, везде включая модуль pam_systemd, который всё сделает — создаст сеанс в logind (и потом закроет сеанс в logind), тот запустит (и потом остановит) user@%i.service, у последнего зависимость "BindsTo=user-runtime-dir@%i.service After=user-runtime-dir@%i.service".
Если мы не хотим включать pam_systemd в su-памсервис (can o' worms), тогда надо синхронизироваться с этим циклом.
(In reply to Антон Мидюков from comment #4) > Открывать сайты в веб-браузере от root кажется мне странной затеей. > Проблема в том, что alterator-browser-qt запущен от root. Если была бы > возможность запускать его от пользователя, а уже доступ к контенту он > получал через авторизацию, как то происходит в веб-браузере, то всё было бы > хорошо. +1. Говорят, альтератор-2 решит эту проблему?.. GUI-окна не будут работать от root?.. (In reply to Sergey V Turchin from comment #0) > Мне необходима работоспособность от root команды > # su -l -c 'xdg-open http://www.ru' CURRENTUSER > В X-ах оно работает. Можете ли вы полагаться на то, что запущен systemd? Если да, то может подойти вот такой рецепт: # systemd-run -M "$USER"@.host --user -- xdg-open http://www.ru Ещё -G по вкусу, см. help и man-страницу. > Для Wayland не хватает пары моментов: > * Проброса $WAYLAND_DISPLAY, что одной строкой делается, как с $DISPLAY > * Выставления $XDG_RUNTIME_DIR. Тут не знаю, как правильно взять, чтоб не > разошлось ни с кем. > > Т.е. при пробросе $WAYLAND_DISPLAY команда > # su -l -c 'XDG_RUNTIME_DIR=/run/user/CURRENTUSER_UID xdg-open > http://www.ru' CURRENTUSER > работает упешно. > > P.S. > Я пользуюсь, чтоб из-под root в acc можно было ссылки открывать в > пользовательском браузере, а не в root-овом. Например, в alterator-notes. (Ответ для Антон Мидюков на комментарий #4) > Открывать сайты в веб-браузере от root кажется мне странной затеей. Мне тоже, поэтому запускаю от пользователя. (Ответ для Антон Мидюков на комментарий #4) > всё было бы хорошо. И так всё хорошо, за исключением недоработки в su. (Ответ для Arseny Maslennikov на комментарий #6) > Говорят, альтератор-2 решит эту проблему? Эту -- нет. Свою такую же -- да. (Ответ для Sergey V Turchin на комментарий #8) > (Ответ для Антон Мидюков на комментарий #4) > > Открывать сайты в веб-браузере от root кажется мне странной затеей. > Мне тоже, поэтому запускаю от пользователя. То есть в предлагаемом решении в комментарии 3 будет запускаться от пользователя? (Ответ для Arseny Maslennikov на комментарий #7) > Можете ли вы полагаться на то, что запущен systemd? Видимо, придётся. (Ответ для Антон Мидюков на комментарий #11) > То есть в предлагаемом решении в комментарии 3 будет запускаться от > пользователя? Я о ином тут не писал. (Ответ для Sergey V Turchin на комментарий #0) > при пробросе $WAYLAND_DISPLAY команда > # su -l -c 'XDG_RUNTIME_DIR=/run/user/CURRENTUSER_UID xdg-open http://www.ru' CURRENTUSER > работает упешно. (Ответ для Sergey V Turchin на комментарий #14) > (Ответ для Sergey V Turchin на комментарий #0) > > при пробросе $WAYLAND_DISPLAY команда > > # su -l -c 'XDG_RUNTIME_DIR=/run/user/CURRENTUSER_UID xdg-open http://www.ru' CURRENTUSER > > работает упешно. Кстати, а в чём проблема пробрасывать $WAYLAND_DISPLAY? У alterator-browser, запущенном под root, эта переменна задана. (Ответ для Антон Мидюков на комментарий #15) > Кстати, а в чём проблема пробрасывать $WAYLAND_DISPLAY? У alterator-browser, > запущенном под root, эта переменна задана. (Ответ для Sergey V Turchin на комментарий #0) > * Проброса $WAYLAND_DISPLAY, что одной строкой делается, как с $DISPLAY |