LINUX.ORG.RU

Запуск «Remote desktop» приложения до логина пользователя

 , ,


0

1

Значит предыстория. Пилим мы в нашей конторе, для своих внутренних конторских нужд замену тимвивер. Появилась задача запускать Замену из сервиса, так что чтобы достаточно было только включить комп и уже можно было бы подключаться. Компы на centos 7 или centos stream 8 (на этих хотим именно gnome c wayland), на обоих стоит gdm разных версий.

На centos 7 у меня прокатило просто DISPLAY=:0 /usr/local/bin/Замена.

На centos stream 8 так уже не канает. Wayland у нас хоть и поддерживается, но частично: в основном через Xwayland и немножко извращений через Dbus.

Так вот при старте системы мне вообще не понятно как оно там устроено. X сервер больше не запускается. XWayland, то есть, то его нету, хз от чего оно зависит. Если XWayland есть, то у него настроен display :1024, запустить Замену получается, но пока не удается научить Замену определять, что тут нужно юзать функции для wayland для скринкастинга. Однако после логина, все перезапускается и Замена падает так как X сервера на :1024 больше нету.

Вопрос, есть какие-то идеи куда тут можно копать? Может, то что я хочу вообще не возможно или не возможно именно с gdm или не возможно с любым dm и c wayland сессией?

Знаю что VNC сервер умеет поднимать свой X сервер, но хочется чтобы после подключения юзер видел экран логина для входа в систему. Знаю что x11vnc делает именно так как у меня получилось на centos 7, есть ли что-то что будет работать аналогично с wayland (чтобы подсмотреть реализацию)?

Объясни зачем запускать в роли сервиса из консоли, если это графическое приложени?

Добавь в автозапуск средствами используемого окружения рабочего стола.

При входе пользователя будет запускаться.

Т.е. в аналог «Автозагрузка» в Windows.

В качестве сервиса должна запускаться некоторая часть, которая не является графической, а в графической оболочке уже запускаться только клиент и собственно графическое приложение через автозапуск графической оболочки.

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

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

Тут суть в том, что приложение шарит экран на удаленку, и удаленный пользователь вводит логин и пароль и логинится в систему. После логина пользователь может взаимодействовать с этим приложением, то есть у него есть UI. Итого получается, что мне нужно таки графическое приложение. А перезапуск из не графического в графический режим потребует переинициализации подключения.

Notevill
() автор топика

Снять экран входа в систему с вейлендом так просто не получится. Тим и прочие честно пишут - обнаружена сессия вейленд. Если просто под иксами - там все просто: консольный сервис мониторит текущую сессию, находит авторизацию и запускает графический клиент, который уже снимает и передает экран.

man-from-36
()
Ответ на: комментарий от kostik87

Объясни зачем запускать в роли сервиса из консоли, если это графическое приложени?

вероятно необходим съем экрана входа в систему. ну и реализацию терминала (удаленной командной строки) имеет смысл в консольном сервисе делать

man-from-36
()
Ответ на: комментарий от kostik87

Ты явно не понимаешь проблему. У меня нет проблемы, когда запускать приложение. Мне нужно запускать его после запуска gdm. Вопрос только в том как подстроится под окружение, либо подстроить окружение чтобы приложение запускалось.

Пока понятно, что под gdm с wayland сделать это не возможно.

Notevill
() автор топика

«Экран графического логина» в gdm это gdm greeter session. Он может быть x11 based или wayland based в зависимости от настроек gdm. Он запускается от имени пользователя gdm. После логина gdm запускает пользовательский сеанс на другом vt, который может быть x11 based или wayland based в зависимости от настроек пользовательского сеанса.

iliyap ★★★★★
()
Ответ на: комментарий от iliyap

Получается для меня рабочий вариант будет настроить gdm на x11 based и разрешить только x11 based пользовательские сеансы. Я так понимаю в таком виде X сервер не перезапускается.

А вот wayland based варианте, то и wayland композитор и Xwayland перезапускаются при входе в пользовательскую сессию.

Notevill
() автор топика

А можно как-то поднять свой Xwayland инстанс, который бы существовал параллельно любому другому?

Получается мое приложение запустится поверх него, и после того как запустится пользовательская wayland сессия он останется?

Notevill
() автор топика
Ответ на: комментарий от Notevill

Ты явно не понимаешь проблему.

Это ты не понимаешь, что я тебе написал.

Если ты пишешь, что используешь GDM3, то в нём есть вот такие файлы:

/etc/gdm3/
/etc/gdm3/Init
/etc/gdm3/Init/Default
/etc/gdm3/PostLogin
/etc/gdm3/PostLogin/Default.sample
/etc/gdm3/PostSession
/etc/gdm3/PostSession/Default
/etc/gdm3/PreSession
/etc/gdm3/PreSession/Default
/etc/gdm3/Xsession
/etc/gdm3/daemon.conf

https://packages.debian.org/bookworm/amd64/gdm3/filelist

Как видишь есть скрипты

  • /etc/gdm3/Init/Default
  • /etc/gdm3/PostLogin/Default.sample
  • /etc/gdm3/Xsession

Они выполняются при запуске GDM3. Я думаю, что ты можешь дописать запуск твоей программы в скрипт /etc/gdm3/Init/Default и она будет запускаться вместе с GDM3 и ты увидишь экран входа.

Запускай через exec команда.

А лепить что-то вроде

DISPLAY=:0 /usr/local/bin/Замена.

Это немного бред.

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 1)
Ответ на: комментарий от Notevill

X11-сервер в greeter сеансе запускается от пользователя gdm на одном vt, X11-сервер в пользовательском сеансе запускается от авторизовавшегося пользователя на другом vt. Не знаю, почему ты считаешь, что для двух сеансов используется один и тот же экземпляр X11-сервера.

У меня CentOS 8, waylang greeter session, x11 user session. Переключаешься в greeter на vt1, потом обратно на vt2 в свою сессию, в списке процессов видно две сессии. Через какой-то время сессия greeter-а исчезает. Наверное gdm останавливает её когда vt теряет активность и запускает когда vt становится активным.

[iliyap@saturn ~]$ pstree -ATa 1267
gdm
  |-gdm-session-wor
  |   `-gdm-x-session --register-session --run-script startxfce4
  |       |-Xorg vt2 -displayfd 3 -auth /run/user/1000/gdm/Xauthority -nolisten tcp -background none -noreset -keeptty
  |       `-xfce4-session
  |           | ...
  |           `-xfwm4
  `-gdm-session-wor
      `-gdm-wayland-ses --register-session dbus-run-session -- gnome-session --autostart /usr/share/gdm/greeter/autostart -
          `-dbus-run-sessio -- gnome-session --autostart /usr/share/gdm/greeter/autostart --debug
              |-dbus-daemon --nofork --print-address 4 --session
              `-gnome-session-b --autostart /usr/share/gdm/greeter/autostart --debug
                  |-gnome-shell
                  |   |-Xwayland :1024 -rootless -terminate -accessx -core -auth /run/user/42/.mutter-Xwaylandauth.4YD2T1 ...
                  |   `-ibus-daemon --xim --panel disable
                  |       |-ibus-dconf
                  |       `-ibus-engine-sim
                  | ...
iliyap ★★★★★
()
Ответ на: комментарий от iliyap

Я ничего умного не нашел. Но вот в третьем абзаце написано https://wiki.gnome.org/Initiatives/Wayland/gdm что типикали X11 сервер не перезапускается. На centos 7 у меня так и работает, но возможно не везде это будет правда.

Я уже понял, что приложение с гуем при логине это плохая идея.

Notevill
() автор топика
Ответ на: комментарий от kostik87

Запускай через exec команда.

А лепить что-то вроде

DISPLAY=:0 /usr/local/bin/Замена.

Это немного бред.

Проясню немного.

У меня есть специальный сервис, который знает, когда нужно запустить приложение. Мне не нужно каждый раз когда стартует gdm, мне нужно чтобы сервис мог его запустить, когда нужно, в том числе и когда пользователь только включил комп, но не залогинился.

Notevill
() автор топика