Bug 53436

Summary: Невозможно запустить графическое приложение в Wayland
Product: Sisyphus Reporter: Sergey V Turchin <zerg>
Component: SimplePAMAppsAssignee: 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
Мне необходима работоспособность от root команды
# su -l -c 'xdg-open http://www.ru' CURRENTUSER
В X-ах оно работает.

Для 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.
Comment 1 Sergey V Turchin 2025-03-14 10:07:57 MSK
2 Shaba: не знаешь, systemd ставит пользователю при логине $XDG_RUNTIME_DIR?
Comment 2 Sergey V Turchin 2025-03-17 11:02:56 MSK
(Ответ для Sergey V Turchin на комментарий #1)
> 2 Shaba: не знаешь, systemd ставит пользователю при логине $XDG_RUNTIME_DIR?
Отвечу сам. Да, pam_systemd устанавливает $XDG_RUNTIME_DIR при логине.
Comment 3 Sergey V Turchin 2025-03-17 11:07:16 MSK
Следовательно, `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()
Comment 4 Антон Мидюков 2025-08-21 16:28:42 MSK
Открывать сайты в веб-браузере от root кажется мне странной затеей.
Проблема в том, что alterator-browser-qt запущен от root. Если была бы возможность запускать его от пользователя, а уже доступ к контенту он получал через авторизацию, как то происходит в веб-браузере, то всё было бы хорошо.
Comment 5 Arseny Maslennikov 2025-08-21 19:09:45 MSK
Добиться того, чтобы 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), тогда надо синхронизироваться с этим циклом.
Comment 6 Arseny Maslennikov 2025-08-21 19:10:25 MSK
(In reply to Антон Мидюков from comment #4)
> Открывать сайты в веб-браузере от root кажется мне странной затеей.
> Проблема в том, что alterator-browser-qt запущен от root. Если была бы
> возможность запускать его от пользователя, а уже доступ к контенту он
> получал через авторизацию, как то происходит в веб-браузере, то всё было бы
> хорошо.

+1. Говорят, альтератор-2 решит эту проблему?.. GUI-окна не будут работать от root?..
Comment 7 Arseny Maslennikov 2025-08-21 19:13:52 MSK
(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.
Comment 8 Sergey V Turchin 2025-08-26 10:17:03 MSK
(Ответ для Антон Мидюков на комментарий #4)
> Открывать сайты в веб-браузере от root кажется мне странной затеей.
Мне тоже, поэтому запускаю от пользователя.
Comment 9 Sergey V Turchin 2025-08-26 10:18:04 MSK
(Ответ для Антон Мидюков на комментарий #4)
> всё было бы хорошо.
И так всё хорошо, за исключением недоработки в su.
Comment 10 Sergey V Turchin 2025-08-26 10:18:49 MSK
(Ответ для Arseny Maslennikov на комментарий #6)
> Говорят, альтератор-2 решит эту проблему?
Эту -- нет. Свою такую же -- да.
Comment 11 Антон Мидюков 2025-08-26 10:19:20 MSK
(Ответ для Sergey V Turchin на комментарий #8)
> (Ответ для Антон Мидюков на комментарий #4)
> > Открывать сайты в веб-браузере от root кажется мне странной затеей.
> Мне тоже, поэтому запускаю от пользователя.

То есть в предлагаемом решении в комментарии 3 будет запускаться от пользователя?
Comment 12 Sergey V Turchin 2025-08-26 10:20:15 MSK
(Ответ для Arseny Maslennikov на комментарий #7)
> Можете ли вы полагаться на то, что запущен systemd?
Видимо, придётся.
Comment 13 Sergey V Turchin 2025-08-26 10:20:55 MSK
(Ответ для Антон Мидюков на комментарий #11)
> То есть в предлагаемом решении в комментарии 3 будет запускаться от
> пользователя?
Я о ином тут не писал.
Comment 14 Sergey V Turchin 2025-08-26 10:22:21 MSK
(Ответ для Sergey V Turchin на комментарий #0)
> при пробросе $WAYLAND_DISPLAY команда
> # su -l -c 'XDG_RUNTIME_DIR=/run/user/CURRENTUSER_UID xdg-open http://www.ru' CURRENTUSER
> работает упешно.
Comment 15 Антон Мидюков 2025-08-26 10:30:57 MSK
(Ответ для 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, эта переменна задана.
Comment 16 Sergey V Turchin 2025-08-26 11:33:23 MSK
(Ответ для Антон Мидюков на комментарий #15)
> Кстати, а в чём проблема пробрасывать $WAYLAND_DISPLAY? У alterator-browser,
> запущенном под root, эта переменна задана.

(Ответ для Sergey V Turchin на комментарий #0)
> * Проброса $WAYLAND_DISPLAY, что одной строкой делается, как с $DISPLAY