LINUX.ORG.RU

Как продолжить запись экрана после переключения виртуального терминала в X11?

 , , , ,


0

1

Условно, есть пользователи Пупа и Лупа. Под Пупой личные файлы, а под Лупой рабочие.

Вот записывается мной под Пупой экран посредством OBS-studio, но резко возникает необходимость что-то быстро сделать по работе.

Я переключаюсь на другой виртуальный терминал (Ctrl+Alt+F2), ввожу имя пользователя, пароль, startx, выхожу из пользователя и переключаюсь обратно (Ctrl+Alt+F1).

В записи только 10 минут черного экрана.

В процессе гуглежа было найдено что-то про multiseat, но у меня же только одна пара экран/клавиатура. Тут только один физический пользователь - я.

Linux/UNIX же многопользовательская система, нет?


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

Что происходит, когда ты переключаешь консоль и от другого пользователя стартуешь новый сеанс? Старый блокируется до возвращения в него. Процессы пользователя, в принципе продолжают работать, но далеко не все. Это делается их соображений безопасности. И клавиатура и мышь от того сеанса отключается, иначе кому они должны посылать события?

Мультисит же для одновременной работы двух независимых пользователей. Они могут одновременно работать Но это означает две клавиатуры и две мыши. Потому что ты должен использовать только свою, а не тырить у соседа.

Запись же obs происходит с активным сеансом, к которому у первого пользователя нет доступа в момент переключения на второй. По моему всё логично. На багтрекере у них, по моему, даже объяснения были. Искать лень.

PcheloBiaka
()
Ответ на: комментарий от Merionet

У меня только одна видюха. То есть когда я переключился под Лупу, у меня в буфере будет экран Лупы, а не Пупы.

Цель - продолжить запись экрана Пупы, пока что-то делается под Лупой.

Вы предлагаете добавить виртуальную видюху и записывать ее?

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

Описываемая вами проблема возникает из-за XUnmapWindow, насколько я понимаю. То же самое происходит при попытке записать окно находясь в другом виртуальном рабочем столе.

У меня вопрос именно про запись экрана. Насколько я знаю, проблема не OBS-специфичная.

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

Ты просто не понимаешь как это работает

Исходники мной прочитаны не были, да.

и что ты делаешь.

Использую нескольких пользователей для разграничения прав между приложениями.

Все в соответствии с моделью безопасности ОС (пользователь/группа). Или мной что-то делается не так?

Процессы пользователя, в принципе продолжают работать, но далеко не все.

Да, так как X11, скотина такая, блокируется, видимо. Все то, что не зависит от X11 у меня спокойно работает.

А если попросить logind, то он даже не будет убивать мои процессы после выхода, как и должно быть ИМХО.

Это делается их соображений безопасности.

Из соображения безопасности процессы запускаются с разными uid/gid.

То, что некоторые процессы блокируются - это кривизна рук. Либо моих, либо разработчика.

И клавиатура и мышь от того сеанса отключается, иначе кому они должны посылать события?

Дык мне и не события клавиатуры/мыши записать надо. Тут, вроде, вопросов нет. Кому нужно - есть флаг -sharevts.

Мультисит же для одновременной работы двух независимых пользователей.

Физических пользователей, да, но мне это не интересно.

Они могут одновременно работать

Возможно войти и запускать процессы от нескольких пользователей, да. Это не что-то специфичное для multiseat, в моем понимании.

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

В мануале написано:

A multi-session system allows multiple user sessions on the same seat at the same time.

Что подразумевает, что доступ есть, нет?

По моему всё логично.

То, что устройства ввода блокируются - да. То, что framebuffer в которое приложение рисует пиксели внезапно исчезает - нет.

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

X-server работает с драйвером видеокарты. Два Х-сервера не могут одновременно работать с одной видеокартой. Поэтому только один Х-сервер может быть активным, остальные блокируются.

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

xnest еще есть. можно через него «на работу ходить», а грабить экран обс-ом с реальной видюхи, ибо виртуальная будет, скорее всего, без ускорения.

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

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

В смысле, а в иксах нельзя писать окно, находясь в другом виртуальном рабочем столе? Вот это поворот. У тебя KDE?

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

Тебе не логично потому что ты не понимаешь, что многопользовательская система создавалась не для записи игрух в то время как пользуешься другим сеансом. Сеанс вообще блокируется. Не нравится? Настраивай, пиши патчи для своей системы. Никому кроме тебя такое поведение не нужно, очевидно. Игрухи даже перестают рендерить если окно игры не активно, а ты аж сеанс хочешь менять.

PcheloBiaka
()

Записывать то что не показывается сейчас на экране (точнее, на «экране» видеокарты) - нельзя. Можно сделать виртуальный экран (Xvncserver), но на/с него нельзя переключаться, можно только запустить прогу изначально в нём. Можно смотреть его содержимое vnc-клиентом, и если там нет 3д-графики и подобного - даже не сильно заметишь проседание скорости. Виртуальные терминалы которые ctrl-alt-Fn - не экраны с точки зрения графики.

Теоретически, наверно, можно накодить в иксах возможность рисовать (в оперативную память) и выключенные терминалы тоже, но там придётся учитывать ситуацию когда кто-то хочет пользоваться прямым рисованием всяких 3д сцен - мне кажется оно вообще не рассчитано на виртуальное рисование.

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

Старый блокируется до возвращения в него. Процессы пользователя, в принципе продолжают работать, но далеко не все. Это делается их соображений безопасности.

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

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

Иксы, зная что этот буфер нигде не нарисован, экономят процессорные ресурсы и не просят проги рисовать свои окна. Точно так же они не просят ничего рисовать у прог окна которых свёрнуты или спрятаны сзади за кем-то другим. А в случае если рисование не тупое, возможно там и технические проблемы с тем как задействовать видеокарту для рисования всякого 3д не на экран (но тут я уже подробностей не знаю).

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

что ты записываешь?

В данном конкретном случае браузер (огнелис), так что наверное можно как-то извернуться через headless, но меня интересует общий случай (произвольный X11 клиент).

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

Нет, это ядро иксов. Оконный менеджер наверно может послать окну фейковое событие «перерисуйся», но даже если оно начнёт что-то рисовать, иксы скорее всего эту картинку просто выкинут, а не сохранят где-то.

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

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

Я не понимаю, как работает непривилегированный Xorg?

Исходя из моего понимания, logind служит медиатором доступа X11-сервера к реальному железу (seat0).

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

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

Нет, это ядро иксов.

Было только что проверено под i3:

Точно так же они не просят ничего рисовать у прог окна которых свёрнуты или спрятаны сзади за кем-то другим.

Нет. Композитор, насколько я вижу, не влияет.

но наверно не на экран а в буфер своего окна.

Разве клиенты X11 по умолчанию так не делают?

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

logind никак в иксами не связан, это системг-шная приблуда, единственная заметная функция которой - удалить оставшиеся процессы юзера после того как он разлогинится. Ну и список активных логинов он где-то хранит.

К железу иксы обращаются либо сами либо через ядро (драйвер видеокарты). В современности обычно второе, ну и без рута только в таком виде можно.

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

В KWin - сейчас не знаю.

В i3 странная тема: unmap вызывается для всех окон при переключении рабочего стола и они отмирают.

Однако, если запустить Xephyr и включить запись экрана Xephyr, то он рисуется вне зависимости от переключения рабочих столов.

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

Нет. Композитор, насколько я вижу, не влияет.

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

Разве клиенты X11 по умолчанию так не делают?

Нет. По умолчанию всё клиентское рисование происходит сразу в буфер экрана, при этом Xserver разумеется следит чтобы всё что за рамками окна или что закрыто другими окнами - проигнорировалось. Клиент, на своё усмотрение, может вместо этого рисовать вё у себя в процессе локально, а серверу слать уже куски готовой картинки, но это просто один из вариантов. Серверу без разницы: вместо «нарисуй линию/квадрат/круг, напиши там текст, сделай заливку» ему приходит команда «выведи этот битмап», это такой же рисовальный примитив как и векторные функции выше.

Современные тулкиты вроде бы пользуются именно вторым способом, но залезать внутрь клиентской проги и искать где она хранит буфер своего окна придётся индивидуально для каждой проги. И не факт, что этот буфер у неё вообще есть и что, если он есть, в нём будет полноценная готовая картинка, всё зависит от проги (например всякое опенгл вполне вероятно будет рисоваться в другом месте). Прога тоже, даже если рисует в свой буфер, может следить за сворачиваниями и прочими невидимостями и прекращать бесполезное рисование в эти промежутки времени.

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

Xephyr это виртуальный экран. Он всегда есть, да, но если ты запустил прогу в нём - она всегда будет в нём, наружу ты её не вытащишь без её перезапуска, и с 3д рисованием могут быть особенности.

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

А ты что проверял, тупо запись экрана? Я не про неё писал, а про то что внутри композитора где-то могут иметься в наличии все нужные картинки. Как их из него вытащить - другой вопрос. Возможно, можно попробовать записывать конкретное окно, а не область экрана. Но вообще всё зависит от того как композитор устроен.

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

В мануале написано:

Xephyr is a kdrive server that outputs to a window

Мной ожидалось, что окно, в которое рисует Xephyr, словит unmap и перестанет рисоваться при смене виртуального рабочего стола в i3.

Не знаю специфичное ли это поведение конкретно для i3.

Все остальные окна так отмирают, насколько я вижу.

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

UPD.

Нет. Композитор, насколько я вижу, не влияет.

Нет, если клиент не активен - он действительно не рисуется, но композитор ни на что не влияет.

Окно Xephyr, видимо, исключение.

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

Да вроде бы не один раз на ЛОРе это обсуждали и (насколько помню) сошлись во мнении, что в Иксах «рисуется» только то, что «отображается» сейчас.

В вайланде с подобным как? (интересно)

anonymous
()