LINUX.ORG.RU

Сообщения aleksey_tulinov

 

Юнити которое мы заслужили

Void, bspwm, xcompmgr, отдельные части юнити 7, ЛОР в браузере, аниме на обоях. Кажется забыл добавить на скриншот поняшек, ну может в другой раз.

Вроде ничего так получилось, и bspwm очень крутой. Разработчик bspwm ну очень хорошо разбирается в теме. Я сделал одно ишью на гитхабе с вопросом и он по моему описанию сходу выявил проблему в приложении. Я попытался эту проблему устранить, по локти погрузился в гномо-зависимости Nux'а (GUI-тулкит который используется в Unity 7), «всё понял», остановился, помыл руки с мылом и забил.

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

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

Исходники барахла (GPL v3): https://github.com/alekseyt/unity7-git/tree/void

>>> Просмотр (1600x900, 549 Kb)

 , ,

aleksey_tulinov
()

Void Linux

Ну вот например.

Что изменилось с прошлого раза: я попробовал десяточку и мне понравилось: 3D в интерфейсе, вот это всё, сразу такое ощущение появилось как будто 21 век уже наступил. К сожалению в WSL не заработал Void, что-то Майксософт не допилило ещё. Пока Майкрософт допиливает, решил попробовать собрать чего-то такого же в технологическом плане, только на линуксе.

В прошлый раз я оставил убунтовский компиз и выбросил всё остальное, теперь решил зайти с другой стороны: попробовать оставить всё остальное, но выбросить компиз. Выяснилось, что по крайней мере лаунчер и дэш могут работать без компиза и без патчей в Gtk, худ вероятно тоже, но я уже забил.

Ещё скриншоты на реальном железе в разных комбинациях: https://imgur.com/a/wGrfc

Сверху-вниз:

  • Xfce4/Xfwm4 (без компиза)
  • MATE/compiz-reloaded
  • Openbox/xcompmgr

Я проверял на WM: Xfce4/MATE/Openbox/Cinnamon, на композиторах: встроенный в Xfwm4/встроенный в MATE/compiz-reloaded/xcompmgr/compton - работает довольно бодренько. Может быть на чём-то ещё взлетит, но мне надоело перебирать. Основное требование к менеджеру окон - поддержка Xshape input и работающий композитинг. В AwesomeWM/Fluxbox/i3 по причине отсутствия поддержки Xshape не работает например. Думаю возможна альтернативная реализация без необходимости Xshape, но я сделал так: полноэкранный оверлей который рендерит себя в прозрачный фреймбуфер, ввод от мышки должен проходить сквозь его прозрачную часть и попадать в окна которые находятся под ним.

На самом деле конечно не всё радужно, Юнити интегрируется с наутилусом, компизом и собственными компонентами, про Thunar оно ничего не знает и не может в нём открыть корзину с лаунчера, некоторые десктопные эффекты типа expose или блюра делались компизом, экспозе пока что пришлось уйти, блюр теперь надо делать компизом снаружи приложения, а не изнутри, ещё кое-что отвалилось по мелочи и не по мелочи. Есть определённое количество технического долга в виде зависимостей на гном и гтк, или например есть зависимости на systemd и upstart, на upstart опциональная, а на systemd обязательная, но при желании можно обойтись без них обоих, я например просто закоментировал эти части. В общем есть определённое количество мусора, но не так чтобы ужас-ужас всё пропало. Наоборот, оно завелось и взлетело на удивление легко и просто, всего 64 комита я сделал чтобы получить то, что на скриншоте, по-моему это не много, как для проекта такого размера.

Ну в общем, как наверное и так понятно из скриншотов, технические проблемы Юнити о которых можно прочитать в интернете мягко говоря сильно преувеличены. Я не могу вспомнить ещё один десктопный шелл который мог бы работать на Openbox с xcompmgr также как на MATE с compiz-reloaded, по-моему это настолько далеко от технических проблем, насколько это вообще может быть от них далеко. Про iPhone X говорят, что он минимум на 2,5 года опережает конкурентов, а с момента релиза Юнити прошло более 7 лет, какое ещё DE может делать аппаратно-ускореную графику с полной поддержкой 3D в интерфейсе в 2к18? Ну наверное что-нибудь на Qt, да? Вот есть Юнити 8 на Qt/QML:

// Rotating 3 times at top/bottom because that increases the perspective.
// This is a hack, but as QML does not support real 3D coordinates
// getting a higher perspective can only be done by a hack. This is the most
// readable/understandable one I could come up with.
...
// Because rotating it 3 times moves it more to the front/back, i.e. it gets
// bigger/smaller and we need a scale to compensate that again.

Тут написано, что QML не поддерживает настоящий 3D и вместо того чтобы повернуть изображение на определённый угол, оно три раза поворачивается на меньший угол, затем исправляется искажение возникающее при такой операции. Ну вот, Юнити 8 на Qt/QML, дамы и господа. Но вейленд-то сейчас придёт и точно спасёт нас от всех ужасов десктопного линукса, да?

Я когда проверял поддержку нескольких мониторов, столкнулся с такой проблемой: существующие менеджеры окон не могут зарезервировать место в определённых частях экрана. Оказалось, что это известная проблема иксов, единственное, что меня смутило - это то, что в убунтовском компизе это уже 7 лет работает. Я почитал, что про это пишет разработчик kwin и понял, что то, что он предлагает в моём случае работать не будет.

Что он предлагает: а) создать окно; б) установить тип окна в «панель»; в) настроить как это окно должно взаимодействовать с другими окнами (перекрывать/не перекрывать/т.д.); а kwin уже зарезервирует место под панель «где надо». Как работает то, что на скриншоте: 1) создаётся одно окно которое разворачивается на весь экран; 2) резервируется область экрана меньшая чем размер окна; 3) в некоторых случаях надо зарезервировать несколько областей в разных частях экрана. Как 1), 2) и 3) выразить через а), б) и в)?

Короче света в конце туннеля не видно, да и это наверное не туннель.

И вообще я думаю, что Марк Шаттлворт прав, что выбросил и Юнити 7, и Юнити 8, и дисплейный сервер Мир вероятно тоже не нужен. Свою роль в повышении популярности убунты это всё уже сыграло, зачем дальше тянуть резину?

Да и если так подумать, то зачем это всё на линуксе? Композитинг по Портеру/Даффу? Анимация с помощью трёхмерной призмы вращающейся вокруг своей оси? Да не, бред какой-то. Любой менеджер окон может открыть и терминал и браузер, а что ещё нужно? Fade-in - это тоже хорошая анимация, а когда окошко как бы выезжает слева-направо - это просто взрыв мозга, я и не знал, что так можно.

И расстраиваться конечно не из-за чего. Ещё лет через 7-15 десктопный линукс наверняка достигнет уровня Юнити и год линукса на десктопах обязательно настанет, только попозже, но обязательно настанет, к гадалке не ходи. А пока что вот вам артефакты древней цивилизации:

Исходники того, что на скриншоте (GPL v3): https://github.com/alekseyt/unity7/tree/void

Шаблон для сборки под Void: https://github.com/alekseyt/void-packages-private/tree/master/unity7-chromatic

>>> Просмотр (1920x1080, 614 Kb)

 , ,

aleksey_tulinov
()

Void Linux

Решил попробовать Void Linux в виртуалке. Заинтересовал тем, что в качестве инита используется runit.

Хорошая система инциализации, работает сама: создал симлинк в /var/service - runit сам поднял сервис, удалил симлинк - runit потушил сервис. Я с ним забыл, что сервисы надо стартовать или останавливать, оно просто работает. Загружается очень быстро даже в виртуалке, работает как волшебство, впечатления исключительно положительные.

Void имеет свой пакетный менеджер который называется XBPS. Рецепты для сборки пакетов - это обычные shell-скрипты в которых можно творить любое колдунство для того чтобы собрать нужный пакет. Я пробовал только x86_64, но в репах есть ещё пакеты для альтернативной libc (musl) и 64-битного ARM'а.

XBPS контролирует зависимости на уровне динамических библиотек и сам определяет зависимости пакетов. Например если приложение линкуется с libstdc++, то XBPS это определит и сам поставит зависимость. Этот эффект распространяется вниз по дереву пакетов и в итоге рантайм автоматически получается целостным и без дырок. В случае с приложениями на питоне или чём-то таком, можно руками дописать нужное в depends.

На скриншоте XFCE с несколькими модификациями. Изначально я пытался собрать Unity 7 и мне удалось собрать несколько компонентов: compiz, nux, dash, hud, launcher, которые даже запускались, но, разумеется, нормально не работали без остальных зависимостей. Я посмотрел на это всё и решил оставить только компиз от юнити, для, так сказать, эффекта присутствия, а остальное попытаться заменить тем, что есть в пакетах или на гитхабе.

Менеджер окон - compiz 0.9, декоратор - emerald. Фича с отключением заголовков развёрнутых окон в компизе делается легко, декорации отключаются для окон в таком состоянии:

!(state=maxvert & state=maxhorz)
Для того чтобы на верхней панели появлялись кнопки для развёрнутых окон, нужен плюгин xfce4-windowck-plugin. Из коробки он работает неправильно, поэтому его пришлось пропатчить (ссылка на патчи внизу). Для глобального меню используется vala-panel-appmenu.

В качестве дока - Plank, для запуска приложений - Albert. Albert - это ещё одно очень годное приложение которое позволяет делать поиск по системе: по приложениям, по файлам, или выполнить арифметическое действие как в калькуляторе и т.д. То есть это что-то типа dash из Unity, но сильно проще (или сложнее, кому как), это скорее Alfred из MacOS.

Зацените блюр в терминале и доке. Круто?

А по-моему выглядит как Windows 98 с доком и глобальным меню. Технологически это откат на десятилетие назад, примерно так это всё и выглядело в 2006 году когда компиз впервые зарелизили. Я для скриншота выбрал приложения поприличнее, а если полазить по разным окнам, то повылазят гномо-приложения на Gtk3 и произойдёт апгрейд с Windows 98 до Windows ME.

Никаких glBegin(), текстур, шейдеров, шейдеров поверх шейдеров. Компиз иногда добавляет на рабочий стол объём и спецэффекты, но всё остальное рисуется в плоский canvas, не хватает только какого-нибудь пиксель-арта для завершения картины.

Видите индикатор раскладки клавиатуры на котором написано «us» маленькими буквами жирным шрифтом? У меня от него глаза вытекают. И это ещё уменьшенный, а можно в настройках сделать покрупнее. А видите рядом с ним баг в отрисовке иконки NetwokManager'а? Теперь вы не можете это развидеть. А знаете ли вы, что XFCE сортирует иконки в трее по имени приложения? Зачем? ¯\_(ツ)_/¯ Но иконка NetworkManager'а при этом оказывается то рядом с индикатором раскладки, то между ними вклинивается иконка xchat'а. Я сделал ещё один патч для xfce4-panel который отключает сортировку иконок...

Это всё можно было бы запатчить, имея достаточный заряд энтузиазма, но я забил. Каждый компонент который видно на скриншоте как-то багует или работает криво. Каждый багует по-своему, например compiz-reloaded падает в одних случаях, но стабильно работает там где падает компиз из юнити, компиз из юнити в свою очередь стабильно работает там где падает compiz-reloaded. Индикатор раскладки клавиатуры был таким же десять лет назад, видимо это всех устраивает, раз за десять лет никто это не исправил. На гитхабе в issues xfce4-windowck-plugin оригинальных разработчиков не видно, какие-то люди обсуждают свои проблемы и говорят, что неплохо было бы портировать плюгин на Gtk 3, но не похоже, чтобы они его портировали. Людей поддерживающих compiz-reloaded я не стал беспокоить, у них и без меня проблем хватает. Разработчики XFCE, я так подозреваю, тоже заняты портом на Gtk 3, а потом будет Gtk 4, Gtk 5, Gtk 6. В общем доделывать патчи я не стал.

В принципе этим можно пользоваться с минимумом патчей если вы готовы терпеть небольшую кучку косяков разного размера и вам не жалко ваших глаз. Я пользуюсь, прямо в виртуалке, но я пользуюсь в основном консолью и браузером. Или можно ещё держать свой убунту-стайл патчсет и накладывать его во время сборки пакетов, но это плохая примета. Патчи, или скорее хаки, которые я сделал, находятся здесь: https://github.com/alekseyt/void-packages, надеюсь будет кому-нибудь полезно, но наверное нет.

Для себя я сделал такие выводы:

1. Void Linux - это прекрасно. Говорю без всякой иронии. Это был как глоток чистого воздуха, ИМХО именно таким и должен быть линукс. Однозначно буду пользоваться.

2. На десктопе надо использовать MacOS или десяточку с WSL. Хочется верить, что открытые исходники в конечном итоге всё равно победят, но я думаю, что эти открытые исходники ещё не написаны.

>>> Просмотр (1920x1080, 373 Kb)

 , ,

aleksey_tulinov
()

RSS подписка на новые темы