Галерея
Приключения с OpenBSD
Интересующимся: по часовой стрелке, запущены:
- qutebrowser;
- st с tmux, в нем запущены два ncmpcpp;
- emacs с vterm, в нем запущен neofetch.
Все это (и не только это) крутится на spectrwm...
Laferte Breeze Gnome
Как-то так. Сделал из Gnome торт.
Gentoo + Hyprland
Многое изменилось с момента последнего поста. Перешёл с VS Code на Neovim - из-за постоянных багов работать в редакторе стало некомфортно, а в nvim всё гораздо стабильнее и быстрее. Также сменил браузер на Zen, который по дизайну и возможностям подошёл мне лучше больше чем дефолтный firefox. Узнал о меню Kando - довольно симпатичное и удобное
Помимо этого, начал использовать Quickshell - конфигурация, которую я использую сейчас, доступна на сайте проекта.
В видео показал всё, что мог (вроде): https://gofile.io/d/UXEuYP
Catppuccin Xfce
Как-то так. Сделал из XFCE торт. Думаю, я смогу так почти с каждым WM/DE. План у меня на будущее: превратить в торт Openbox, Fluxbox, GNOME, MATE, KDE, LXQt, LXDE, i3wm, Sway, dwm и кучу других WM/DE.
NVK на Thinkpad W541
Вроде как считается, что это самый мощный ноутбук и синкпад в целом, прошиваемый на Coreboot. Проблема была только одна - это проприетарные дрова на дискретку (а она тут Nvidia, так еще и Kepler).
Мало того, что они проприетарные (обидно на таком-то ноуте), так они еще и больше не поддерживаются актуальными ядрами (вроде не выше 6.8), и не поддерживается wayland.
Но с выходом NVK ситуация улучшилась, достаточно вручную реклокнуть карту. По ощущениям, где-то 80% производительности от пропреитарного драйвера. Кто тоже хочет попробовать NVK в Debian 13 без ручной сборки - ставьте mesa из бекпортов, там лежит сборка месы с nvk (в stable репе mesa собрана насколько я понял, без nvk).
Пост специально для тех, кто говорит, что такому железу место на помойке. Смотрите, как бы оно вас не пережило)
Последний bspwm
Это последнее изображение bspwm. Я его переделал, чтобы он хоть чем-то отличался: минимализировал Polybar, чтобы всё выглядело минималистично. Так вот, это последний скриншот bspwm от меня. Ну, как последний… я ещё запущу парад bspwm в честь ухода, где будут разные кастомные сборки. Ну, да.
Вот о чём это я: я исправился и больше не намерен повторять ошибки прошлого одинаковые bspwm с разными цветами и обоями. И всё. Теперь будет разнообразие: буду пробовать Openbox, Fluxbox, Sway, i3 и даже DWM.
На этом моё использование bspwm закончилось. Прощай, друг bspwm, ты был лучшим.
Ничего интересного
Тёмная тема оформления
ОС: CachyOS
DE: Cinnamon
Использую шрифт NanumGothic, размер 11, в браузере 16 (в других единицах измерения).
Стиль иконок Faenza, но со своей доработкой, и добавлением распространённых виндовых значков (reg, chm, bat и т.д.). Папки жёлтые, ну не люблю я синие и прочие. Также изменял значки для популярных типов файлов, к которым я уже привык (видео, аудио и т.д.).
( читать дальше... )
Вспоминаем графы
Вспоминаю clips, на котором в институтах диплом писал.
Решил посчитать кратчайшие маршруты из начальной деревни до всех остальных с помощью экспертной системы. Что-то получается.
Не получается пока посчитать, как объехать все областные центры (30 штук) затратив при этом минимальное расстояние.
Alt-машина
Давно хотел завести себе отдельную машину под Alt и заняться более детальным изучением данного дистрибутива.
Машина старенькая, но я считаю это оптимальный вариант - ничего не тормозит по крайней мере на глаз не заметно. Со всеми обязанностями десктопа - интернет, фото, видео, музон, работа с документами - справляется без проблем.
Операционная система: JeOS
Графическая среда: labwc
Файл-менеджер: mc
Интернет: Qutebrowser
Фото: feh
Видео: mpv
Терминал: Foot
Звук: Alsamixer
Скриншоты: Grim
Запись экрана: Wf-recorder
Все остальное можно увидеть на скриншотах или в комментариях вопросы задать.
Мое рабочее место для удаленки
Спеки компа такие:
screenfetch
_,met$$$$$gg. kovalevo@mx
,g$$$$$$$$$$$$$$$P. OS: Debian 13 trixie
,g$$P"" """Y$$.". Kernel: x86_64 Linux 6.12.57+deb13-amd64
,$$P' `$$$. Uptime: 2d 9h 11m
',$$P ,ggs. `$$b: Packages: 2720
`d$$' ,$P"' . $$$ Shell: bash 5.2.37
$$P d$' , $$P Resolution: 1920x1080
$$: $$. - ,d$$' DE: Xfce
$$\; Y$b._ _,d$P' WM: Xfwm4
Y$$. `.`"Y$$$$P"' WM Theme: Chicago95
`$$b "-.__ GTK Theme: Chicago95 [GTK2]
`Y$$ Icon Theme: Chicago95
`Y$$. Font: Noto Sans 10.5
`$$b. Disk: 3.4T / 8.4T (43%)
`Y$$b. CPU: AMD Athlon PRO 300GE w/ Radeon Vega Graphics @ 4x 3.4GHz
`"Y$b._ GPU: NVIDIA GeForce RTX 3060
`"""" RAM: 14943MiB / 64232MiB
Но в основном работаю из офиса, удаленка — это если что-то срочное.
Тот же cinnamon, но на воиде и позеленевший
Короче, достал меня этот ендеверос, как и все арчи, и я пустился в поиски чего-то лучшего.
Конечно, носистемдшный воид приглянулся, тем более, что я фанат роллингов. Ранее я уже тыкал воид, но быстро вернулся на арч. Ситуация поменялась – я стал чуть-чуть опытнее и таки разобрался с воидом, с непривычным названием пакетов в репозиториях и ещё кучей всего.
Также воид порадовал тем, что здесь plymouth работает без каких-либо проблем и ошибок, я просто его поставил, и он просто (с оговорками) заработал.
Ранее я присылал скрин свежеустановленного ендевроса, здесь же запечатлен уже полноценная рабочая система. Кстати сделал для себя «смелое дезигнерское решение» – решил под стать воиду сделать зелёную тему, и сильно удивился кстати, что, оказывается, зелёная тема даже красивее синей.
Первослака на i486
Делюсь фотками ещё одним артефактом древности, который покидал университет в направлении e-waste, но так туда и не добрался.
Это комп на базе Intel 486 DX 33 МГц с 20 Мб рамы на борту. Материнка маленькая, даже IDE и FDD пинов на ней нет, поэтому почти все слоты под завязку и в таком корпусе довольно тесно. CMOS батарейку я перепаял на что-то менее опасное, чем та Варта что на фотографии, но как-то эта новая батарейка пока не очень хорошо со своей задачей справляется, CMOS не держится даже неделями – может быть я неправильную батарейку воткнул.
Дум и первый редбарон в досе тянет, первослака тоже работает – для 486 большего наверное и не надо. Ядро пока не смог перекомпилять – зафейлился на звуковухе (какая-то AD1815, надо думать что там не так). Кнопка турбо отрубает кэш – частота остаётся как на фотке, 33 МГц (сам правда не измерял, но судя по фпс в думе, это похоже на правду).
На первой фотке сессия с иксами (графоний от Tseng Labs ET4000). При перетаскивании окон и скролле в xterm видны небольшие артефакты. Грешу на иксы, так как в досе и винде такого не наблюдаю. Монитор на винде 800x600 показывал, но картинка была нестабильной, поэтому откатил на 640x480 и там, и в линуксе.
Сетевуха есть, но на лор пока не пытался зайти – везде теперь HTTPS, поэтому без пляски с WolfSSL, наверное, даже и пытаться не стоит.
По сравнению с пятнадцатой слакой первая концептуально не сильно отличается, только конечно диска так много не жрёт, что кстати для всего лишь 512 Мб Compact Flash карты.
Что хотелось бы найти – какой-нибудь midi-секвенсер, а то обидно что под винду есть Cakewalk, а под линукс что-то я даже и не знаю, что в те времена было.
Перешёл я на Void Linux
Короче, надоел мне этот Debian — скучный, пакеты уже не самые свежие. Да и мне захотелось попробовать runit. И вот я поставил Void Linux.
И да, здесь есть странности. Во-первых, я никогда не видел, чтобы не было ни в одной ОС папки Trash — нигде, только в Void, и почему-то именно у меня. Во-вторых, он не видел другие разделы диска с файловой системой NTFS. Но это похер, у меня же винды нету теперь.
А так, в остальном, он хорош: лёгкая и быстрая система инициализации runit, более-менее стабильный rolling (не то, что у Arch). Также он минималистичен и потребляет в несколько раз меньше, чем Debian с тем же bspwm.
Короче, мне он понравился. И я не остановлюсь на этом: поставлю Artix, потом поставлю Gentoo. Но, как говорится, надо начинать с малого. Вот я и начал с Void.
Просто моя система на Cinnamon
Описывать тут особо нечего, вся полезная информация в заглавии и в фетче, это просто моя система, в которой я мало-помалу учусь программировать.
Цели «закоса под мак» тут нет, все элементы интерфейса, напоминающие мак, были выбраны мной путём работы за кастомами с разными элементами интерфейса, в результате которых я выбрал оптимальные для меня, так уж совпало, что они аналогичны таковым же на маке.
Space Desktop Environment
Итак, разработка началась. Я начал пользоваться Openbox, мне он понравился, это ладно. Я причесал ему стиль, это ещё ладно. Но, как и обещал в прошлом сообщении, я начал разработку Space Desktop Environment (SDE). Звучит странно этот проект, если не разобраться, можно сравнить с BolgenOS от Дениса Попова, хотя я не удаляю имена оригинальных авторов.
Так вот, почему я начал разработку неожиданно и просто так? Начём всё с того: bspwm мне понравился стиль Gruvbox+космос, и вдруг мне ударила идея: а что, если я сделаю что-то типа HyDE для Hyprland, но для OpenBox? Для тех, кто не знает об HyDE это по своей сути готовая оболочка, созданная на Wayland-оконном менеджере Hyprland. И я так захотел что-то подобное HyDE. Я поискал и ничего не нашёл. В итоге было принято решение: если я не нашёл подходящий кандидат создам свой. И вот родился Space Desktop Environment.
Можно подумать, что это готовая DE, на деле нет по своей сути это уже собранный и закастомизированный Openbox. В принципе, я могу ещё сделать приложение «About Space Desktop Environment», если свободное время будет. Завтра как раз будет. Также я поставил SpaceFM и немного причесал его, и включил функцию spacefm –desktop. И после таких манипуляций установка темы, оформление, установка утилит и панелей и переделка конфига можно, по сути, сделать что-то наподобие HyDE, но для Openbox.
Пока что SDE нельзя установить, однако в будущем могу создать инсталлятор, выложить его на Codeberg и сделать так, чтобы он настраивал Openbox. И минусы: во-первых, кастомизация за тебя если тебе не нравится, ты его просто удалишь, и ты тупо тратишь время; во-вторых, а ты сам настроить не можешь? Серьёзно? Можешь поставить мою панель или tint2 и настроить по-своему. Тебе это надо?
И теперь перейдем к печальной новости: Icebar мёртв. Похороню тебя, Icebar. Он умер сегодня, когда я на его основе создал Spacebar. Прощай, Icebar. И что нового в Spacebar? Во-первых, я заменил шрифт, добавил два модуля и причесал дизайн. Ну и, в принципе, всё.
Модернизация моего bspwm
Надоел мне старый дизайн моего bspwm, и вот я его переделал кардинально.
А ещё я:
- поставил zsh и установил конфиг fastfetch;
- поставил микшер громкости pulsemixer вместо pavucontrol и другие программы, которые назову позже;
- настроил Firefox: включил вертикальные вкладки и установил vimuim c и другие расширения, ну как uBlock Origin.
Всё, на этом апгрейд закончен. И, кстати, чуть не забыл обои, вот они: Wallhaven.
И ещё я скоро выпущу обновление своей панели вот, кстати, ссылка: Codeberg.
Написал эмулятор своего мобильника
Более чем два месяца назад заказал отладочные платы для своего хоббийного проекта, но они так и не пришли и хз, придут ли вообще. Разработка прошивки для него из-за этого застопорилась: писать «на воздух» я не особо люблю, а текущая клавиатура уже не отвечает моим требованиям - банально не хватает кнопок.
И тогда в голову начала приходить мысль - а не организовать ли мне эмулятор по типу того, который используется в Android Studio? Идея показалась мне классной, но останавливало отсутствие внятной документации по qemu, поэтому для реализации задумки предлагалось соснуть сурца. В какой-то момент я понял, что без полноценной клавиатуры я не смогу продолжить проект - банально нет всех нужных кнопок - было принято решение засучить рукава и попробовать.
В штатной поставке esp-idf есть qemu, но в ней особо не развернёшься, поэтому начал с простого - используя простое i2c устройство в качестве шаблона, создал заглушки для клавиатуры, контроллера модема и контроллера питания. Подключить их тоже не составило труда - код как раз на скриншоте. Обмен данными по шине i2c оказался очень простым: на эмулируемом устройстве есть всего 2 функции обратного вызова - для чтения и для записи. Таким образом, когда мастер пишет и читает, то просто подсовываем ему то, что он просит. Таким образом реализовать эмуляцию i2c устройств оказалось легче лёгкого.
Далее прерывания. Для эмуляции линий gpio в qemu используются линии прерываний. Тут вроде всё просто: на эмулируемом устройстве создаются выходные линии qemu_irq и далее они подключаются… куда? Вот тут меня ждала первая, пусть и лёгкая, задача. В самом начале я подключил линию irq клавиатуры на матрицу прерываний. Обработчик прерываний вызывался, но понять, на каком gpio оно произошло он не мог. Немного пораскинув мозгами и пососав сурца покопав исходники, я нашёл правильное место для подключения - матрица gpio. Как видите, в функциях read и write ничего нет, поэтому реализовать матрицу предлагается самостоятельно. Ожидаемо :) Реализовывается она очень просто. Сначала в матрице gpio создаются 40 входных и 40 выходных лини qemu_irq, которые будут отвечать за все gpio, которые есть у esp32. Далее создаются ещё 2 выходные линии qemu_irq, которые отвечают за обычные и non-maskable прерывания. Их я подключил к матрице прерываний на специально предусмотренные для этого каналы.
Теперь возвращаемся к функцуиям read и write. Вы когда-нибудь работали с расширителями портов, которые подключаются по шинам spi и i2c? Вся суть сводится к тому, что вы просто пишете и читаете нужные регистры по шинам, верно? Вот тут всё тоже самое, только с одним маленьким отличием - сами регистры нахадятся в самом микроконтроллере и процессор имеет к ним прямой доступ. То есть матрица gpio - это просто расширитель портов, который встроен в процессор и подключен напрямую к нему. Таким образом, вы теперь выступаете в качестве микросхемы :) В ваши регистры будут что-то писать и читать, а вы будете управлять линиями gpio. Когда процессор хочет выставить нужный gpio в нужный уровень - он просто пишет нужный бит в нужный регистр. Вы это видите и переключаете нужную линию qemu_irq в нужный уровень. Если же входная линия изменяет свой уровень, то вы просто отмечаете это у себя в структуре и при чтении сможете вернуть процессору текущие уровни gpio. Если процессор настроил прерывание на каком-либо gpio, то его можно уведомить об этом с помощью линий irq и nmi-irq. Далее процессор прочитает регистр прерываний и попросит вас сбросить их и вы это сделаете :) (иначе он будет постоянно опрашивать регистры прерываний, думая, что они всё ещё активны). Таким образом, реализовать матрицу gpio не составило особого труда. После этого я подключил свои устройства к нужным линиям матрицы gpio и смог эмулировать работу gpio без проблем.
Итак, я уже потирал руки и думал: «Сейчас я кабанчиком организую эмуляцию дисплея на шине spi и можно будет браться за гуй.». Ок, по аналогии с устройством i2c, беру в качестве шаблона какое-нибудь spi-устройство и начинаю реализовывать дисплей. Общение происходит как по i2c, только вместо обратных вызовов read и write, у вас есть обратный вызов transfer, в котором одновременно происходит и приём и передача данных. Сделал я дисплей, запускаю и… тишина! То есть по шине мне передаются сплошные нули! Всмысле? 0_0 В этот раз пососать сурца покопаться в исходниках пришлось гораздо более основательно. В итоге, понатыкав везде и всюду спасительный printf(), я нашёл чёрную дыру, в которой терялись данные по дороге от гостя до эмулируемого дисплея. На первый взгляд кажется, что тут всё ок, но когда я расставил printf() для распечатки адресов регистров, которые пишет и читает процессор, то всё встало на свои места - этот код никаким образом не обрабатывает регистры DMA! То есть вообще. Получается, что гость пытается слать данные через DMA буфер, а ванильный эмулятор spi туда даже не смотрит. В итоге, я сделал его копию и написал свою реализацию, которая позволяет отправлять данные по spi с использованием dma (полную реализацию пилить не стал, ибо влом). И для этого пришлось решить задачу со звёздочкой - доступ к памяти гостя.
Пару слов о том, как работает DMA на esp32. Прошивка организовывает где-нибудь в памяти специальные структуры с указателями на сами данные и входной буфер. Далее в специальнные DMA-регистры записываются адреса (указатели) этих структур. Далее подаётся команда на запуск передачи и данные передаются/принимаются без участия процессора. Теперь передо мной встала задача - как получить доступ по указателям, которые мне передаёт гость? Ведь гость даёт адрес внутри адресного пространства виртуальной машины. Сначала я нашёл решение с помощью функций cpu_physical_memory_read() и cpu_physical_memory_write(), которые работают с указателями из адресного пространства гостя. Но лишнее копирование не давало мне покоя и я нашёл решение получше.
При создании виртуальной машины qemu создаются различные области памяти. Одна из них - оперативка. Создаётся с помощью memory_region_init_ram(). В esp32 создаётся несколько различных областей такого типа. Фишка в том, что все эти области выделены как обычная память на хосте. Идея заключается в том, чтоб использовать memory_region_get_ram_ptr(), чтоб получить указатель на каждую область. Затем, зная начальный и конечный адрес каждого региона, можно вычислить расположение данных в оперативке хоста и работать с ними напрямую.
Последняя задача - как передать эти указатели, которые возвращают вызовы memory_region_get_ram_ptr(), в сам эмулятор spi? Он выполнен как отдельное устройство. В этот раз сосание сурца ковыряние в исходниках и чтение крох документации ничего не дали, поэтому решил действовать в лоб - передавать через свойства устройства. В эмуляторе spi я сделал несколько свойств с помощью object_property_add(), при создании машины при инициализации spi просто передал указатели как uint64_t с помощью qdev_prop_set_uint64(). Не уверен, что поступал правильно, но других решений не нашёл. Возможно, в таких случаях следует создавать отдельное устройство - эмулятор DMA, не знаю. Тем не менее, это сработало - я смог получить доступ к памяти гостя, высчитав смещение и прибавив его к одному из указателей на область памяти.
Гуй сделал на Tcl/Tk. Общение в машиной идёт через fifo. Просто и понятно. Уверен, что у qemu есть свой api для построения гуя, но я, честно говоря, к этому моменту уже окончательно устал искать информацию раз, и хотелось немного попрактиковаться в тикле два. До этого в тикле не работал с цветными изображениями и это был неплохой повод попробовать. Оказалось, что всё делается элементарно через image. Благо по тиклю информация есть, в отличие от.
К чему я вообще пишу обо всё об этом? Похвастаться? Да, не без этого, но ещё больше хочется поделиться вот чем. До того, как я полез писать эмулятор, я многое знал, но не понимал как именно работают те или иные вещи в микроконтроллерах. После того, как я написал эмулятор, я многое понял. Например, как именно процессор управляет своей перефирией. Как работают прерывания. Как работает DMA. Да и вообще, получил опыт в работе с «сырыми» регистрами. Я это к тому, что если у вас есть какая-нибудь идея и вам хочется её осуществить, то всегда пробуйте! Даже если задача изначально кажется сложной и неподъёмной. Запросто может оказаться так, что вы, как и я, не просто реализуете задуманное, но ещё получите ценные знания и/или опыт в процессе.
Такие дела \ё/
Скриншотики рабочих столов на устройствах
Как обычно, что-то вытворяю для красоты и удобства в свободное время, которого стало очень мало. Может даже дело к свадьбе вовсе идёт.
Недавно мой пользователь все права потерял в системе, что-то я вытворил. Переустановил Manjaro и хоть блютуз настроил, мощные наушники слушаю.
Ну и так, смотрите скриншотики, некогда их описывать, да и видно должно быть всё на них.
Делайте, как я, и всё будет хорошо. (Только не женитесь, конечно)
| ← предыдущие | следующие → |