LINUX.ORG.RU

Избранные сообщения Imker

Выпуск FluxCast 0.3.0, инструмента для трансляции рабочего стола Linux на Smart TV

 , , , ,

Группа Мультимедиа

Состоялся выпуск проекта FluxCast v0.3.0, предназначенного для организации стриминга рабочего стола Linux на экраны Smart TV по протоколам Wi-Fi Direct (Miracast), DLNA и Chromecast с минимальной задержкой. Исходный код проекта написан на Python и распространяется под лицензией GPLv3.

Ключевое изменение версии 0.3.0 в том, что для повседневной работы с программой больше не нужен терминал: появились окно настроек в трее, а для Debian и Ubuntu собственный APT-репозиторий.

( читать дальше... )

>>> Подробности релиза на GitHub (github.com)

Illium
()

Ввод символов древнеанглийского (þ, ð, æ, ƿ, ā, ġ) в Linux: Compose, ~/.XCompose, IBus, раскладки

 , , ,

Взялся за древнеанглийский (язык «Беовульфа») и первым делом упёрся в клавиатуру. В научных изданиях используются торн (þ), эт (ð), эш (æ), иногда винн (ƿ), долгие гласные с макроном (ā, ē, ī, ō, ū, ȳ, ǣ) и палатализованные согласные с точкой (ġ, ċ). В Linux всё это уже есть, нужно лишь знать, где искать. Ниже — способы от самого быстрого к самому универсальному.

1. AltGr: возможно, всё уже есть в вашей раскладке

Сначала загляните в раскладку. Я проверил по файлам xkb (/usr/share/X11/xkb/symbols/fr и us):

  • US international (us(intl)) и US altgr-intl: AltGr+t → þ, AltGr+d → ð, AltGr+z → æ. Мёртвая клавиша макрона — AltGr+Shift+3.
  • bépo (fr(bepo)): AltGr+a → æ, AltGr+t → þ, AltGr+d → ð (с Shift — заглавные). Макрон — мёртвая клавиша AltGr+m, точка сверху — мёртвая клавиша AltGr+Shift+i: AltGr+m, затем e даёт ē; AltGr+Shift+i, затем g даёт ġ.
  • Обычная французская AZERTY (fr): напрямую ничего из этого нет, придётся пользоваться Compose.

Проверить у себя:

grep -nE 'thorn|eth|\bae\b' /usr/share/X11/xkb/symbols/fr

2. Клавиша Compose — универсальное решение

Compose (Multi_key) позволяет набрать символ последовательностью клавиш. Сначала её нужно назначить:

setxkbmap -option compose:ralt     # правый Alt становится Compose (X11)
setxkbmap -option compose:menu     # или клавиша Menu, если AltGr нужен

В GNOME это делается в «Доп. настройках» (gnome-tweaks) → Клавиатура → Клавиша Compose, либо из консоли:

gsettings set org.gnome.desktop.input-sources xkb-options "['compose:menu']"

В KDE Plasma: Параметры системы → Клавиатура → Дополнительно → положение клавиши Compose.

Стандартные последовательности лежат в /usr/share/X11/locale/en_US.UTF-8/Compose (в Debian — пакет libx11-data; проверял на libX11 1.8.12). Нужные нам:

  • þ / Þ — Compose t h / Compose T H (<Multi_key> <t> <h> : "þ" thorn)
  • ð / Ð — Compose d h / Compose D H (<Multi_key> <d> <h> : "ð" eth)
  • æ / Æ — Compose a e / Compose A E (<Multi_key> <a> <e> : "æ" ae)
  • ā, ē, ī, ō, ū — Compose - a (или Compose _ a)
  • ȳ — Compose _ y (<Multi_key> <underscore> <y> : "ȳ")
  • ġ — Compose . g (или Compose g .)
  • ċ — Compose . c (или Compose c .)

Подвох: для ȳ и ǣ есть только вариант с _ (не с -), а для ǣ нужно, чтобы æ была на клавише (Compose _ æ). Для винна (ƿ, U+01BF) стандартной последовательности нет вообще. Проверка:

grep -nE 'thorn|U0121|U010B|U01BF' /usr/share/X11/locale/en_US.UTF-8/Compose

3. Свои последовательности в ~/.XCompose

Создаём ~/.XCompose, который сначала подключает системный файл (иначе все стандартные последовательности пропадут), а затем добавляем свои:

include "%L"

# Винн (стандартной последовательности нет)
<Multi_key> <w> <w>   : "ƿ"   U01BF   # LATIN LETTER WYNN
<Multi_key> <W> <W>   : "Ƿ"   U01F7   # LATIN CAPITAL LETTER WYNN

# ǣ через дефис, по аналогии с Compose - a
<Multi_key> <minus> <ae>   : "ǣ"   U01E3
<Multi_key> <minus> <AE>   : "Ǣ"   U01E2

%L — это Compose-файл текущей локали. Перед добавлением последовательности проверьте grep-ом, что она не занята и не является префиксом другой (w w, W W и minus ae свободны — я проверял). Для ġ и ċ ничего добавлять не надо. Затем перезапустите приложения или сессию.

4. IBus: ввод по коду Unicode

В IBus (в GNOME он стоит по умолчанию) Ctrl+Shift+U, затем шестнадцатеричный код и пробел или Enter вставляют любой символ. Коды:

  • þ / Þ — 00FE / 00DE
  • ð / Ð — 00F0 / 00D0
  • æ / Æ — 00E6 / 00C6
  • ƿ / Ƿ — 01BF / 01F7
  • ā / ē / ī / ō / ū / ȳ — 0101 / 0113 / 012B / 014D / 016B / 0233
  • ǣ — 01E3
  • ġ / Ġ — 0121 / 0120
  • ċ / Ċ — 010B / 010A

Как вариант — KCharSelect или gucharmap, где можно искать «wynn» по имени.

5. А что с Wayland?

Под Wayland setxkbmap бесполезен: опция compose: задаётся в настройках окружения (они передают её композитору), а в Sway — строкой xkb_options compose:ralt в конфиге. Сама клавиша Compose работает в GTK- и Qt-приложениях, будь композиция через IBus или через libxkbcommon. А вот с ~/.XCompose всё неоднозначно: libxkbcommon его читает, свежие версии IBus тоже, но некоторые сочетания (Electron, Flatpak, GNOME с IBus) игнорируют ваши добавления или требуют перелогиниться. Если свой ƿ не набирается, проверьте сначала в другом приложении.

6. Шрифты

Символ бесполезен, если вместо него квадратик; хуже всего с винном. Надёжные варианты:

  • Junicode — сделан для медиевистов, очень полный (пакет fonts-junicode в Debian/Ubuntu);
  • DejaVu Sans / Serif;
  • Noto Serif (и Noto Sans).

Какие установленные шрифты покрывают винн:

fc-list ':charset=01bf' family | sort -u

Можно проверить сразу несколько кодов: fc-list ':charset=fe f0 e6 1bf 121 10b' family.

7. Пример: первая строка «Беовульфа»

Цель — «Hwæt! Wē Gār-Dena in ġēardagum». Со стандартными последовательностями Compose:

  • Hw, затем Compose a e → æ, затем t!;
  • W, затем Compose - e → ē;
  • G, затем Compose - a → ā, затем r-Dena in;
  • Compose . g → ġ, затем Compose - e → ē, затем ardagum.

Вопрос к сообществу

Дальше начинается собственно чтение: основной справочник — словарь Босворта–Толлера, а для быстрой проверки значения уже набранного слова пригодится и переводчик с древнеанглийского. Но вопрос у меня скорее технический: как вы настраиваете Compose и свой ~/.XCompose под Wayland — работает ли у вас всё в Electron и Flatpak? И какими шрифтами пользуетесь для редких латинских символов?

oet_team
()

Xournal - компьютерная тетрадка

 , аннотирование, , , инфографика

Определился что буду использовать для заметок/набросков и решил поделиться замечаниями, картинками, конфигурацией и примерами для Xournal++ в свободном стиле. Слишком свободном и сумбурном для статей, так что в галерею, хотя можно и в толксы, но там картинок нет.

( читать дальше... )

LINUX-ORG-RU
()

CloudMus — новый кроссплатформенный открытый плеер для Яндекс Музыки и YouTube Music

 , yandex music, youtube music,

Группа Open Source

Встречайте CloudMus. Это музыкальный проигрыватель для Linux и Windows, который собирает в одном окне Яндекс Музыку, YouTube Music и музыку из локальной папки. У всех источников одна очередь, одна история и одинаковое управление.

Автора замучили плееры-обёртки сайтов на Electron, которые тормозят, выжирают память и батарею ноутбука, автор вынашивал эту идею 10 лет, теперь с Клодом может себе это позволить ). Плеер написан на C++20/Qt 6, звук играет через libmpv, распространяется под лицензией MIT. Для Linux есть AppImage, для Windows – инсталлятор.

Кроме привычных функций плеера, сделан максимальный упор на визуал, в нём есть стеклянный интерфейс с настоящим размытием фона на KDE Plasma, Wayland-композиторах и Windows 11, своя визуальная тема, плавные анимации для поддержки мониторов >60Hz, а также глобальные хоткеи на все основные действия, включая лайк, дизлайк и скачивание трека. Хоткеи работают в KDE, GNOME 48+, на X11 и в Windows. Ещё есть полноценная поддержка MPRIS (Linux) и SMTC (Windows), скачивание треков и плейлистов, предзагрузка следующего трека и отдельный прокси для каждого сервиса: например, YouTube Music через прокси, а Яндекс Музыка напрямую.

Текущая версия проекта — 0.6.1.

( читать дальше... )

>>> CloudMus — новый кроссплатформенный открытый плеер для Яндекс Музыки и YouTube Music (cloudmus.app)

navrocky
()

Okular-session v1.0.0

 ,

Группа Офисные приложения

Небольшая «обёртка» над Okular, позволяющая сохранять и восстанавливать сессии.

Okular-session сохраняет локальные пути к документам из Okular и восстанавливает их при запуске без аргументов. Для его работы требуется Linux, Bash 4 или более поздняя версия и Okular.

Написана на bash с использованием Codex.

Пример: во вкладках Okular открыт десяток pdf. При перезагрузке xfce (не закрывая Okular) текущая сессия может восстановиться. А может не восстановиться (при этом процесс okular ... -session ... висит, но без окна).

Можно:

  • запустить Okular через значок Okular Session;
  • по необходимости (или для сохранения сессии) просто закрыть Okular;
  • при следующем старте через Okular Session все вкладки с открытыми файлами восстанавливаются.

>>> Okular-session v1.0.0 (github.com)

greenman
()

Свежие старые кеды завезли

 ,

Привет, чят!

Какие-то добрые люди сделали конверсию KDE6 под KDE3. Под это дело сделаны темы, портированы на Qt6/KF6 виджеты, управлялка процессами, меню из KDE3 и так далее. В общем, многим тут зайдёт.

Тыц: https://linuxiac.com/klassik-revives-the-kde-3-desktop-on-modern-plasma-6/

Тыц 2: https://github.com/neeeeow/Klassik

yorshka
()

Русификация Omarchy Linux одним скриптом

 ,

Русификация Omarchy Linux одним скриптом

Решил попробовать нашумевший дистрибутив Omarchy Linux и понять — за что же его все так хвалят.

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

Поэтому сначала я начал доустанавливать всё руками, а потом собрал всё в скрипты, которые делают следующее:

  • ставят локаль ru_RU.UTF-8, раскладку us,ru с переключением по Alt, словари для проверки орфографии и русские man-страницы;
  • переводят меню Omarchy, меню горячих клавиш (Super+K) и панели бара: календарь, сеть, Bluetooth, звук, питание, уведомления, буфер обмена и ещё с десяток;
  • настраивают мелочи, о которых вспоминаешь только когда они понадобились: часовой пояс, кириллический шрифт в TTY, символы ₽ № «» — через Compose, погоду в метрической системе с русскими названиями городов;
  • ставят Telegram, русский голосовой ввод (voxtype + Parakeet) и синтез речи;
  • добавляют в виджет сети Яндекс DNS, DNS4EU и NextDNS вместо Cloudflare и Google;
  • по желанию — PC/SC-стек для ЭЦП и сертификаты Минцифры с еженедельной проверкой срока.

Ниже — что внутри, как это ставить и где пришлось повозиться.

( читать дальше... )

chastnik
()

Низкая скорость скачивания в виртуалке

 , , ,

Всех приветствую.

Сложилась неприятная ситуация на рабочем месте.

Для выхода в интернет у нас используется отдельный vlan. Соответственно, для простого доступа туда. Ставится виртуалка, там линукс. Этот линукс цепляется к этому vlan и вот так ходим в интернет.

У меня стоит слака15 (ядро 5.15.19) и на хосте и в госте. Для виртуалки используется Vbox 7.1.4 (сетевой драйвер для гостя 82540EM). Для связи виртуалки и хоста используется бридж.

Если на хосте поднимаю линк в vlan, то скорость у меня максимальная (по ~800 в каждую сторону). Если иду через виртуалку, то на прием ~20мбит/с, на отдачу ~800мбит/с.

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

Подскажите, многоуважаемые админы куда посмотреть и в чем может быть проблема? А то чего-то я уже всю голову сломал. Есть ощущение, что что-то простое, типа несовпадения MTU, или кривых дров в vbox.

yax123
()

Выпуск FluxCast 0.2.7, инструмента для трансляции рабочего стола Linux на Smart TV

 , , , ,

Группа Мультимедиа

Состоялся выпуск проекта FluxCast v0.2.7, предназначенного для организации стриминга рабочего стола Linux на экраны Smart TV по протоколам Wi-Fi Direct (Miracast), DLNA и Chromecast с минимальной задержкой. Исходный код проекта написан на Python и распространяется под лицензией GPLv3.

Ключевым изменением в версии 0.2.7 стало полное устранение двух уязвимостей безопасности в сетевом стеке (исправлены несанкционированное подключение к RTSP-сессии и DoS-уязвимость, приводящая к MemoryError).

( читать дальше... )

>>> Подробности релиза на GitHub (github.com)

Illium
()

Дошли руки до написать поддержку клавиатуры в OpenRGB

 , ,

Клавиатура Thermaltake TT Premium X1 RGB. На первом фото написано HI LOR 23 SEP.

Отправил PR… и судя по фото, нужно почистить клавиатуру.

P.S.: В реальности она не настолько грязная, камера сильно увеличивает.

anonymous_sama
()

Bobiverse 6. Перевод с помощью ИИ.

 , ,

Транскрибировал и перевёл новую книгу Денниса Тейлора The Infinite Extent из серии Bobiverse (она недавно вышла в виде аудиокниги). Три человека уже прочитали, остались довольны.

В общий доступ не выкладывал, потому что как-то не по-пацански, но скину в личку интересующимся. Обращайтесь.

Как делал и первые несколько глав можно посмотреть тут:

https://t.me/enginegger/144

https://t.me/enginegger/145

Puzan
()

Я создал youta: TUI для Ютуба, ЯндексМузыки, локальных файлов/аудиокниг (запоминает где играл), радио (показывает текущий трек), подкасты

 , , , ,

Люблю Ютуб, и обычно перед сном слушою его. На старом ноутбуке. Где от обычного Ютуба - включается вентилятор. Спасался юзерскриптом который оставлял только аудио. Пробовал разные TUI для Ютуба - везде было чтото не то. И вот решил попробовать через LLM сгенерировать себе то что хочется. А с LLM знаете как - вместо записи в TODO новой функциональности - можно ему сказать - и он сделает. Так что обросла моя youta многими полезными кнопками.

Audio-only. Играет через mpv. В фоне - yt-dlp. Также используется API Ютуба - для комментариев.

Помимо Ютуба - поддерживаются и многие другие онлайн площадки.

Гетерогенные плейлисты - это значит можно составлять из разных источников - то есть например сначала играет с Ютуба, потом с ЯндексМузыки, потом локальный файл, потом ещё откуда то.

Такая же гетерогенная история.

Реклама пропускается - если в таймкоде написано «Реклама» и через SponsorBlock. Альтернативный заголовок показывает рядом - через DeArrow.

Codex, Rust. Стартует моментально. Экономит CPU, RAM, батарею. Один исполняемый файл - около 20 мегабайт. Есть Gentoo ebuild - в том числе bin. Есть i686 сборка - чтобы ваш древний компьютер приносил пользу.

Знакомый аудиофил рассказывал что у них Gentoo считается лучшей системой - потому что можно использовать alsa и убрать лишнее - так что возможно тут и этот кейс.

Можно оставлять локальные «комментарии»-заметки.

Интегрирован с AcoustID - когда по горячей клавише - делает отпечаток - и находит Викиданные - не по метадате - а по звуку.

Есть горячие клавиши для перехода между главами Ютуба.

Можно показать QR для локального файла, папки, канала Ютуба - и получить podcast xml в свой телефон. Без промежуточного сервера - генерируется LAN ссылка.

Можно скачать весь Ютуб канал.

Шортсы показывает по умолчанию - но есть кнопка отключения.

По подписке - может на старте автоматически скачивать новые аудио.

Синхронизации с подписками Ютуба нету.

Можно дать линк на любую страницу - и youta вынимет оттуда то что можно проиграть.

Есть загрузка в Wikimedia Commons, Evernote. Саммари из LLM можно получить - для этого скачиваются captions.

Доступна и GUI версия на веб технологиях - мой друг добавил - не нравится ему TUI.

На выходе проверяет - если ~/.config/youta/ под гитом - делает коммит и пуш - чтобы сохранить подписки, историю, заметки.

Использую в TTY. Нравится.

MIT.

https://github.com/vitaly-zdanevich/youta

Рассказывал на митапе о нём https://www.youtube.com/watch?v=swzZX4Y30Ak

vitaly-zdanevich
()

Проблемы Mageia 10, их решения и другие полезные наработки

 

Дистрибутив Mageia традиционно ценится за предсказуемость, консервативную надёжность и верность классическим традициям Unix-подобных систем. Однако при развёртывании свежего выпуска Mageia 10 на современном оборудовании (мобильные процессоры Intel Core Ultra архитектур Arrow Lake, высокоскоростные накопители NVMe, экраны высокого разрешения с расширенным динамическим диапазоном) пользователь сталкивается с целым рядом неочевидных проблем — от периодических зависаний графического стола при записи на диск до перегрева, аварийного сброса частот процессора и блокировок сетевого трафика межсетевым экраном.

В настоящей статье систематизирован практический опыт глубокой инженерной доводки дистрибутива Mageia 10 до эталонного рабочего состояния на примере компактного ультрабука HONOR MagicBook Art 14 2025 (16-ядерный процессор Intel Core Ultra 7 255H, встроенный графический ускоритель Intel Arc, сенсорный OLED-экран 3120x2080 @ 120 Гц, твердотельный накопитель NVMe 1 ТБ с шифрованием LUKS (dm-crypt) и файловой системой Btrfs, графическая среда KDE Plasma 6 под управлением Wayland).

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


1. Базовая системная инициализация

1.1. Настройка прав суперпользователя (sudo)

В Mageia после установки обычный пользователь не включён в число доверенных администраторов: sudo ему недоступен, а без него не сделать и половины шагов этого гайда. Полномочия выдаются в два приёма: включение в штатную группу wheel (стандартный путь, применяется при следующем входе в систему — в /etc/sudoers строка %wheel уже раскомментирована) и отдельный drop-in-файл в /etc/sudoers.d/, который даёт sudo немедленно, без перелогина:

su -                                    # вход под root (пароль root, заданный при установке)
gpasswd -a <имя_пользователя> wheel     # включение в группу wheel
echo '<имя_пользователя> ALL=(ALL:ALL) ALL' > /etc/sudoers.d/<имя_пользователя>
chmod 0440 /etc/sudoers.d/<имя_пользователя>
visudo -cf /etc/sudoers.d/<имя_пользователя>   # обязательная проверка синтаксиса
exit

Важное правило: любой файл в каталоге /etc/sudoers.d/ обязан валидироваться утилитой visudo -cf — вывод должен быть <файл>: parsed OK. Один файл с синтаксической ошибкой ломает sudo во всей системе целиком (парсер останавливается на первой ошибке и перестаёт принимать всё, включая корректные файлы). Поэтому правило такое: создали файл — тут же проверили.

🔎 Теги для поиска: mageia нет sudo, как включить sudo mageia, пользователь не администратор mageia, sudoers wheel, не работает sudo после установки

1.2. Сетевое имя компьютера (hostname)

После назначения имени машины через hostnamectl необходимо синхронизировать его с файлом статического разрешения имён /etc/hosts: без записи в строке 127.0.0.1 система не может отрезолвить собственное имя, и приложения при старте испытывают характерные технологические задержки (таймауты на каждом первом обращении к «себе»):

sudo hostnamectl set-hostname magicbook
# дописать имя в /etc/hosts к локальной петле 127.0.0.1:
sudo sed -i 's/^\(127\.0\.0\.1.*\)/\1 magicbook/' /etc/hosts

Мелочь, о которой легко забыть: уже открытый терминал продолжит показывать старое имя в приглашении — bash кэширует \h на момент запуска. Откройте новый терминал или выполните exec bash.

🔎 Теги для поиска: сменить имя компьютера mageia, hostname mageia, изменить имя хоста, приложения долго запускаются mageia, как назвать компьютер linux

1.3. Шрифты высокой чёткости

Метрически-совместимые свободные замены (Liberation, Carlito, Caladea) в Mageia 10 уже установлены — они решают проблему «поехавшей вёрстки» документов, но выглядят иначе, чем оригиналы. Готового пакета с настоящими шрифтами Microsoft в репозиториях нет (лицензия EULA не позволяет их распространять — как и в большинстве дистрибутивов). Официальный путь — самораспаковывающиеся пакеты corefonts (исходно от Microsoft, раздаются SourceForge):

sudo dnf install -y cabextract
cd /tmp && for f in andale32 arial32 arialb32 comic32 courie32 georgi32 impact32 times32 trebuc32 verdan32 webdin32; do
  curl -fsSL -o "$f.exe" "https://downloads.sourceforge.net/corefonts/$f.exe"
done
sudo mkdir -p /usr/share/fonts/msttcore
for f in *.exe; do cabextract -L -q -d /tmp/ttf "$f"; done
sudo cp /tmp/ttf/*.ttf /usr/share/fonts/msttcore/ && sudo fc-cache -f
fc-match Arial    # проверка: должно вывести Arial.ttf

Это покрывает Arial, Times New Roman, Courier New, Verdana, Georgia, Trebuchet, Comic Sans, Impact, Andale и Webdings. Свободного эквивалента Tahoma и Segoe UI не существует — их можно взять только из установленной копии Windows, скопировав в пользовательский каталог ~/.local/share/fonts/ с последующей пересборкой кэша fc-cache -f. После установки шрифтов перезапустите браузеры — они держат шрифтовые подстановки в памяти.

🔎 Теги для поиска: шрифты windows в linux, arial times new roman mageia, кривые шрифты на сайтах mageia, установить ms шрифты linux, msttcorefonts, шрифты в браузере выглядят иначе


2. Дисковая подсистема: ликвидация зависаний интерфейса и тонкая настройка Btrfs

2.1. Зависания графического окружения из-за планировщика BFQ на накопителях NVMe

Симптом: при интенсивной фоновой записи на диск (работа систем контроля версий, распаковка архивов, сброс кэша операционной системы, синхронизация облака) графический стол подвисает на 5–10 секунд — при этом курсор мыши продолжает плавно двигаться, создавая классическую иллюзию «зависшего рабочего стола при живой мыши». Проблема проявлялась только в Mageia 10 и отсутствовала в Debian и Manjaro на том же железе.

Причина — комбинация трёх факторов, все — специфика Mageia и этого контроллера:

  1. Главная: планировщик BFQ на NVMe. В ядре Mageia (kernel-desktop) включён параметр сборки CONFIG_IOSCHED_DEFAULT_BFQ=y: Mageia назначает планировщик BFQ всем блочным устройствам без исключения, в отличие от других дистрибутивов, где быстрые NVMe работают на none (сквозные аппаратные параллельные очереди). BFQ сворачивает аппаратные очереди NVMe в одну логическую и для «справедливого» распределения полосы выдерживает технологические микропаузы slice_idle = 8ms. На скоростных накопителях при любой интенсивной записи контроллер захлёбывается в этой искусственной очереди, и процессы GUI (kwin_wayland, plasmashell, браузеры), пытаясь синхронно прочитать кэш или сделать мелкую запись, встают в непрерываемое ожидание ввода-вывода (состояние ядра D-wait). Курсор при этом движется: аппаратный указатель отрисовывается DRM-слоем ядра без дискового ввода-вывода.
  2. Усилитель: глубокое энергосбережение APST контроллера NVMe. Засыпание контроллера в глубокие фазы APST (Autonomous Power State Transition) и выход из них на ряде контроллеров (в частности, YMTC PC411) сопровождаются аппаратными задержками в десятки миллисекунд, которые на фоне BFQ складываются в заметные «подёргивания».
  3. Усилитель: дефолтный сброс «грязных» страниц. При 32 ГиБ ОЗУ порог по умолчанию (20 % памяти) позволяет накопить свыше 6 ГиБ несинхронизированных данных, которые файловая система Btrfs затем сбрасывает залпом каждые 30 секунд — прямо в узкое горлышко BFQ.

Решение — три шага:

  1. Правило udev /etc/udev/rules.d/60-ioschedulers.rules, назначающее планировщик по типу накопителя: NVMe — none (аппаратные очереди), SATA/USB SSD — mq-deadline, магнитные HDD — bfq (там BFQ как раз уместен — он сглаживает позиционирование головок):
# Перевод накопителей NVMe на режим аппаратных параллельных очередей (none)
ACTION=="add|change", KERNEL=="nvme[0-9]*n[0-9]*", ENV{DEVTYPE}=="disk", ATTR{queue/scheduler}="none"

# Перевод твердотельных накопителей SATA и USB на mq-deadline
ACTION=="add|change", KERNEL=="sd[a-z]*", ENV{DEVTYPE}=="disk", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="mq-deadline"

# Назначение планировщика BFQ исключительно для магнитных жестких дисков (HDD)
ACTION=="add|change", KERNEL=="sd[a-z]*", ENV{DEVTYPE}=="disk", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="bfq"

Применить без перезагрузки и проверить:

sudo udevadm control --reload && sudo udevadm trigger --subsystem-match=block
cat /sys/block/nvme0n1/queue/scheduler   # в квадратных скобках должно быть [none]
  1. Отключить задержку перед переходами энергосбережения APST контроллера NVMe — параметром ядра в GRUB_CMDLINE_LINUX файла /etc/default/grub:
nvme_core.default_ps_max_latency_us=0

Применить на лету (до перезагрузки) и обновить конфигурацию загрузчика:

echo 0 | sudo tee /sys/module/nvme_core/parameters/default_ps_max_latency_us
sudo update-grub2
  1. Задать контролируемые пороги сброса буферов записи в файле /etc/sysctl.d/99-dirty-writeback.conf:
# начало плавного фонового сброса при накоплении 512 МиБ
vm.dirty_background_bytes = 536870912

# принудительная блокирующая синхронизация при накоплении 2 ГиБ
vm.dirty_bytes = 2147483648
sudo sysctl --system

⚠️ Значения проверены опытным путём: занижать их не стоит. Пробный вариант 128 МБ / 512 МБ дал результат хуже дефолта — слишком частые мелкие сбросы помножаются на задержки LUKS+Btrfs. 512 МБ / 2 ГиБ — подтверждённый оптимум для системы с 32 ГиБ ОЗУ на Btrfs-корне.

Результат тестов: сброс и синхронизация 2 ГиБ случайных данных на шифрованный Btrfs-корень ускорились с 5–10 секунд блокирующего фриза до 0,13 секунды (sync), без малейших задержек интерфейса; синхронизация даже десятков гигабайт данных выполняется бесшовно.

🔎 Теги для поиска: зависает рабочий стол mageia, курсор двигается всё остальное висит, mageia подвисает при копировании файлов, фризы при записи на диск, nvme планировщик bfq, подвисает kde при работе с диском, mageia тормозит debian нет

2.2. Файл подкачки на Btrfs и гибернация при шифровании LUKS

На файловой системе Btrfs файл подкачки обязан иметь атрибут отсутствия копирования-при-записи (NoCoW) — CoW-файл ядро откажется активировать как своп (swapon: Invalid argument). Штатная утилита btrfs mkswapfile сама выставляет NoCoW и создаёт своп-сигнатуру, поэтому ручные трюки с chattr +C и dd не нужны:

# размер: минимум = объём ОЗУ (иначе гибернация невозможна), с запасом — 2× ОЗУ
MEM_KB=$(awk '/^MemTotal:/{print $2}' /proc/meminfo)
SIZE=$(( MEM_KB * 1024 * 2 ))                          # 2× RAM в байтах
sudo btrfs filesystem mkswapfile --size "$SIZE" /swapfile   # сам делает NoCoW + mkswap
sudo swapon /swapfile
echo '/swapfile none swap defaults 0 0' | sudo tee -a /etc/fstab

Сразу полезно ограничить склонность к свопированию — при 32 ГиБ ОЗУ своп нужен только под реальным давлением памяти:

echo 'vm.swappiness=1' | sudo tee /etc/sysctl.d/99-swappiness.conf
sudo sysctl -w vm.swappiness=1

⚠️ Свопинг — это вес склонности, а не жёсткий триггер «свопить при заполнении X %». Полезный побочный бонус: файл подкачки лежит на LUKS-контейнере, поэтому содержимое свопа на диске зашифровано. Если своп «залип» (система висит при свободной RAM после пиковой нагрузки): sudo swapoff -a && sudo swapon -a (нужно достаточно свободной памяти).

Настройка гибернации (спящего режима с сохранением на диск) сквозь контейнер LUKS:

  1. Определение физического смещения первого блока файла подкачки — только штатной командой btrfs (filefrag на Btrfs даёт неверное значение, использовать его нельзя):
sudo btrfs inspect-internal map-swapfile -r /swapfile   # выведет число, напр. 14798603
  1. Определение идентификатора корневой файловой системы:
findmnt -no UUID /
  1. Параметры в /etc/default/grub в строку GRUB_CMDLINE_LINUX: при загрузке LUKS-контейнер уже расшифрован средствами initramfs, поэтому в resume достаточно указать UUID самой файловой системы корня:
GRUB_CMDLINE_LINUX="... resume=UUID=<UUID-корня> resume_offset=<число>"
  1. Пересборка начального образа и меню загрузчика:
sudo update-grub2
sudo dracut -f

⚠️ Mageia собирает классический (не systemd) initramfs по пути /boot/initrd-<версия-ядра>.img. Поэтому dracut -f печатает безобидные строки вида dracut[E]: Module 'systemd*' can't be installed — игнорировать их: нужные модули (crypt/luks, btrfs, resume) всё равно оказываются в образе. Проверить можно так: lsinitrd /boot/initrd-$(uname -r).img | grep -c crypt.

После перезагрузки проверить восстановление: systemctl hibernate. Если /sys/kernel/security/lockdown отсутствует, Secure Boot/lockdown гибернацию не блокируют.

🔎 Теги для поиска: swap файл btrfs, не создаётся swap btrfs, гибернация mageia, не работает гибернация linux, resume_offset, своп на btrfs luks, swapon invalid argument, спящий режим ноутбук linux

2.3. Автоматическая оптимизация твердотельного накопителя (fstrim.timer)

В Mageia 10 системный таймер еженедельной фоновой очистки блоков SSD (fstrim.timer) отключен по умолчанию, и корневая файловая система также монтируется без параметра discard=async (проверка: findmnt -o OPTIONS /). В долгую это означает деградацию скоростей накопителя — контроллер не знает, какие блоки свободны, и вынужден стирать их на ходу при каждой записи. Включение таймера:

sudo systemctl enable --now fstrim.timer

Таймер раз в неделю в фоне отправляет команду TRIM на все подключённые файловые системы, поддерживающие очистку.

Важное замечание для разделов LUKS: диспетчер dm-crypt по умолчанию блокирует прохождение TRIM сквозь криптоконтейнер (в целях безопасности — чтобы не раскрывать карту заполнения блоков). Чтобы команды очистки доходили до физического контроллера, в /etc/crypttab для соответствующего тома нужно указать флаг discard (например: crypt_root UUID=... none discard), после чего пересобрать initramfs (sudo dracut -f). Это компромисс: карта заполнения раздела становится видимой, что для домашнего ноутбука обычно не считается риском, а скорость и ресурс накопителя сохраняются.

🔎 Теги для поиска: ssd тормозит со временем, trim mageia, включить fstrim, ssd медленный linux, trim через luks, discard crypttab, ssd скорость падает

2.4. Ошибка загрузчика GRUB sparse file not allowed на Btrfs

Симптом: при каждом старте компьютера загрузчик печатает ошибку: error: ../../grub-core/commands/loadenv.c:216: sparse file not allowed. Она постоянная, но безвредная — загрузка продолжается.

Причина — грабли Btrfs. GRUB при старте читает свой файл переменных /boot/grub2/grubenv (команда load_env, размер 1024 байта), а Btrfs упаковывает столь мелкие файлы inline — прямо внутрь дерева метаданных (проверка: filefrag -v показывает флаг inline). Честные «разрежённые» файлы и inline-файлы GRUB не различает, поэтому принимает inline-файл за разрежённый и завершает чтение с ошибкой. Причём Mageia вставляет load_env в grub.cfg безусловно, поэтому одного отключения «запоминания последнего пункта меню» мало — файл нужно ещё пересоздать как обычный extent.

Решение — два шага:

# 1) отключить запоминание последнего пункта (чтобы grubenv больше не перезаписывался).
#    Бонус: GRUB_DEFAULT=0 — всегда грузится первый пункт меню.
sudo sed -i 's/^GRUB_DEFAULT=.*/GRUB_DEFAULT=0/'             /etc/default/grub
sudo sed -i 's/^GRUB_SAVEDEFAULT=.*/GRUB_SAVEDEFAULT=false/' /etc/default/grub

# 2) пересоздать grubenv как NoCoW-файл (реальный extent, а не inline):
sudo chattr +C /boot/grub2                   # новые файлы в каталоге наследуют NoCoW
sudo rm -f /boot/grub2/grubenv
sudo grub2-editenv /boot/grub2/grubenv create
sudo chmod 644 /boot/grub2/grubenv

sudo update-grub2
# проверка — флага inline быть НЕ должно (пустой вывод = ок):
sudo filefrag -v /boot/grub2/grubenv | grep -i inline

Железобетонный запасной вариант: если ошибка осталась — просто sudo rm /boot/grub2/grubenv. Тогда GRUB пропустит load_env (проверка [ -f grubenv ] даст ложь), и ошибки не будет; с GRUB_SAVEDEFAULT=false файл заново не создастся. Проверять результат — по факту следующей загрузки: строки об ошибке быть не должно.

Попутно — быстрая загрузка. Если других ОС на диске нет, меню GRUB можно почти не показывать: в /etc/default/grub задать GRUB_TIMEOUT=1 (меню мелькнёт одну секунду — успеете нажать стрелку при необходимости) или GRUB_TIMEOUT=0 (меню скрыто, вызвать можно, держа при загрузке Esc или Shift). Меню можно сделать на весь нативный экран: GRUB_GFXMODE=3120x2080,auto (подставьте родное разрешение своей панели) — дефолтные 1024x768 заставляют GRUB обрезать фоновую картинку до 4:3.

🔎 Теги для поиска: grub sparse file not allowed, ошибка grub при загрузке mageia, grub ошибка btrfs, loadenv ошибка, убрать меню grub, ускорить загрузку mageia


nadim
()

Выключаем копипаст средней кнопкой мыши в красноглазом Niri (и используем её для других задач)

 , , ,

Здравствуйте, красноглазые нирийцы, который вздрагивают при одном упоминании Нокталии! Сегодня мы с вами будем перепиливать поведение мыши. Долой наследие иксов!

Итак, сначала идём и вписываем в ~/.config/niri/config.kdl

clipboard {
    disable-primary
}
Этого уже достаточно для отключения копипастинга мышью в Brave, telegram-desktop,... и т.д.

Для GTK можно добавить команду

dconf write /org/gnome/desktop/interface/gtk-enable-primary-paste false

Теперь добираемся до эмулятора терминала. Поскольку я перешёл на Wezterm (написан на нашем любимом Rust'е), то опишу для него. В ~/.config/wezterm/wezterm.lua надо добавить

config.mouse_bindings = {
  {
    event = { Down = { streak = 1, button = 'Middle' } },
    mods = 'NONE',
    action = act.Nop,
  },
  {
    event = { Up = { streak = 1, button = "Left" } },
    mods = "NONE",
    action = wezterm.action.OpenLinkAtMouseCursor,
  },
  {
    event = { Up = { streak = 2, button = "Left" } },
    mods = "NONE",
    action = wezterm.action.Nop,
  },
  {
    event = { Up = { streak = 3, button = "Left" } },
    mods = "NONE",
    action = wezterm.action.Nop,
  },
}

Однако, это просто отключение. Но у нас освобождается целая кнопка! И её теперь можно использовать в разных сценариях. Например, для того же Wezterm'а можно прописать

config.mouse_bindings = {
  {
    event = { Down = { streak = 1, button = 'Middle' } },
    mods = 'NONE',
    action = wezterm.action.SendString 'elio\r',
  },
  {
    event = { Down = { streak = 1, button = 'Middle' } },
    mods = 'CTRL',
    action = wezterm.action.SendString 'eza --tree ./',
  },
  {
    event = { Down = { streak = 1, button = 'Middle' } },
    mods = 'ALT',
    action = wezterm.action.SendString 'btm\r',
  },
  {
    event = { Down = { streak = 1, button = 'Middle' } },
    mods = 'SHIFT',
    action = wezterm.action.SendString 'fd -t f . | fzf --preview "bat --style=numbers --color=always {}" | xargs hx',
  },
  {
    event = { Up = { streak = 1, button = "Left" } },
    mods = "NONE",
    action = wezterm.action.Nop,
  },
  {
    event = { Up = { streak = 2, button = "Left" } },
    mods = "NONE",
    action = wezterm.action.Nop,
  },
  {
    event = { Up = { streak = 3, button = "Left" } },
    mods = "NONE",
    action = wezterm.action.Nop,
  },
}
Что это даёт в этом конкретном примере?

  • При нажатии средней кнопки мыши запустится файловый менеджер elio (написан на нашем любимом Rust'е (Niri тоже на Rust'е)).
  • При нажатии Ctrl+средняя кнопка мыши в командную строку вставится шаблон 'eza --tree ./' для запуска продвинутой альтернативы ls+tree с подсветкой и значками (написана на нашем любимом Rust'е).
  • При нажатии Alt+средняя кнопка мыши запустится системный монитор bottom (написан на нашем любимом Rust'е).
  • При нажатии Shift+средняя кнопка мыши в командную строку вставится шаблон 'fd -t f . | fzf --preview «bat --style=numbers --color=always {}» | xargs hx' для поиска и открытия файлов в текстовом редакторе helix (написан на нашем любимом Rust'е). Вместо find и less здесь используются fd и bat соответственно (написаны на нашем любимом Rust'е).

Enjoy!

saahriktu
()

OpenShield v0.2.4

 , openshield, ,

Привет, $username!

Хотел рассказать о своём проекте OpenShield. OpenShield – это фарвол для Linux с контролем сетевой активности отдельных приложений, написанный на Rust. Для управления используется терминальный интерфейс, а фильтрацией пакетов занимается nftables с возможностью переключения на iptables. В режиме обучения программа пропускает исходящий трафик и автоматически создаёт разрешающие правила. Затем можно перейти в режим Enforcing: соединения, для которых нет разрешающего правила, будут блокироваться. Правила можно привязывать к cgroup, пути исполняемого файла и параметрам запуска, дополняя ограничениями по адресам, портам и протоколам. Поддерживаются действия accept, drop и reject, а также временное отключение правил без их удаления.

Идея создать свой аналог OpenSnitch появилась довольно давно, но не было окончательного видения проекта. Когда я понял что должно получиться, закипела работа.

Я написал на GitHub, что OpenShield является форком opensnitch, наверное это не совсем так, поскольку заимствована лишь идея, а код написан заново, отличаются механизмы работы и задачи приложения. Поэтому точнее было бы назвать OpenShield самостоятельной реализацией, вдохновлённой OpenSnitch. В OpenSnitch заметный акцент сделан на интерактивном контроле исходящих соединений через графический интерфейс; также есть управление системным фаерволом и несколькими узлами. В OpenShield я делаю упор на локальную политику защиты хоста и работу через терминал, в том числе на серверах без графического окружения. Основной сценарий — собрать правила в режиме обучения, проверить их и перейти к фильтрации по явно разрешённым соединениям.

Отдельное внимание уделяется поведению при ошибках. В режиме Enforcing невозможность достоверно определить приложение не должна превращаться в разрешение трафика: неоднозначная атрибуция приводит к блокировке соответствующего пакета. При критических сбоях предусмотрен аварийный режим BlockAll. Изменять правила и режим работы может только root, а наблюдение доступно участникам группы openshield. Управление и мониторинг разделены между локальными Unix-сокетами с проверкой учётных данных клиента; сетевого управляющего API нет.

Демон и TUI написаны на Rust, в собственном коде запрещён unsafe. Дополнительно ограничены размеры сообщений, очереди и время обработки запросов, предусмотрены проверки сохранённого состояния и тесты поведения при перегрузке. Это не обещание отсутствия уязвимостей и не утверждение, что OpenSnitch небезопасен, а описание выбранных инженерных приоритетов. Обучение тоже не определяет, заслуживает ли приложение доверия: оно лишь фиксирует наблюдавшуюся активность, поэтому полученные разрешения необходимо проверять перед включением Enforcing.

Довольно продолжительное время было уделено производительности приложения, однако она пока остаётся слабым местом при большом количестве коротких соединений и интенсивном исходящем UDP-трафике, особенно состоящем из множества небольших пакетов. Здесь важнее не столько объём переданных данных, сколько количество пакетов и новых соединений, для которых требуется определить приложение.

Это связано со стоимостью проверки правил, привязанных к приложениям. Обычные сетевые правила — адреса, порты, протоколы и интерфейсы — обрабатываются непосредственно ядром через nftables или iptables. Если же решение требует проверки приложения, пакет передаётся демону через NFQUEUE. Демон устанавливает владельца сокета, проверяет идентичность процесса и сопоставляет её с условиями правила: путём исполняемого файла, cgroup, аргументами запуска и другими заданными признаками. Такая проверка существенно дороже сравнения адреса и порта.

Для TCP предусмотрено ускорение: после авторизации соединения его established-трафик может обрабатываться в ядре через conntrack с проверкой поколения политики. Поэтому длительное разрешённое TCP-соединение обычно обходится дешевле постоянного открытия новых. Для UDP, не разрешённого отдельным сетевым правилом, проверка приложения повторяется для каждого пакета, требующего прикладного решения. Именно этот сценарий особенно чувствителен к PPS: даже небольшой по мегабитам поток способен заметно загрузить демон и увеличить задержки. Используемые кеши ускоряют поиск владельца, но не заменяют проверку актуальности его идентичности безусловным повторным разрешением.

Я представляю первую публичную версию, где представлен основной набор функций приложения, над производительность ещё предстоит работать. В OpenSnitch механизм проверок проще, поэтому его работа не даёт подобной нагрузки на систему, возможно схожий режим появится и в OpenShield.

Приложение собирается для Debian 12 и 13, Ubuntu 22.04, 24.04 и 26.04, Fedora 43 и 44, AlmaLinux 9 и 10, Rocky Linux 9 и 10, openSUSE Leap 16.0, openSUSE Tumbleweed, Alpine Linux 3.23 и 3.24, а также Arch Linux. В зависимости от дистрибутива предусмотрены пакеты для x86_64 (amd64), 32-разрядного x86 (i586/i686), ARMv5, ARMv6, ARMv7, ARM64 (aarch64), PowerPC 64 LE (ppc64le), IBM Z (s390x) и RISC-V 64 (riscv64). Это общий перечень архитектур: не каждая комбинация дистрибутива и архитектуры входит в матрицу сборки.

Предрелизные проверки установки пакетов и функциональные тесты фаервола выполняются:

  • на x86_64 — для всех перечисленных дистрибутивов и версий;
  • на ARM64 — для всех перечисленных, кроме Arch Linux;
  • на 32-разрядном x86 — для Debian 12 и 13, AlmaLinux 10, Alpine Linux 3.23 и 3.24, openSUSE Tumbleweed.

Всего получается 37 комбинаций дистрибутива и архитектуры. Для каждой проверяются nftables и резервный iptables, включая обучение, переход в Enforcing и применение правил. Отдельный performance gate запускается на openSUSE Tumbleweed x86_64.

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

Скачать и попробовать приложение можно по последнему актуальному тегу v0.2.4

Сильно не пинайте, буду благодарен за любые отзывы и комментарии.

Спасибо, что дочитали до конца.

unclestephen
()

Неочевидная штука systemd, suspend-then-hibernate, счетчик времени

 , , ,

Итак файл: /etc/systemd/sleep.conf

[Sleep]
AllowSuspend=yes
AllowHibernation=yes
AllowSuspendThenHibernate=yes
HibernateMode=platform shutdown
HibernateDelaySec=10min

В таком виде не работает. Т.е. ноут как бы засыпает, потом якобы уходит в гибернацию, но на деле у меня (Thinkpad X1 Carbon G8) жрёт 16% батарейки за сутки.

Если запустить вручную в терминале: systemctl suspend-then-hibernate, то плюётся ошибкой:

Call to SuspendThenHibernate failed: Sleep verb 'suspend-then-hibernate' is not configured or configuration is not supported by kernel

Выяснил, что в параметр HibernateDelaySec надо именно что вписывать integer, без постфиксов секунд, минут, и прочая.

Причём нигде в доках systemd я про это не нашёл.

Гадство в том, что некоторые другие тайм-параметры, например в юнитах, например OnBootSec - допускают префиксы.

Таким обазом, рабочий вариант такой:

[Sleep]
AllowSuspend=yes
AllowHibernation=yes
AllowSuspendThenHibernate=yes
HibernateMode=platform shutdown
HibernateDelaySec=600
kixx09
()

Вышла модель Deepseek v4 Vision Exp, ваш домашний opus 4.8 (почти)

 , ,

Тихо и незаметно вышла модель Deepseek V4 Vision Exp!

https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash-Vision-Exp

По архитектуре это тот же Deepseek V4 0731, но с добавлением computer vision.

Она чуть лучше показывает себя на бенчмарках чем предыдущий 0731, и чуть чуть хуже чем облачный поприетарный opus 4.8

BenchmarkDeepSeek-V4-Flash-Vision-ExpDeepSeek-V4-Flash-0731Opus-4.8
Text Agent Capabilities
Terminal Bench 2.183.982.785.0
NL2Repo57.754.269.7
Cybergym75.376.778.3
DeepSWE59.354.458.0
Toolathlon-Verified75.970.376.2
DSBench-Hard63.659.671.7
AutomationBench (Public)25.725.127.2
Multimodal Agent Capabilities
ApexBench (Pass@1)36.526.2*39.4
Agents’ Last Exam27.325.2*25.7
Chartography64.3—65.0
ZeroBench (Pass@5)35.0—34.0

* DeepSeek-V4-Flash-0731 в ApexBench и Agents’ Last Exam игнорировал мультимодальные элементы входа.

Для text-agent тестов DeepSeek использовал DeepSeek Harness в minimal mode, reasoning effort = max, temperature = 1.0, top_p = 0.95.

gagarin0
()

Больше игр — нативных и разных!

 , ,

Буквально несколько часов назад состоялся релиз занятного ретро-платформера с нативной поддержкой Linux — Gizmoduck («Уткоробот»), созданного на движке Godot.

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

Проект распространяется в виде легковесного исполняемого файла (58 МБ архив, 116 распакованный файл) без сторонних лаунчеров. Официальных требований разработчики не заявляли, но игра отлично завелась на мини-ПК с Intel N100, 12 ГБ RAM под управлением Debian 13. Из коробки поддерживаются геймпады, есть русский язык и внутриигровые достижения.

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

nuxster
()

Выпуск gswitch 0.6.6, утилиты исправления текста в неверной раскладке

 , gswitch, , ,

Группа Open Source

Состоялся выпуск gswitch 0.6.6 – свободной утилиты для Linux (X11 и Wayland), которая по команде исправляет уже набранный текст в неверной раскладке. Программа не пытается угадывать язык во время ввода: пользователь сам запускает преобразование последнего слова, текста после последнего Enter или выделенного фрагмента.

( читать дальше... )

>>> Репозиторий и релиз 0.6.6 (github.com)

arumata
()

Выпуск WinBtrfs 1.10, реализации файловой системы Btrfs для Windows

 , , , ,

Группа Open Source

После более двух лет разработки опубликован выпуск проекта WinBtrfs 1.10, развивающего драйвер для использования файловой системой Btrfs на платформе Windows. WinBtrfs не основан на коде Btrfs из ядра Linux, а является созданной с нуля альтернативной реализацией. Поддерживается работа с Windows XP и более новыми выпусками. Драйвер включён в состав операционной системы ReactOS и может применяться для загрузки Windows из раздела с Btrfs. Код написан на языках C/C++ и распространяется под лицензией LGPLv3.

WinBtrfs поддерживает большинство возможностей Linux-версии Btrfs, включая запись и чтение в асинхронном режиме, использование RAID0/1/10/5/6, кэширование, автообнаружение разделов, ACL, символические ссылки, подразделы, снапшоты, жесткие ссылки, разреженные файлы, упреждающее выделение места, сжатие, балансировку, проверку целостности данных, удаление и добавление накопителей, отправку и приём подразделов, изменение размера раздела, расширенные контрольные суммы (xhash, sha256, blake2). Из специфичных возможностей драйвера выделяется реализация альтернативных потоков данных и сопоставление идентификаторов пользователей Linux и Windows. Возможна конвертация существующих разделов NTFS в Btrfs.

Среди изменений в новой версии:

  • Добавлена поддержка записи битовых карт с информацией о свободном месте.
  • Реализована возможность сохранения мелких файлов в блоках с метаданными (inline) в сжатом виде.
  • Улучшена работа с извлекаемыми накопителями. Прекращена поддержка создания RAID-массивов на извлекаемых накопителях.
  • Повышена надёжность восстановления после ошибок, вызванных нехваткой оперативной памяти (OOM) или исчерпанием свободного места на накопителе (ENOSPC).
  • Устранены аварийные завершения, возникавшие при перемещении файлов между подразделами и при одновременном создании большого числа файлов.
  • Устранена ошибка, приводившая к повреждению дерева экстентов при записи снапшотов.
  • Исправлена взаимная блокировка при работе с жёсткими ссылками.
  • Проведён рефакторинг внутренних структур и констант для их приближения к вариантам, используемым в Linux.
  • При рецензировании изменений и разборе ошибок задействован AI-ассистент Claude, но код как и раньше создаётся исключительно вручную.

>>> Подробности на opennet (opennet.ru)

PunkPerson
()