Ну с заглядыванием в сорцы я пока решил повременить создав тут топик, вдруг кто быстро пояснит что это как-то очень легко делается, или наоборот принципиально невозможно.
Есть два пути: xshm (захват всего экрана), и xcomposite (захват отдельного окна). Первый довольно тормозной, но на современном железе это не имеет значение.
Я правильно понимаю, что он(xshm) берёт битмап который рисуется в видимую область корневого окна?
Есть какой то способ исключить заданное окно из этого битмапа? Что бы оно рисовалось на экране, но при этом не попадало в суммарную картинку корневого окна? Звучит конечно корявенько…
Есть какой то способ исключить заданное окно из этого битмапа? Что бы оно рисовалось на экране, но при этом не попадало в суммарную картинку корневого окна?
Да, можно. Но для этого на XServer нужно патчи наложить.
Интересуюсь с целью получения возможности прятать окно во время показа.
Окошки можно прятать (куда прятать и как возвращать?) при помощи оконных менеджеров или сторонних инструментов. Я вообще с самого начала и из последующих объяснений не понял, при чем тут захват экрана и как он связан с показыванием окошка.
А так: окошки прятать и показывать можно, захватывать экран можно.
Ну, один способ тебе уже сказали: убрать окно на другой экран. Я могу еще предложить из простых вариантов без второго дисплея: - отодвинуть окно куда-нибудь вбок, а скринкастить только выбранную область экрана, в которую твой чат не попадает.
Еще есть вариант, но я пока сразу не знаю, что и как получится, поэтому он умозрительный. Запустить вложенный X-Server (Xephyr), в нем запустить необходимый сетап для скринкаста и скринкастить только его содержимое (а это просто окно), а на основном сервере запустить свой чат. Он в стрим не попадет.
С Xephyr есть проблема только - там (пока) нет аппаратного ускорения и будет программный 3D-рендеринг.
Ну тогда еще вариант: запустить просто второй X-Server на другом VT и оттуда скринкастить. Но тогда чтобы глядеть чат, надо будет VT переключать на другой сервер. В случае с Xephyr чат может быть перед глазами где-то и можно просто его поднимать и посматривать. Никто этого не увидит в эфире.
Ты про x11 дисплей? И вот чё, мне каждое окошко в отдельном зефире запускать? Нее, это не наш метод, тем более интеграция через d-bus и прочее будет так себе работать скорее всего.
К сожалению, мне даже тестовый код нужно осиливать, т.е. патчи эти я если и применю, то не скоро. Будем почитать, спасибо, но времени это потребует явно больше чем я рассчитывал изначально.
Нужно транслировать именно через браузер? Если катит обычная трансляция на одной из популярных стриминговых платформ, то можно взять OBS и настроить сцену так, чтобы показывалось только нужное
Сдаётся мне, вариант с Xephyr не взлетит, даже проверять лень. Ведь окно которое рисует эмуляцию X11 всё равно останется частью корневого окна. Ой походу придётся патчи анона читать :(
Так нет же! Ты скринкаст делай именно Xephyr. Укажи его софту, который скринкастит, и все. А чат СНАРУЖИ! Я же и написал, что сетап, который скринкастишь именно в Xephyr пускай.
Я просто выдумываю варианты, чтобы можно было как-то сделать существующими средствами, не прибегая к программированию и написанию какого-то хитрого софта. А есть ли вообще такая возможность, надо подумать.
Можешь на человечьем кратенько суть изменений и чего почитать по теме кроме мана по api x11?
Тут дело простое, я бы сказал совсем нехитрое. В X'ах есть фреймфорк безопасности XACE, поверх него написаны два раcширения: Security и XSelinux.
Для клиента Security имеется 4 параметра: authId, время жизни, trusted (доверенный или нет) и такое legacy как group, осколок от расширения Application Group. Сейчас сходу и не найдешь, что оно делало. Короче, в Security добавляется то, что клиенты из разных групп — недоверенные друг другу. Если приглядеться, большая часть патча состоит в том, что window manager добавляется в исключения — ему доступ разрешен, да.
Второй патч. В X'ах есть функция с незатейливым именем — XaceCensorImage, ага. Пробегаемся по всему дереву дереву окон, проверяем доступ клиента к ним, окно видимое и доступа к нему у клиента нет — исключаем его из картинки.
Третий патч, просто добавляется цензурирование картинки для для CopyArea (не лучшим способом, можно улучшить); для GetImage вызов XaceCensorImage уже есть.
В тестовом примере клиент генерирует себе аутентификацию на 600 секунд с группой под номером 14. Ни ввод послушать, ни снять изображение с него не выйдет — в полноэкранном приложении на его месте будет черный прямоугольник. Для произвольного приложения: перед запуском «особенного» клиента с помощью xauth (прочтешь его man) генерирутся доверенная аутентификация с ненулевым group-id. После запуска приложения не забываем возвращать положение в исходное!
Идею понял, с тем что из патча сходу сообразил - матчится, спасибо за пояснения. Возникает резонный вопрос - если есть фрейморк и понятие «расширение», возможно есть какая то дырка что бы можно было сделать плагин к ванильному решению?
Возникает резонный вопрос - если есть фрейморк и понятие «расширение», возможно есть какая то дырка что бы можно было сделать плагин к ванильному решению?
Плагин к ванильному решению в X'ах — это и есть расширение. Тебе нужно определиться том, что ты хочешь конкретно. Тут ползователь тусовался, kirk_johnson, он высказывал свои мысли и пожелания. Было бы неплохо услышать его мнение.
А насчет прозвучавших конкретных хотелок — эти патчи просто решают высказанные проблемы грубой силой.
И да, в отличии от меня (я — бсдюк), у тебя есть еще XSelinux. Не знаю просто, насколько для тебя важна твоя проблема, сколько ты готов положить на нее сил. Я задался целью, чтобы приложение могло защитить свой ввод-вывод в X'ах, выкатил решение. Если что непонятно в коде (по мне, он тривиален), спрашивай.
Сил много не готов положить. За poc - спасибо, но я видимо максимум потрачу ещё какое-то время на поиск менее интрузивного решения.
Тебе нужно определиться том, что ты хочешь конкретно
Конкретно - хочу задавать список приложений/окон которым можно попадать в захват экрана и которым нельзя в простом декларативном конфиге. Имхо это оценила бы и более широкая аудитория, странно, что готового решения до сих пор нет.
Конкретно - хочу задавать список приложений/окон которым можно попадать в захват экрана и которым нельзя в простом декларативном конфиге.
Там типа того и есть. Если разберешься, люди скажут тебе огромное человеческое спасибо. На вид — похоже на пыталище. Патчи на Security выглядят попроще.
Сил много не готов положить.
Тут даже нормальное ТЗ будет выглядеть как немалый труд, но если сделаешь грамотно — опять же тебе будет огромное человеческое спасибо.
Если я запилю требования к интерфейсу, готов ли ты поресёрчить неинтрузивный подход(что бы можно было ванильную сборку расширить сторонним приложением/библиотекой)?
А что физически из себя представляет расширение X11?
костыли на каждый чих, которые некоторые называют крутой расширяемостью исков. Популярные костыли потом описывают в спеках и принимают в майнстрим а непопулярные так и волочатся в виде патчей. В общем как обычный опенсорсный проект развивается :)