LINUX.ORG.RU

Как получить список и координаты окон на экране?

 , ,


0

2

Привет, чат!

Ни для кого не секрет, что нынешние линуксовые десктопы являются просто чудовищно ужасающе депрессивно самоубийственно скучными, и я хочу попробовать это поправить. Когда-то давно у меня на компе была прога, которая показывала милого котика на экране, и этот котик прыгал по открытым окнам, тёрся об них жоп^Wспинкой и делал прочие милые вещи. Хочу сделать аналогичную штуку под современный десктопный стек.

Интересует, в первую очередь, связка KDE+Wayland. Если есть лёгкие способы сделать это в других композиторах типа Hyprland, будет круто, но не обязательно. GNOME принципиально не рассматриваю, потому как гномерам понятие красивого чуждо. Быстрый взгляд на https://wayland.app/protocols/ ничего подходящего не даёт. Т.е. получить список окон через ext-foreign-toplevel-list-v1 можно, но вот как из этого достать координаты? Как альтернатива этому, можно сделать плагин для KWin, рассылающий ивенты с окнами и координатами через dbus (ну либо вообще свой протокол Wayland запилить), но такого хочется пока что избежать.

Wayland такого должен принципиально не уметь, за это его и любим, потому что шпионский софт типа твоего не должен знать какими приложениями я ещё пользуюсь. Это скорее всего можно сделать только на уровне композитора.

anonymous
()

За их реализации не ручаюсь, но вот существует такая тулза для кед https://github.com/jinliu/kdotool, которая вроде умеет выдавать координаты окна (в geometry) и прочие свойства.

Ещё можно посмотреть в исходники этого скрипта для Kwin https://github.com/rxappdev/RememberWindowPositions — предположу что там тоже они откуда-то подтягиваются.

Ogden
()

смотри в сторону dbus который про средства для ограниченных, чтение текста озвучивание кнопок и прочее

anonymous
()
emerge -C wayland wayland-protocols wayland-scanner
echo dev-libs/wayland >> /etc/portage/package.mask/shitland
echo dev-libs/wayland-protocols >> /etc/portage/package.mask/shitland
echo dev-util/wayland-scanner >> /etc/portage/package.mask/shitland
emerge -avuND world
mittorn ★★★★★
()
Ответ на: комментарий от Ogden

вот существует такая тулза для кед https://github.com/jinliu/kdotool

 △ ~ nix run nixpkgs#kdotool -- search                                                
{45803a94-24d5-45e1-b04b-279594f1283d}
{614809d1-f4c8-4ae0-a449-e1eb55101355}
{c64bb081-81f6-4aa0-ae85-94e9782b88bb}
{10d4c363-b912-492b-b8b6-62e8d546cad6}
{31a20b55-bf30-42b4-93ce-d40afbd7d30a}
{0ac5e502-bbab-4f6f-972e-43a062134af6}
{fc2d5d17-cdf6-45b4-9b87-1420c5644ec7}
{a7829605-4495-4aea-87e5-3b7bbea74ede}
{42db5405-e690-4e1e-a245-7e9a4a27dcfa}
{240e7431-5c2c-44a3-832f-5bd22defa812}
{7ec9df8a-3876-415e-985a-2ec93028fd00}
{5643e2e0-d1a1-4d80-99a5-c3c9206cbd9a}
{9b36200b-ac69-4da7-a6d6-19dc98193a4f}
{4b5a8822-0e09-4b9f-ba54-a90c5708cb3f}
 ▲ ~ nix run nixpkgs#kdotool -- getwindowgeometry {45803a94-24d5-45e1-b04b-279594f1283d}
Window {45803a94-24d5-45e1-b04b-279594f1283d}
  Position: 3826,1548
  Geometry: 1290x608

О! Спасибо! Буду от этого плясать.

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

https://github.com/jinliu/kdotool/blob/master/src/lib.rs#L39

блджад какой ад! Эта штука вставляет JS-код в KWin через интерфейс плагинов, чтобы выдрать оттуда информацию. Глаза мои кровоточат!

Нет, вот так я делать определённо не хочу.

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

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

Для Hyprland есть штука hyprglaze, можно там посмотреть как они это делают, там как раз по окнам ходит маскот.

A wallpaper daemon for Hyprland that renders GLSL shaders and modular effects on the background layer. The wallpaper knows what is happening above it: window geometry, focus, cursor position, and system audio all feed the shaders in real time.

После сборки запускается вот так:

./zig-out/bin/hyprglaze --effect buddy

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

Для Hyprland есть штука hyprglaze, можно там посмотреть как они это делают, там как раз по окнам ходит маскот.

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

https://github.com/slastra/hyprglaze

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

рисуется как часть заставки под окнами

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

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

Нет конечно, никто его в общее pid пространство не пустит.

Кого его? Ты каждую отдельную программу запускаешь в отдельном неймспейсе с отдельным $HOME? Потому что что-то мне кажется что нет.

С другой стороны, CVE в ядре льются ливнем. Безопасность – это вообще не про линукс.

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

Хочу сделать аналогичную штуку под современный десктопный стек.

Где и когда можно будет попробовать?

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

В wayland геометрию окон знает композитор и только он. В xx-zones есть из этого правила исключение, но только для своих окон, что для задачи явно не подходит. Следовательно, кроме как внедриться в композитор и получать инфу косвенным путём (как это сделали в kdotool), решить задачу не получится.

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

хочется по нормальному? беги обратно на иксы

@firkax

  1. устанавливаешь Xorg

У меня Xorg сломан в системе, в нём не работает ввод. Ковыряться, честно говоря, не очень хочу. Плюс, KDE выкидывают поддержку иксов, к сожалению, и мне KDE нужны больше чем протокол X11. Особой любви что к X11, что к Wayland я не питаю.

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

> Ты каждую отдельную программу запускаешь в отдельном неймспейсе с отдельным $HOME?

Почему бы и да? Разве десктопный линукс не стремится к этому?

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

Почему бы и да? Разве десктопный линукс не стремится к этому?

Нет. Десктопный линукс вообще ни к чему не стремится кроме переписывания всего подряд из гнутого в Rust и обратно. За 20 лет, что я им пользуюсь, он юзабельнее или безопаснее вообще ни разу не стал. Из улучшений можно припомнить только ситуацию с драйверами, поддержкой игр (спасибо Габену!) и изобретение декларативных атомарных дистров (хаскеллисты постарались). Если среднего юзера посадить за какую-нибудь Ubuntu 11.04, собрав в неё современные ядро и браузер, он скорее всего вообще разницы не заметит.

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

Пора плюнуть и идти на какую-то другую ОС. В принципе, если бы проблем с дровами не было, я бы так и поступил. Потому что линукс хоть и плетётся медленно, но всё его подгоняют пинками корпорасты в свой родной ад. В котором уже давно сидят ОС от Apple, Microsoft, Google. ИМХО вейланд делали специально враги (потому что механизмы безопасности так не делаются как они делают, да рандомные процессы не должны фоткать чужие окна, но должен быть прозрачный механизм кому что можно, а что нельзя).

anonymous
()
Ответ на: комментарий от yorshka

А с вялым как иначе? Вот такие костыли которые мы заслужили, тем что никто не шёл развивать иксы и вейланд. Все в инете сидели, пока полоумные вместе с вредителями вейланд придумывали.

anonymous
()

Зачем городить котиков когда уже есть xneko.

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

тем что никто не шёл развивать иксы

а чего тебе в иксах не хватает?

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

anonymous
()

Главное не забудь показывать какой-нибудь флаг вместо кота с некоторой вероятностью. :)

anonymous
()

вот как из этого достать координаты?

Их возвращает протокол ext-image-copy-capture-v1

котик

Ещё где-то была программа с понями

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

Кого его? Ты каждую отдельную программу запускаешь в отдельном неймспейсе с отдельным $HOME?

Я не анонимус, но всё же отвечу, что многие так и делают. Через bwrap или firejail, как правило. Я так запускаю не каждую программу, конечно, но большинство.

С другой стороны, CVE в ядре льются ливнем. Безопасность – это вообще не про линукс.

Взаимоисключающие предложения.

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

Отсутствия тиринга который нет нет да вылезет, отсутствия нормального RDP/VNC (те что есть умудряются лагать у компов которые в одной гигабитной локалке стоят), про проброс самих иксов по сети знаю, но оно ещё более лагучее. Перехват левым софтом всего (вейланд тут по традиции заставь дурака богу молиться обратную дурь сделал), родная рисовалка его нафиг никому не сдалась, HDR и HIGH DPI да и разные DPI на нескольких экранах. Впрочем вейланд большинства проблем решить тоже не смог, потому что всё одни и те же люди пилят.

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

а чего тебе в иксах не хватает?

Мне не хватает:

  • поддержки HDR
  • исправления бага с хоткеями (bug 865)
  • встроенного композитора (гонять туда-сюда картинки – достаточно тупая идея)
  • адекватной поддержки нескольких мониторов (идея делать общий мегаэкран с viewports – просто треш, автора Xinerama надо повесить за член на столбе и облить горячей смолой)
  • отсутствия насильного захвата фокуса всякими меню и подобными диалоговыми окнами (особенно круто когда эта прога повисла)
  • обратного переключения разрешения при завершении полноэкранной проги, которая переключила разрешение на 640x480 (старые игры любят такое)
  • просто нормальной системы привилегий (чтобы все подряд не могли переключать настройки экрана и делать херню)
  • нормального API для масштабирования вместо чехарды с DPI
  • Рабочего Safe/Recovery Mode на случай, если что-то сдохло или сломалось.

Для контраста, чего мне не хватает в Wayland:

  • Нормальных адекватных гетеросексуальных разработчиков, которые способны договориться друг с другом, а не долбиться в залупу по 5 лет, обсасывая банальнейшие вопросы типа установки окнами своих координат
  • Одного, максимум двух людей, которые бы отвечали за итоговый набор базовых протоколов, вместо самого всратого, тупого и дегенеративного комитета в истории разработки софта (см. пункт выше). Тут @firkax любит на сишных комитет ругаться, но сишники – просто заиньки и лапочки в сравнение с этими наркоманами.
  • Вагона фич, которые есть в других оконных системах, но разрабы Wayland их признали недостаточно gay-friendly (типа установки окнами своих координат, глобальных хоткеев и т.д.)
  • нормального API для масштабирования (там уже третья итерация пошла и всё равно говно сделали)
  • Одного эталонного композитора с поддержкой всех основных для десктопа протоколов, для которого можно было бы пилить плагины и на базе которого можно было бы делать рабочие среды. Делать 100500 работы с вводом или выводом или двойной буферизации – крайне тупая идея.
  • Рабочего Safe/Recovery Mode (в лялексе с этим вообще сложно)

Короче, на 2026 год у нас есть две оконные системы и обе говно. Поздравляю всех причастных! Пойду дальше про KWin API читать.

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

Любой софт, который программисты делают «для себя», по определению лютое говно. Потому что большинство программистов – поехавшие крышей аутисты.

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

Любой софт, который программисты делают «для себя», по определению лютое говно. Потому что большинство программистов – поехавшие крышей аутисты.

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

Благо, у Wayland в отличие от иксов чуть более модульная экосистема по части работы с протоколами и их расширениями, а значит на апстрим с фридесктопа можно положить большой жирный болт, что многие уже и делают. В итоге мы, конечно, когда-нибудь получим кое-как адекватно работающую оконную систему дарвинистски-эволюционным путём, но это займёт лет на 20 больше чем должно было. Что очень тупо, потому что требования к оконным системам были очень хорошо изучены очень и очень давно. Можно было просто посмотреть как сделан Quartz, скопировать его не приходя в сознание и уже было бы нормально.

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

Кого его? Ты каждую отдельную программу запускаешь в отдельном неймспейсе с отдельным $HOME? Потому что что-то мне кажется что нет.

Не каждую, а недоверенную. И конечно да - любые контейнерные форматы от flatpak до docker контейнеры это делают из коробки.

anonymous
()
Ответ на: комментарий от yorshka

Вагона фич, которые есть в других оконных системах, но разрабы Wayland их признали недостаточно gay-friendly (типа установки окнами своих координат, глобальных хоткеев и т.д.)

В том то и дело что это слишком gay-friendly фичи которых в нормальной системе быть не должно и не будет. Нормальные люди давно уже tiled wm используют, а не окна туда-сюда возюкают, какие ты там координаты собрался устанавливать, если не может быть никаких координат вне сетки, и задаётся она только wm.

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

Нормальные люди давно уже tiled wm используют

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

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

Да, я тоже иногда вижу чьи-то скрины с Flatpak. Примерно так же часто как я вижу скрины с софтом от suckless. Кто-то этим пользуется, да, но таких людей не то чтобы очень много.

Частично потому что софт в Flatpak внезапно обновляется ещё медленнее чем в некоторых дистрах (потому что разрабам в целом посрать), частично из-за идиотской системы порталов, которая часто глючит и не работает. Одно время просто открыть файл с проге из Flatpak было тем ещё квестом. Никогда не знаешь, откроется у тебя что-нибудь или нет, и поэтому очень часто встречается рекомендация по удалению Flatpak и использованию нативных установок в систему.

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

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

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

Любой софт, который программисты делают «для себя», по определению лютое говно

Мимо. Вяленд пилят маркетологи. Пожтому это говно в экспоненте. Если бы его пилили программисты - то там не было бы проблем с заданием координат окон. Но его родил дегенерат не осиливший логику икса и родил по очень простому принципу

  1. То то я не понял - надо выбросить
  2. То что я не понял и выбросил - надо красиво обосоновать двумя волшебными словами - тиринг и сесурити, особенно сесурити ибо это вызывает у манагеров бигтеха неконтролируемую эрекцию на грани приапизма.

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

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

Вяленд пилят маркетологи.

Там нет ни одного маркетолога. Разупорись.

Если бы его пилили программисты - то там не было бы проблем с заданием координат окон.

Пилят его программисты-анальники, не в состоянии отпустить какашечку с оконными координатами и прочими нужными фичами на свободу.

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

Я даже на вебе такое пытался сделать для карточек которые запоминали свою позицию (react-draggable) в Bitcoin Monitor Widget. И это оказалось нетривиально. Сгенерил много анимированных картинок аниме девушек через grok, но как-то сделать это все в приличном качестве, чтобы получилось не хуже Desktop Mate по качеству не вышло. Эта задача нетривиальная, и более сложная чем кажется на первый взгляд, по крайней мере если хочешь чтобы выглядело красиво и еще как-то реагировало и приземлялось по разному в зависимости от окна и в разных позах и в зависимости от действий на десктопе, не говоря уже о том, что даже просто вырезать их нормально с ИИшной картинки непросто. Но если нужно, могу поделиться, тем что grok нагенерил, вдруг пригодится. Да видел еще такое:

https://dokk75.itch.io/desktop-ai-companion

https://holowaifu.itch.io/holowaifu-desktop-ai-girlfriend

Вообще на itch много такого. Я хотел войти в нишу, но она уже и так переполнена.

Возможно под Wayland будет работать через xdg-desktop-portal через gdbus в gnome и kde, но это не точно, нужно проверять на каком-то минимальном коде.

anonymous_sama ★★★★★
()
Последнее исправление: anonymous_sama (всего исправлений: 2)
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария