LINUX.ORG.RU

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

 


0

1

Дистрибутив 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 (всего исправлений: 1)

3. Управление питанием процессора: ликвидация перегрева и троттлинга

3.1. Предотвращение сброса частот до 400 МГц через Intel DPTF (thermald)

Симптом: в тонком ультрабуке под длительной нагрузкой (игры, компиляция, рендеринг) процессор раскаляется до критической температуры, после чего производительность рушится до «слайдшоу»: частоты всех ядер падают до аварийных 400 МГц.

Причина. Физический предел рассеивания мощности компактного двухвентиляторного радиатора ультрабука толщиной ~1 см составляет 28 Вт (constraint_0_max_power_uw: 28000000). Заводские лимиты BIOS при этом агрессивные: базовый PL1 = 40 Вт, кратковременный PL2 = 40 Вт, пиковый Peak = 88 Вт. В Debian и многих других дистрибутивах из коробки работает демон thermald, который удерживает процессор в рамках теплопакета шасси. В Mageia 10 пакет thermald вообще отсутствует в репозиториях. Без демона процессор длительно потребляет 40–50 Вт, кристалл раскаляется до 105 °C (аппаратный лимит PROCHOT), после чего аварийная защита сбрасывает частоту всех ядер до минимального аварийного множителя 400 МГц.

Решение — сборка RPM из официальных исходников (версия 2.5.12):

sudo dnf install rpm-build gcc-c++ autoconf automake libtool glib2-devel dbus-devel dbus-glib-devel libxml2-devel libev-devel upower-devel

Спек и исходники кладутся в ~/rpmbuild/ стандартным образом (rpmdev-setuptree), затем:

rpmbuild -ba ~/rpmbuild/SPECS/thermald.spec
sudo rpm -Uvh ~/rpmbuild/RPMS/x86_64/thermald-2.5.12-1.mga10.x86_64.rpm

Пакет чисто удаляется штатно (rpm -qi thermald, rpm -e thermald) и управляется системной службой.

Профиль охлаждения под шасси ноутбука/etc/thermald/thermal-conf.xml (жёсткий потолок 28 Вт по паспорту системы охлаждения + пассивные срабатывания по датчику температуры кристалла):

<?xml version="1.0"?>
<ThermalConfiguration>
  <Platform>
    <Name>HONOR MagicBook Art 14</Name>
    <ProductName>*</ProductName>
    <Preference>QUIET</Preference>
    <PPCC>
      <!-- Аппаратный предел рассеивания системы охлаждения: 28 Вт -->
      <PowerLimitIndex>0</PowerLimitIndex>
      <PowerLimitMaximum>28000</PowerLimitMaximum>
      <PowerLimitMinimum>15000</PowerLimitMinimum>
      <TimeWindowMinimum>28000</TimeWindowMinimum>
      <TimeWindowMaximum>28000</TimeWindowMaximum>
      <StepSize>1000</StepSize>
    </PPCC>
    <ThermalZones>
      <ThermalZone>
        <Type>x86_pkg_temp</Type>
        <TripPoints>
          <TripPoint>
            <SensorType>x86_pkg_temp</SensorType>
            <Temperature>80000</Temperature>
            <type>passive</type>
            <ControlType>SEQUENTIAL</ControlType>
            <CoolingDevice>
              <index>1</index>
              <type>rapl_controller</type>
              <influence>100</influence>
              <SamplingPeriod>1</SamplingPeriod>
            </CoolingDevice>
          </TripPoint>
          <TripPoint>
            <SensorType>x86_pkg_temp</SensorType>
            <Temperature>88000</Temperature>
            <type>passive</type>
            <ControlType>SEQUENTIAL</ControlType>
            <CoolingDevice>
              <index>1</index>
              <type>rapl_controller</type>
              <influence>100</influence>
              <SamplingPeriod>1</SamplingPeriod>
            </CoolingDevice>
          </TripPoint>
        </TripPoints>
      </ThermalZone>
    </ThermalZones>
  </Platform>
</ThermalConfiguration>

Критический нюанс железа: на этой платформе таблицы ACPI DPTF (INTC1042:00) не содержат UUID _TRT и PSVT, поэтому флаг --adaptive использовать нельзя (приводит к сбоям) — требуется запуск строго по таблице thermal-conf.xml с флагом --ignore-cpuid-check. Для этого создаётся override службы /etc/systemd/system/thermald.service.d/override.conf:

[Service]
ExecStart=
ExecStart=/usr/sbin/thermald --systemd --dbus-enable --ignore-cpuid-check
sudo systemctl daemon-reload
sudo systemctl enable --now thermald.service

Результат: при любых длительных нагрузках тепловыделение удерживается на стабильных 28 Вт, температура — 78–82 °C (далеко до 105 °C PROCHOT), ядра держат 2,3+ ГГц; троттлинг до 400 МГц и связанные с ним микрофризы полностью исчезают. В простое температура падает до комфортных 45–55 °C при выключенных вентиляторах.

Сопровождение: термальд — программа пространства пользователя, не модуль ядра (не DKMS): при прилёте нового ядра ничего пересобирать не нужно; при обычных обновлениях dnf upgrade — тоже (настройки в /etc/ пакетный менеджер не трогает, а самого пакета в репозиториях нет — нет и риска перезаписи). Пересборка нужна только при мажорном обновлении дистрибутива со сменой версий базовых библиотек: rpmbuild -ba ~/rpmbuild/SPECS/thermald.spec и rpm -Uvh --freshen.

🔎 Теги для поиска: ноутбук перегревается linux, процессор сбрасывает частоту 400 мгц, игры тормозят слайдшоу тротлинг, mageia thermald, критическая температура процессора linux, ноутбук перегревается в играх, троттлинг процессора

3.2. Тихий режим в простое: EPP balance_power и борьба с кольцевой зависимостью systemd

Симптом: в простое вентиляторы ноутбука шумят, температура чипа 65–75 °C, частоты ядер держатся на завышенных 1,8–4,2 ГГц при минимальной фоновой активности — лишние 10–15 Вт тепла.

Причина. Служба power-profiles-daemon в сбалансированном профиле принудительно выставляет регистр энергоэффективности ядер Intel HWP EPP (/sys/devices/system/cpu/cpu*/cpufreq/energy_performance_preference) в значение balance_performance. На современных процессорах это удерживает ядра на высоких частотах даже в простое.

Первая наивная попытка и её грабли. Естественное желание — завести скрипт, который перепишет EPP на balance_power, и привязать его к системе директивами Wants=power-profiles-daemon.service, After=power-profiles-daemon.service и WantedBy=graphical.target. Это порождает кольцевую зависимость (ordering cycle): multi-user.target: Found ordering cycle ... Job cpu-epp-quiet.service/start deleted to break ordering cycle — и планировщик systemd просто выбрасывает юнит при старте (в цепочке graphical.targetmulti-user.targetpower-profiles-daemon.service появляется замкнутый круг). Юнит отбрасывается, и режим EPP не выставляется.

Решение: отвязать юнит от power-profiles-daemon вовсе, перевести в отложенный режим Type=idle и запускать после достижения общего уровня multi-user.target с небольшой паузой — тогда никакой цикл не возможен в принципе. Файл /etc/systemd/system/cpu-epp-quiet.service:

[Unit]
Description=Set CPU Energy Performance Preference to balance_power for quiet idle
After=multi-user.target

[Service]
Type=idle
ExecStart=/bin/sh -c 'sleep 5; for f in /sys/devices/system/cpu/cpu*/cpufreq/energy_performance_preference; do [ -f "$f" ] && echo balance_power > "$f"; done'
RemainAfterExit=yes

[Install]
WantedBy=graphical.target
sudo systemctl daemon-reload
sudo systemctl enable --now cpu-epp-quiet.service
sudo systemctl restart cpu-epp-quiet.service   # проверить вручную

Результат: в простое частоты ядер падают до 400–1200 МГц, энергопотребление процессора — 2–3 Вт, кулеры выключаются или вращаются бесшумно, температура десктопа 45–55 °C. При появлении нагрузки аппаратный контроллер HWP мгновенно (без программных задержек) поднимает частоту до 4,8 ГГц. Изменения затрагивают только энергозависимые регистры ядра Linux: микроконтроллеры (EC/BIOS) не прошиваются, настройки персистентны и переживают перезагрузки.

🔎 Теги для поиска: ноутбук шумит в простое linux, вентиляторы крутятся в простое, процессор горячий в простое mageia, balance power epp, ordering cycle systemd, пониженные частоты процессора в простое, тихий режим linux


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

4. Графический стек, дисплей и рабочая среда Wayland

4.1. Активация 10-битного HDR на встроенных OLED-панелях ноутбуков

Симптом: экран ноутбука аппаратно поддерживает HDR10 (пиковая яркость 1600 нит, охват BT.2020, кривая PQ/ST2084), но в параметрах KDE Plasma переключатель HDR не появляется, а kscreen-doctor -o сообщает HDR: incapable.

Причина. Производитель записал HDR-метаданные панели в блоке DisplayID, который графическая подсистема Linux (ядро + композитор KWin) не вычитывает как «возможности приёмника». Те же метаданные в стандартном блоке CTA-861 ядро и KWin парсят надёжно. Лечится EDID-override: ядру подсовывается правленый EDID, где те же метаданные продублированы в CTA-861. После этого KWin видит панель как HDR-capable, и HDR реально включается (GPU — Intel Arc, драйвер i915).

Шаг 1 — подтвердить диагноз (до правок):

sudo urpmi --auto edid-decode
# в родном EDID метаданные HDR есть (BT2020 + ST2084, максимум ~1600 нит):
edid-decode /sys/class/drm/*-eDP-1/edid | grep -iE 'HDR|SMPTE|BT2020|luminance'
# а KWin их не видит:
kscreen-doctor -o | grep -iE 'HDR|Wide Color'   # → 'HDR: incapable'

Шаг 2 — собрать правленый EDID. Скрипт читает оригинальный EDID панели и дописывает к нему CTA-блок с теми же HDR-метаданными:

#!/usr/bin/env python3
import glob

paths = glob.glob("/sys/class/drm/*-eDP-1/edid")
if not paths:
    raise SystemExit("Дисплей eDP-1 не обнаружен")

raw_data = bytearray(open(paths[0], "rb").read())
base_block = bytearray(raw_data[:128])
extensions_count = base_block[126]
extensions = [bytearray(raw_data[128 * (i + 1):128 * (i + 2)]) for i in range(extensions_count)]

# Блок CTA-861 ревизии 3
cta = bytearray(128)
cta[0] = 0x02
cta[1] = 0x03

# Дескриптор расширенного цветового пространства: BT2020_RGB
colorimetry = bytes([0xE0 | 3, 0x05, 0x80, 0x00])

# Дескриптор статических метаданных HDR (EOTF SDR+PQ, тип 1, 1600/702/0,012 нит)
hdr_desc = bytes([0xE0 | 6, 0x06, 0x05, 0x01, 160, 122, 7])

payload = colorimetry + hdr_desc
cta[4:4 + len(payload)] = payload
cta[2] = 4 + len(payload)
cta[127] = (256 - sum(cta[:127]) % 256) % 256

base_block[126] = extensions_count + 1
base_block[127] = (256 - sum(base_block[:127]) % 256) % 256

out_edid = bytes(base_block) + b"".join(map(bytes, extensions)) + bytes(cta)

with open("/tmp/edp1-hdr.bin", "wb") as f:
    f.write(out_edid)

print(f"Сформирован EDID размером {len(out_edid)} байт")

Проверить результат и установить:

edid-decode /tmp/edp1-hdr.bin | grep -i 'CTA-861 Extension Block'   # должен появиться CTA-блок с HDR
sudo install -Dm644 /tmp/edp1-hdr.bin /lib/firmware/edid/edp1-hdr.bin
# дописать параметр в GRUB_CMDLINE_LINUX (в кавычки, не затирая resume=...):
sudo sed -i 's#^\(GRUB_CMDLINE_LINUX="[^"]*\)"#\1 drm.edid_firmware=eDP-1:edid/edp1-hdr.bin"#' /etc/default/grub
# вшить EDID в начальный образ ядра (и во все будущие при обновлениях):
echo 'install_items+=" /lib/firmware/edid/edp1-hdr.bin "' | sudo tee /etc/dracut.conf.d/edid-hdr.conf
sudo dracut -f /boot/initrd-$(uname -r).img "$(uname -r)"
sudo update-grub2

⚠️ Скрипт должен читать оригинальный EDID (256 байт). Если EDID-override уже активен (файл будет 384 байта) — сначала снимите параметр drm.edid_firmware из GRUB, перезагрузитесь и только потом запускайте скрипт, иначе вы наслоите правку на правку.

Шаг 3 — после перезагрузки включить HDR:

kscreen-doctor -o | grep -iE 'HDR|Wide Color'   # теперь 'HDR: disabled', а НЕ incapable!
kscreen-doctor output.eDP-1.hdr.enable           # либо: Параметры → Экран → «Включить HDR» + «Применить»

Шаг 4 — калибровка яркости (обязательный!). В «Параметры → Экран и монитор» при включённом HDR выставляются два разных значения: пик / максимальная яркость = 1600 нит (паспортный пик панели, чтобы HDR-блики «выстреливали») и опорная яркость SDR = 203 нит — стандарт BT.2408 (reference white). ⚠️ Опорную SDR не ставьте ~500: при завышенной опорной яркие участки HDR слипаются в белое пятно без деталей (мало запаса до пика); 203 нит даёт правильный запас, и детали в светах видны даже при 100 % яркости системы. Паспортная SDR-яркость панели (~500 нит) — это про чистый SDR-режим, к опорной HDR-белой точки отношения не имеет. Опорную можно выставить из консоли (kscreen-doctor output.eDP-1.sdr-brightness.203), пик — только через GUI; учтите, что ползунок «максимальная яркость» в GUI — это HDR-пик, и его снижение прижимает заодно и SDR-яркость. Итоговое состояние сохраняется в ~/.config/kwinoutputconfig.json (highDynamicRange:true, maxPeakBrightnessOverride:1600, sdrBrightness:203, wideColorGamut:true) и переживает перезагрузку.

Откат: убрать drm.edid_firmware=... из /etc/default/grubsudo update-grub2 → перезагрузка (override без параметра ядра неперсистентен, вернётся родной EDID). ⚠️ Однако на этой установке однажды отмечен тяжёлый побочный эффект: после снятия параметра и перезагрузки аппаратная подсветка «зависла» на максимуме (/sys/class/backlight/intel_backlight/brightness перестал слушаться и регулятора, и D-Bus), причину установить не удалось, сброс калибровочных чисел в kwinoutputconfig.json не помог. Из-за этого решено держать HDR постоянно включённым. Если решите откатываться — сначала зафиксируйте состояние яркости, чтобы было с чем сравнивать, и будьте готовы вернуть параметр на место.

Связанное — бандинг в Chrome при HDR: на SDR-градиентах в Chrome бывают «слои» — это его цветоуправление WaylandWpColorManagerV1. Запуск с --ozone-platform=wayland --disable-features=WaylandWpColorManagerV1 бандинг убирает, но отключает HDR-видео в самом Chrome — выбор по ситуации. Firefox этим не страдает.

🔎 Теги для поиска: нет hdr в linux, hdr не включается kde plasma, kscreen-doctor hdr incapable, hdr ноутбук intel arc, edid override hdr, hdr oled ноутбук, включить hdr wayland, яркость hdr белое пятно

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

4.2. Видеодрайверы Intel Arc: надёжный i915 против экспериментального xe

В ядрах ветки 6.18 для встроенной графики Intel Arc (PCI ID [8086:7d51], Arc Pro 130T/140T) присутствуют два драйвера: проверенный i915 и новый xe.

При инициализации i915 в dmesg фиксируется предупреждение: WARNING: CPU: 1 PID: 1205 at drivers/gpu/drm/i915/display/intel_bios.c:2752 intel_bios_init+0x18db/0x1ea0 [i915]. Оно носит косметический характер (парсинг legacy-таблицы VBT в BIOS) и на стабильность отображения не влияет: экран 3120x2080 @ 120 Гц с кастомным HDR EDID работает абсолютно стабильно.

Форсированное переключение на xe (i915.force_probe=!7d51 xe.force_probe=7d51 — параметры ядра) на текущей версии ядра 6.18 несёт значительный риск (порядка 15–20 %) сбоя таймингов eDP-панели высокого разрешения и получения чёрного экрана при старте графической сессии. Рекомендация: оставить проверенный i915 и не менять параметры ядра, пока драйвер xe не стабилизируется в дистрибутиве.

🔎 Теги для поиска: intel arc драйвер linux, i915 warning intel_bios, драйвер xe или i915, intel arc чёрный экран, интегрированная графика intel linux, xe force_probe

4.3. Приоритет реального времени для композитора KWin Wayland

В журнале пользовательской сессии появляется предупреждение: kwin_wayland: Failed to gain real time thread priority (See CAP_SYS_NICE...). error: Operation not permitted. Композитор пытается поднять приоритет потоков рендеринга и обработки курсора до Real-Time, но получает отказ от ядра — из-за этого возможны микрозадержки мыши и анимаций.

Наивное решение — setcap на бинарник — не рекомендуется: привилегия сбрасывается при каждом обновлении пакета kwin/plasma-workspace. Постоянное решение — легитимный лимит через подсистему PAM, файл /etc/security/limits.d/99-kwin-realtime.conf:

<имя_пользователя>    -    rtprio     99
<имя_пользователя>    -    memlock    unlimited

Это позволяет сессии пользователя легально запрашивать RT-приоритет для критических потоков композитора Plasma 6 Wayland; применяется при следующем входе в сессию.

🔎 Теги для поиска: kwin failed to gain real time priority, rt приоритет kwin, микрозадержки мыши wayland, композитор plasma тормозит, rtprio limits

4.4. Нулевая загрузка GPU в Системном мониторе KDE (потерянная capability)

Датчик «ГП» в мониторе Plasma показывает постоянный 0 %. Нагрузку Intel-GPU считает вспомогательный процесс /usr/libexec/ksystemstats_intel_helper — он читает счётчики i915 через perf_event_open. При дефолтном kernel.perf_event_paranoid = 2 для этого нужна capability ядра CAP_PERFMON: апстримный CMakeLists ставит её при установке, но в RPM-пакете Mageia она потерялась (в .spec нет директивы %caps). Хелпер молча падает с Failed opening any event, и датчик вечно ноль.

Восстановление привилегии:

sudo setcap CAP_PERFMON=+ep /usr/libexec/ksystemstats_intel_helper
kill $(pidof ksystemstats)    # D-Bus-активируемый — монитор поднимет его сам
# проверка: хелпер должен раз в секунду печатать растущие счётчики, а не «Failed opening any event»
timeout 3 /usr/libexec/ksystemstats_intel_helper

⚠️ Capability слетает при каждом обновлении пакета ksystemstats (RPM перезаписывает файл) — после апдейтов Plasma её нужно выставить заново. Быстрая проверка одной строкой: getcap /usr/libexec/ksystemstats_intel_helper (пустой вывод = слетело). Известное ограничение (апстримное поведение KDE, не поломка): хелпер суммирует движки Render/Copy/Video/Enhance, а compute-движок (ccs0, класс 4) не учитывает — чисто вычислительная нагрузка (например, часть Vulkan-компьюта llama.cpp) может занижаться.

🔎 Теги для поиска: загрузка видеокарты 0% kde, системный монитор не показывает гп, ksystemstats intel, датчик gpu ноль плазма, загрузка gpu не отображается

4.5. Ошибка разблокировки хранилища ключей KWallet в браузерах

Симптом: Chrome / Vivaldi / Яндекс.Браузер при старте пишут «Не удалось разблокировать хранилище ключей», пароли не сохраняются. В журнале (journalctl --user -b | grep -i wallet) — характерный след:

kwalletd6: "Can't find session /org/freedesktop/secrets/session/1"
vivaldi-stable: ERROR ...freedesktop_secret_key_provider.cc:748] Existing KWallet password is empty. Generating a new one.
vivaldi-stable: ERROR ...freedesktop_secret_key_provider.cc:780] KWallet writePassword failed with code: -1

Диагноз — НЕ бумажник. Бумажник открыт и цел, ключи на месте — ломается один демон. Секретами в Plasma 6.5 / KF6 6.22 занимаются два процесса: ksecretd (владеет шиной org.freedesktop.secrets, поднимается рано — его дёргает xdg-desktop-portal) и kwalletd6 (нативный KWallet API; автозапуска у него нет — его будит первый клиент, то есть сам браузер). kwalletd6 при старте берёт у ksecretd Secret Service-сессию. Если он стартует одновременно с тем, как браузер уже долбится в ksecretd, сессия не создаётся — и kwalletd6 навсегда залипает, ссылаясь на несуществующую /session/1. Залипший демон отдаёт пустые значения ключей *Safe Storage, а запись возвращает -1: браузер видит пустой ключ и сообщает «не удалось разблокировать хранилище».

Диагностика (ключ виден через Secret Service, но не через KWallet — значит, дело в залипшем демоне):

secret-tool search --all server "Chromium Keys"      # secret = ...== → ключ ЖИВ
kwallet-query -f "Chromium Keys" -r "Chromium Safe Storage" kdewallet   # пусто → kwalletd6 залип

⚠️ Не паниковать и не удалять бумажник: ключи целы, теряется только доступ через kwalletd6.

Лечение здесь и сейчас (перезагрузка не нужна; демон D-Bus-активируемый, встанет сам): pkill -x kwalletd6 и просто перезапустить браузер.

Профилактика — прогрев демона до запуска приложений. Скрипт ~/.local/bin/kwallet-prewarm (не забудьте chmod +x): дожидается регистрации org.freedesktop.secrets (до 30 с), делает паузу 3 с на дозавершение инициализации ksecretd, затем поднимает kwalletd6 и проверяет его; не отвечает — перезапускает демон, до 3 попыток:

#!/bin/bash
# Прогрев kwalletd6: исключает гонку с ksecretd, из-за которой браузеры
# при старте получают «Не удалось разблокировать хранилище ключей».
for i in $(seq 1 30); do
    if qdbus --session org.freedesktop.secrets >/dev/null 2>&1; then
        break
    fi
    sleep 1
done
sleep 3
for attempt in 1 2 3; do
    if qdbus --session org.kde.kwalletd6 /modules/kwalletd6 org.kde.KWallet.isEnabled >/dev/null 2>&1; then
        exit 0
    fi
    pkill -x kwalletd6 2>/dev/null
    sleep 2
done
exit 1

Подключение в автозагрузку пользователя — файл ~/.config/autostart/kwallet-prewarm.desktop:

[Desktop Entry]
Type=Application
Name=KWallet Prewarm
Exec=/home/<имя_пользователя>/.local/bin/kwallet-prewarm
NoDisplay=true

Проверка вручную: запустите kwallet-prewarm — код выхода 0 означает «демон прогрет и отвечает». Итог: к моменту запуска браузера kwalletd6 уже поднят, и гонки не возникает.

Шум, который лечить не надо — эти строки бывают и у здорового демона и ни на что не влияют: g_dbus_proxy_get_object_path: assertion 'G_IS_DBUS_PROXY (proxy)' failed, Failed to register with host portal ... App info not found for 'org.kde.kwalletd', Oops, secure memory pool already initialized. Единственный настоящий маркер поломки — Can't find session. Сопутствующее: при автологине SDDM pam_kwallet5 пишет open_session called without kwallet5_key (пароля в PAM нет) — это нормально, бумажник открывается и так.

🔎 Теги для поиска: не удалось разблокировать хранилище ключей chrome, браузер не сохраняет пароли kde, kwallet ошибка, chrome хранилище ключей linux, пароли не сохраняются браузер plasma, kwalletd can’t find session

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

4.6. Жесты сенсорной панели (тачпада) под Wayland

Базовая настройка (инверсия прокрутки «естественная прокрутка», скорость, клики) выполняется штатно: «Параметры системы → Мышь и сенсорная панель → Сенсорная панель». Но фирменные жесты 3–4 пальцами (переключение рабочих столов, свайпы) на этой платформе из коробки не работают — и вот почему.

Причина. Контроллер тачпада (I2C-HID, vendor 0x35CC, product 0x0104, модуль TOPS0102) посылает жестовые HID-отчёты только после включения этой функции в прошивке тачпада, а прошивку можно переключить только из Windows через фирменную утилиту (Honor PC Manager) — из Linux состояние прошивки не изменить. Проверить наличие тачпада в системе: grep -rl 35CC /sys/class/hidraw/*/device/uevent.

Шаг 1 (один раз, из Windows): включить жесты в прошивке через фирменную утилиту производителя. Без этого тачпад не шлёт жестовые HID-отчёты, и никакие настройки в Linux не помогут.

Шаг 2 — демон жестов. Готового пакета в репозиториях нет, демон собирается из исходников (проект honor-magicbook-art-touchpad-gestures на GitHub):

sudo dnf install -y git gcc
git clone https://github.com/MadhiasM/honor-magicbook-art-touchpad-gestures
cd honor-magicbook-art-touchpad-gestures
gcc src/gesture-daemon.c -o gesture-daemon
sudo install -m755 gesture-daemon /usr/local/bin/
echo uinput | sudo tee /etc/modules-load.d/uinput.conf && sudo modprobe uinput

Для демона заводится systemd-служба (ExecStart=/usr/local/bin/gesture-daemon, User=root, Group=input). ⚠️ В DeviceAllow указывайте char-hidraw rне /dev/hidraw1: номер устройства плавает между загрузками. Затем sudo systemctl enable --now gesture-daemon.service. После этого жесты 3–4 пальцами переключают виртуальные рабочие столы так же, как в Windows.

🔎 Теги для поиска: жесты тачпада не работают linux, тачпад honor magicbook linux, многопальцевые жесты mageia, три пальца рабочий стол linux, свайп рабочего стола тачпад, wayland тачпад жесты


5. Звуковой тракт: PipeWire и звук максимального качества

5.1. Переход с PulseAudio на PipeWire + WirePlumber

В Mageia 10 выбор звуковой подсистемы делается штатно: Центр управления Mageia → Настройка звука → выбрать «PipeWire с WirePlumber» (не «media-session» — он устаревший; именно WirePlumber нужен для LDAC и современных правил устройств). Центр сам доставит пакеты с заменой конфликтующих компонентов PulseAudio, после чего потребуется перезагрузка.

Зачем это нужно: запись экрана в Spectacle требует PipeWire (протокол скринкаста), а кодек LDAC для Bluetooth-наушников ставится вместе с PipeWire/WirePlumber.

⚠️ Грабли авто-переключения вывода: автоматическое переключение вывода на новое устройство (например, Bluetooth-наушники) не работает, если вы вручную выбирали устройство по умолчанию — WirePlumber «запоминает» закреплённый дефолт и больше не подхватывает новые устройства. Фикс:

wpctl settings --save node.restore-default-targets false

(именно wpctl --save; правка через wireplumber.conf.d это поле не переопределяет). И не закрепляйте устройство по умолчанию вручную в настройках звука.

🔎 Теги для поиска: pipewire или pulseaudio mageia, не записывается экран spectacle, выбор звуковой системы mageia, bluetooth не переключается звук, вывод звука не переключается автоматически

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

5.2. Беспроводной звук высокой чёткости: фиксация Bluetooth LDAC 990 кбит/с

Симптом: Bluetooth-звук на LDAC играет заметно хуже возможного, хотя KDE честно пишет «кодек LDAC»; при малейших радиопомехах звук заметно деградирует и не возвращается. Замер эфира (наушники с LDAC): адаптивный битрейт сидел на ~396 кбит/с из 990 возможных — звучит как дешёвый MP3.

Причина. По умолчанию PipeWire переводит LDAC в режим автоматического битрейта ABR: при помехах битрейт падает, а обратно почти не повышается — без нижнего пола он залипает внизу. Графического интерфейса для настройки битрейда не существует ни в KDE, ни в pavucontrol (GUI выбирает только кодек, то есть профиль карты) — только конфиг WirePlumber.

Решение — файл ~/.config/wireplumber/wireplumber.conf.d/50-bluez.conf (справка — man pipewire-props, секция BLUETOOTH PROPERTIES):

monitor.bluez.properties = {
  # запасной кодек получше, если LDAC недоступен: SBC-XQ (~552 кбит/с)
  bluez5.enable-sbc-xq = true
  # предпочитаемая частота A2DP-кодека (LDAC: 44.1/48/88.2/96 кГц);
  # без этого при подключении со стороны компа PipeWire выбирает 48000
  bluez5.default.rate = 96000
}

# Свойства уровня УСТРОЙСТВА задаются строго через rules → update-props!
monitor.bluez.rules = [
  {
    # Дефолт для всех BT-устройств: фиксированный максимум LDAC.
    # Качество: hq = 990 кбит/с, sq = 660, mq = 330; auto = ABR — НЕ использовать.
    matches = [ { device.name = "~bluez_card.*" } ]
    actions = {
      update-props = {
        bluez5.a2dp.ldac.quality = "hq"
      }
    }
  }
  {
    # Точечное исключение для проблемного устройства (ставится ПОСЛЕ общего правила —
    # правила применяются по порядку, позднее перекрывает раннее):
    # если конкретные наушники хрипят на hq 990 (радиотракт не тянет),
    # им задаётся фиксированный sq 660 (с запасом перекрывает MP3 320).
    matches = [ { device.name = "bluez_card.XX_XX_XX_XX_XX_XX" } ]
    actions = {
      update-props = {
        bluez5.a2dp.ldac.quality = "sq"
      }
    }
  }
]

⚠️ Главные грабли: bluez5.a2dp.ldac.quality — свойство устройства, работает только через monitor.bluez.rulesupdate-props. Если положить его в общий блок monitor.bluez.properties, оно молча игнорируется: конфиг «применяется» (соседний default.rate из того же блока работает!), а ABR остаётся — вскрыть можно только замером эфира. При этом bluez5.default.rate и bluez5.enable-sbc-xq — свойства монитора, им место именно в properties. Без bluez5.default.rate = 96000 частота «плавает» от сценария подключения: наушники сами просят 96 кГц, а при подключении со стороны компьютера PipeWire выбирает 48 кГц.

Если на каком-то устройстве hq заикается/хрипит (реальный случай: наушники неделю хрипели на 990, при том что колонка тянет идеально) — не переводите всех на sq и не включайте auto: «авто-сброс при плохом линке» — это и есть ABR, у него нет нижнего пола (падает ниже sq, вплоть до 330 кбит/с) и он залипает внизу, вверх почти не возвращаясь; ограничить его «не ниже sq» PipeWire не умеет. Вместо этого — точечное правило для конкретного устройства после общего (второй блок rules в примере), остальным остаётся hq. Имя карты для matches: pactl list cards | grep bluez_card. Хрипы — это реально теряемые кадры: замер до фикса показывал недобор ~8 % кадров в плохие секунды, после перевода на фиксированное качество — полная передача без единой потери.

🔎 Теги для поиска: bluetooth звук плохой linux, блютуз наушники хрипят, ldac битрейт linux, наушники ldac хрипят, звук по bluetooth тормозится, pipewire ldac настройка, плохой звук беспроводные наушники

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

5.3. Перевод всего звукового графа на 96 кГц и максимальное качество ресемплинга

Зачем. Дефолты PipeWire «экономные»: ресемплер качества 4 (шкала 0–15) и граф на 48 кГц — музыка 44,1 кГц пересчитывалась дёшево и дважды (44,1→48 → эквалайзер на 48 кГц → 48→96) на пути в 96-килогерцовый LDAC. Подняв весь граф до 96 кГц, получаем одну ступень пересчёта (44,1→96 качеством 15 на входе потока), эквалайзер, работающий на 96 кГц, и отсутствие 16-битных усечений (ALSA-выходы s32le, Bluetooth — float32). Цена — немного CPU; дизеринг не нужен.

Четыре конфига, все в домашней папке (система не трогается):

mkdir -p ~/.config/pipewire/{pipewire.conf.d,client.conf.d,pipewire-pulse.conf.d}

# 1) базовая тактовая частота звукового графа
cat > ~/.config/pipewire/pipewire.conf.d/90-hq-audio.conf <<'EOF'
context.properties = {
  default.clock.rate = 96000
}
EOF

# 2) ресемплер потоков нативных PipeWire-клиентов
cat > ~/.config/pipewire/client.conf.d/90-hq-resample.conf <<'EOF'
stream.properties = {
  resample.quality = 15
}
EOF

# 3) ресемплер для клиентов эмуляции PulseAudio (браузеры, большинство приложений);
#    (client-rt.conf в PipeWire 1.6 больше нет — только client.conf и pipewire-pulse.conf)
cat > ~/.config/pipewire/pipewire-pulse.conf.d/90-hq-resample.conf <<'EOF'
stream.properties = {
  resample.quality = 15
}
EOF

# 4) ресемплер в адаптерах самих устройств: работает, когда узел устройства не является
#    драйвером графа и пересчитывает частоту сам (например, вывод на два устройства сразу;
#    встроенный динамик аппаратно умеет максимум 48 кГц — его 96→48 теперь тоже качеством 15).
#    Массивы rules из разных conf.d-файлов конкатенируются — правила 50-bluez.conf не затрутся.
cat > ~/.config/wireplumber/wireplumber.conf.d/51-hq-audio.conf <<'EOF'
monitor.alsa.rules = [
  {
    matches = [ { node.name = "~alsa_(output|input).*" } ]
    actions = { update-props = { resample.quality = 15 } }
  }
]
monitor.bluez.rules = [
  {
    matches = [ { node.name = "~bluez_(output|input).*" } ]
    actions = { update-props = { resample.quality = 15 } }
  }
]
EOF

Применение и проверка. Проще всего перезагрузиться — после ребута всё поднимается само (автостарт эквалайзера, автоконнект Bluetooth). Без ребута:

systemctl --user restart pipewire pipewire-pulse wireplumber

⚠️ при таком рестарте (в отличие от ребута) эквалайзер EasyEffects падает — перезапустите (systemd-run --user --collect /usr/bin/easyeffects --gapplication-service; потоки сами вернутся в его sink), а Bluetooth-устройства отваливаютсяbluetoothctl connect <MAC>.

Быстрая проверка (наушники подключены):

pw-metadata -n settings | grep clock.rate        # → 96000
pactl list sinks | awk -v RS= '/bluez/' | grep -E 'Sample Specification|codec'
                                                  # → api.bluez5.codec = "ldac", float32le 2ch 96000Hz
pw-dump | jq -r '.[] | select(.type=="PipeWire:Interface:Device" and .info.props?."device.api"=="bluez5")
                 | .info.props."bluez5.a2dp.ldac.quality"'          # → hq (главный тест грабель из 5.2!)
pw-dump | jq -r '.[] | select(.info.props?."media.class"=="Stream/Output/Audio")
                 | [(.info.props."application.name" // .info.props."node.name"),
                    (.info.props."resample.quality"|tostring)] | @tsv'   # → у каждого потока 15

Железный пруф — фактический битрейт в эфире. Единственный способ увидеть реальный режим LDAC: битрейт не передаётся по A2DP, это внутренний параметр энкодера. Во время замера должна играть музыка:

sudo sh -c 'timeout 10 btmon -w /tmp/ldac.btsnoop >/dev/null 2>&1; chmod 644 /tmp/ldac.btsnoop'
python3 - <<'EOF'
import struct, collections
d = open('/tmp/ldac.btsnoop','rb').read(); off = 16; tx = []
while off + 24 <= len(d):
    ol, il, fl, dr, ts = struct.unpack('>IIIIq', d[off:off+24]); off += 24
    p = d[off:off+il]; off += il
    if fl & 0xffff == 4: tx.append((ts, p))                 # btsnoop-monitor: opcode 4 = ACL TX
t0 = min(t for t,_ in tx); span = (max(t for t,_ in tx) - t0) / 1e6
fr = collections.Counter(); nf_tot = 0; pay = 0
for t, p in tx:
    if len(p) > 20 and ((struct.unpack('<H', p[0:2])[0] >> 12) & 0x3) in (0, 2) \
       and (p[8] & 0xC0) == 0x80:                           # первый ACL-фрагмент с RTP внутри
        l2 = struct.unpack('<H', p[4:6])[0]; nf = p[20] & 0x0f   # 12 Б RTP + 1 Б «число кадров»
        if nf: nf_tot += nf; pay += l2 - 13; fr[(l2 - 13) // nf] += 1
print(f'payload {pay*8/span/1000:.0f} кбит/с, {nf_tot/span:.0f} кадров/с, кадры (Б, шт): {fr.most_common(2)}')
EOF

Норма при hq/96 кГц: payload ≈ 991 кбит/с, 375 кадров/с, все кадры по 330 байт. Легенда размера кадра (при 96 кГц кадр = 256 сэмплов): 330 Б = hq/990 · 220 = sq/660 · 110 = mq/330; промежуточные размеры (например, 132 Б ≈ 396 кбит/с) — работает ABR, значит quality не применился: перечитайте грабли из 5.2.

🔎 Теги для поиска: ресемплер pipewire качество, 96 кгц pipewire, двойной ресемплинг звука, как проверить ldac битрейт, btmon ldac, звук 48кгц ресемплинг linux

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

5.4. Микрофон Bluetooth-наушников: автопереключение в гарнитуру и конфликт с EasyEffects

A2DP не передаёт микрофон — для звонков WirePlumber сам переключает наушники в профиль гарнитуры (HFP/mSBC) и обратно: настройка bluetooth.autoswitch-to-headset-profile (включена по умолчанию, смотреть wpctl settings). Триггер: приложение захватывает заглушку-источник bluez_input.<MAC> (в A2DP-режиме она существует именно для этого и отдаёт тишину). Отпустили микрофон — через ~2 секунды профиль сам возвращается в A2DP/LDAC. Быстрая проверка механизма: pw-record --target <id заглушки из pw-cli ls Node> /dev/null — профиль в pactl list cards должен смениться на headset-head-unit и вернуться после Ctrl+C.

⚠️ Через EasyEffects автопереключение НЕ работает: скрипт автопереключения в WirePlumber умеет проходить только фильтры из пар потоков с node.link-group (loopback, filter-chain, echo-cancel), а easyeffects_source — виртуальный узел без link-group, обход обрывается, профиль не переключается, и приложение пишет тишину из заглушки. Причём EasyEffects с включённым перехватом входов сам утаскивает микрофонные потоки приложений на свой source (перекинутый вручную поток возвращается за секунды).

Фикс (подтверждён): в настройках EasyEffects отключить обработку входа (галочка про обработку входных потоков; EasyEffects 8.1 хранит это не в gsettings, только через GUI). EasyEffects остаётся обрабатывать вывод (эквалайзер), микрофоны не трогает — автопереключение работает во всех приложениях сразу. Если обработка микрофона в EasyEffects реально нужна — она с автопереключением несовместима в принципе: тогда в звонилке выбирать микрофон наушников напрямую и переключать профиль руками.

Во время звонка весь звук (и музыка) деградирует до mSBC 16 кГц моно — это природа Bluetooth (A2DP и микрофон одновременно не бывают); после звонка LDAC возвращается сам.

Откат всех аудионастроек раздела 5: удалить пять файлов (50-bluez.conf, 51-hq-audio.conf, 90-hq-audio.conf, 90-hq-resample.conf ×2) и перезагрузиться либо перезапустить звуковой стек.

🔎 Теги для поиска: микрофон наушников не работает linux, звук ухудшается при звонке bluetooth, a2dp переключается на hfp, easyeffects микрофон не работает, bluetooth гарнитура профиль linux, во время звонка звук портится

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

6. Сеть, безопасность и системные службы

6.1. Сетевой принтер и сканер: mDNS сквозь межсетевой экран Shorewall

Два независимых подвоха при поиске сетевого принтера/сканера:

  1. Окно «Для доступа к MYGROUP требуется авторизация» — это НЕ ваш пароль и НЕ root. Мастер поиска параллельно обходит Windows-сеть (SMB), и это запрос учётных данных удалённого Windows-компьютера. MYGROUP — дефолтная рабочая группа из локального /etc/samba/smb.conf (заглушка), такой группы в сети обычно не существует — никакой пароль не подойдёт в принципе. Правильный ответ — «Отменить» (столько раз, сколько окно выскочит). На поиск обычных сетевых принтеров это не влияет.
  2. Shorewall молча режет mDNS (входящий multicast UDP 5353) → службы обнаружения не видят ни одного принтера или сканера, даже включённого рядом. Автоматическое обнаружение (IPP Everywhere / AirPrint для принтеров, eSCL/AirScan для сканеров) работает поверх mDNS — без него поиск пуст.

Разрешающее правило — штатный макрос в /etc/shorewall/rules:

mDNS(ACCEPT)    net    $FW
sudo shorewall reload

После этого проверка: avahi-browse -rt _ipp._tcp сразу видит принтер.

⚠️ Это второй случай класса «shorewall молча режет» (первый — VPN-туннель, 6.2). Общий урок: при любых «в сети ничего не находится» (DLNA, Chromecast, KDE Connect) первым подозревать фаервол.

Найти принтер без mDNS (исходящий скан фаервол не режет):

nmap -T4 -p 515,631,9100 --open 192.168.1.0/24

Добавить принтер бездрайверно (IPP Everywhere / AirPrint) — без драйверов производителя:

sudo lpadmin -p <имя-принтера> -E -v "ipp://<IP-принтера>/ipp/print" -m everywhere -o printer-is-shared=false
sudo lpadmin -d <имя-принтера>    # принтер по умолчанию
lpstat -t                         # проверка

Современные принтеры отдают растровые форматы image/urf + image/pwg-raster (IPP 2.0) — работают бездрайверно; сканер качает то же через sane-airscan (eSCL) и после открытия mDNS обнаруживается сам. ⚠️ URI очереди привязан к IP — в роутере стоит закрепить за принтером статический DHCP-lease, иначе смена адреса сломает очередь.

🔎 Теги для поиска: принтер не найден mageia, сетевой принтер не обнаруживается, авторизация MYGROUP принтер, cups требует авторизацию, сканер не определяется mageia, mdns shorewall, сеть не видит принтер

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

6.2. Пропадает интернет и DNS при включении VPN-туннеля (TUN) в Shorewall

Симптом: включаете TUN-режим в VPN-клиенте (v2rayN с ядром sing-box, OpenVPN и т. п.) — и полностью пропадает разрешение доменных имён (ERR_NAME_NOT_RESOLVED) и весь интернет. На дистрибутивах без активного фаервола (Debian) тот же клиент работал без нареканий.

Причина. Для TUN-режима поднимается виртуальный интерфейс (например, singbox_tun; xray при этом даёт SOCKS на 127.0.0.1:10808). Shorewall (в Mageia включён по умолчанию) этот интерфейс не знает: он не входит ни в одну зону, и весь трафик в туннель попадает под catch-all правило all all REJECTconnection refused на любой DNS-сервер. Конфиг самого VPN при этом корректный (есть и перехват DNS на :53, и удалённый DNS через прокси) — проблема только в фаерволе.

Диагностика — подтвердить виновника:

sudo systemctl stop shorewall      # при ВКЛЮЧЁННОМ TUN
dig +short google.com @1.1.1.1     # резолвится → виновник shorewall
sudo systemctl start shorewall     # вернуть обратно

Фикс — доверенная зона для интерфейса туннеля (фаервол остаётся включённым):

# /etc/shorewall/zones       — добавить строку:
vpn	ipv4
# /etc/shorewall/interfaces  — добавить ('optional' = ок, когда TUN выключен и интерфейса нет):
vpn	singbox_tun	-	optional
# /etc/shorewall/policy      — ВСТАВИТЬ ПЕРЕД строкой 'all  all  REJECT':
fw	vpn	ACCEPT
vpn	all	ACCEPT
sudo shorewall check && sudo systemctl restart shorewall

Проверка (TUN включён, shorewall активен): dig google.com @1.1.1.1, ping 1.1.1.1, curl -s https://api.ipify.org (должен вернуть IP выходной ноды, а не вашего провайдера).

Полезно знать: ✅ решение переживает перезагрузку и вкл/выкл TUN: правила iptables привязаны к имени интерфейса и срабатывают, как только тот появляется — перезапускать shorewall при каждом включении туннеля не нужно. ⚠️ Если новая версия клиента переименует TUN-интерфейс (не singbox_tun) — поправьте имя в /etc/shorewall/interfaces; текущее имя смотреть: ip -br link | grep -i tun. shorewall6 тоже активен, но не мешал (туннель IPv4-only; IPv6 в локальной сети ULA-only, без выхода в интернет, поэтому утечки мимо туннеля нет — dual-stack сайты падают обратно на IPv4 через туннель). Альтернатива — просто отключить фаервол (sudo systemctl disable --now shorewall shorewall6) — так было бы проще, но ноутбук останется без хостового фаервола в чужих/публичных сетях; зона vpn сохраняет защиту.

🔎 Теги для поиска: пропал интернет при включении vpn, dns не работает vpn linux, err_name_not_resolved vpn, shorewall vpn, tun интерфейс фаервол, v2rayn linux нет интернета, впн блокирует фаервол

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

6.3. Корректный синтаксис правил udev для устройств ввода

Симптом: при каждой загрузке и подключении устройств ввода в журнале появляются однотипные ошибки: setfacl: /dev/event9: Нет такого файла или каталога (exit code 1) — по числу event-узлов.

Причина: в правиле udev использовался путь /dev/%k. Шаблон %k подставляет только имя узла ядра (event9), в то время как узлы подсистемы ввода лежат в каталоге /dev/input/ (/dev/input/event9). Правильная конструкция — эталонная переменная окружения udev $env{DEVNAME}, которая всегда содержит полный путь. Пример из практики: правило, дающее пользовательскому демону голосовой диктовки доступ к устройствам ввода:

SUBSYSTEM=="input", KERNEL=="event*", RUN+="/usr/bin/setfacl -m u:<имя_пользователя>:rw $env{DEVNAME}"

Применение и проверка:

sudo udevadm control --reload-rules && sudo udevadm trigger --subsystem-match=input
getfacl /dev/input/event0    # должна появиться строка user:<имя_пользователя>:rw-

Ошибки в журнале после этого прекращаются полностью.

🔎 Теги для поиска: setfacl нет такого файла, ошибка udev setfacl event, udev правило не работает, setfacl /dev/event ошибка, права на устройства ввода linux

6.4. Отключение шумных служб: AnyDesk, модуль APM, отладочный Chrome

Аудит журналов загрузки (journalctl -b, dmesg) выявляет несколько «шумных» или бесполезных служб. Все правки безопасны и обратимы.

1) Аварийное падение службы AnyDesk. Системная служба anydesk.service при каждой загрузке запускается от root, аварийно завершается с дампом (systemd-coredump: Process (anydesk) of user 0 dumped core), непрерывно потребляет ~70 МБ памяти и засоряет журнал предупреждениями об устаревшем пути /var/run/anydesk.pid. Демон автозапуска отключается — при этом запуск клиентского GUI-приложения пользователем из меню приложений продолжает работать штатно, по требованию:

sudo systemctl disable --now anydesk.service

2) Ошибка несуществующего модуля APM. Служба загрузки модулей ядра сообщала modinfo: ERROR: Module apm not found. Причина — устаревший файл /etc/modules-load.d/apmd.conf: APM (Advanced Power Management) — стандарт конца 90-х, упразднённый в пользу ACPI; в 64-битных ядрах x86_64 модуля apm нет. Файл удаляется:

sudo rm -f /etc/modules-load.d/apmd.conf

3) Самооткрывающийся Chrome с портом отладки. При включении компьютера автоматически открывалось служебное окно браузера с белым экраном и портом отладки 9222 — в пользовательском каталоге автозапуска systemd оставался активный сервис ~/.config/systemd/user/chrome-debug.service, запускавший браузер в фоне. Сервис останавливается, отключается и удаляется:

systemctl --user stop chrome-debug.service
systemctl --user disable chrome-debug.service
rm -f ~/.config/systemd/user/default.target.wants/chrome-debug.service

🔎 Теги для поиска: anydesk падает при загрузке, systemd coredump anydesk, module apm not found, chrome открывается сам при загрузке, ошибка загрузки mageia journal, убрано лишнее из автозагрузки


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

7. Пакетная база, репозитории и локальная веб-разработка

7.1. Зеркала репозиториев: рассинхронизированное зеркало и выбор рабочего

Симптом: обновление встаёт с ошибкой «нет файлов» (404), либо urpmi показывает меньше обновлений, чем должно быть (в наблюдавшемся случае — 80 вместо 171: firefox, nss, rootcerts просто не доезжали).

Причина. Дистрибутив не имеет централизованного сервера пакетов и раздаётся через сеть сторонних зеркал. Установщик и mirrorlist выбирают географически ближайшее — в РФ это обычно mirror.yandex.ru, и оно может оказаться рассинхронизированным: метаданные (synthesis) перечисляют пакеты, которых на зеркале уже нет (HTTP 404), а ветка updates отстаёт на недели.

Как отличить битое зеркало от поломки системы — дёрнуть «пропавший» файл на двух зеркалах:

P=distrib/10/x86_64/media/tainted/updates/<имя-файла>.rpm
curl -sI https://mirror.yandex.ru/mageia/$P | head -1   # → 404
curl -sI https://ftp.fau.de/mageia/$P     | head -1   # → 200

404 на одном и 200 на другом = виновато зеркало; систему чинить не надо, надо менять зеркало.

⚠️ «Официальное» ≠ «рабочее». У Mageia нет собственного репозитория: на домене mageia.org пакетов нет вообще, проект раздаёт только через сеть сторонних зеркал — и Яндекс-зеркало точно так же «официальное», как любое другое. Подлинность пакетов гарантирует не хостер, а GPG-подпись Mageia (ключ 80420f66; проверка: rpm -K файл.rpmdigests signatures OK), так что бояться «неофициального» хоста не нужно — нужно бояться протухшего. ⚠️ Динамический mirrorlist тоже не спасает: официальный сервис www.mageia.org/mirrorlist для российских IP сам подсовывает то же зеркало.

Выбор зеркала по скорости. Список всех зеркал: curl -s 'https://mirrors.mageia.org/api/mageia.10.x86_64.list'. Замер на практике (качался один и тот же RPM с нескольких зеркал):

зеркалоскорость
ftp.fau.de (DE, Эрланген)3.2 МБ/с ← выбрано
mirror.accum.se (SE)3.0
www.mirrorservice.org (UK)2.7
mirrors.cicku.me (DE)2.7
ftp.icm.edu.pl (PL)2.4
mirrors.kernel.org (US)0.9
distrib-coffee.ipsl.jussieu.fr (FR)0.4

1) urpmi — им обновляется система:

sudo cp /etc/urpmi/urpmi.cfg /root/urpmi.cfg.backup        # бэкап
sudo urpmi.removemedia -a                                   # снести все медиа (их могло накопиться ~45)
sudo urpmi.addmedia --distrib https://ftp.fau.de/mageia/distrib/10/x86_64
sudo urpmi.update -a
urpmq --list-media active --list-url                        # проверка: 6 медиа, все на выбранном зеркале

Активными должны стать ровно 6: Core / Nonfree / Tainted × Release + Updates. 32-битные (i686) и debug/testing/backports медиа addmedia заводит сам и сразу помечает ignore — так и надо (i586-пакетов в 64-битной системе нет ни одного).

2) dnf — им обычно ставятся сторонние браузеры и проприетарный софт. Его Mageia-репы (/etc/yum.repos.d/mageia*.repo) ходят через тот же mirrorlist, то есть тоже могут угодить на проблемное зеркало. Прибиваем baseurl (в файлах есть заготовленная закомментированная строка #baseurl=, правится одним sed):

sudo mkdir -p /root/repo-backup && sudo cp -a /etc/yum.repos.d/mageia*.repo /root/repo-backup/
sudo sed -i -e 's|^#baseurl=https://mirrors\.kernel\.org/mageia/|baseurl=https://ftp.fau.de/mageia/|' \
            -e 's|^mirrorlist=|#mirrorlist=|' /etc/yum.repos.d/mageia*.repo
sudo dnf clean metadata && sudo dnf check-update --refresh
sudo dnf repoinfo updates-x86_64 | grep -i 'base url'      # → https://ftp.fau.de/...

⚠️ Не трогать yandex-disk.repo и yandex-browser.repo в /etc/yum.repos.d/ — это репозитории софта Яндекса (Диск, Браузер), а не зеркала Mageia; снесёте — их софт перестанет обновляться.

Откат: вернуть файлы из бэкапов (/root/repo-backup/, /root/urpmi.cfg.backup) или повторить urpmi.addmedia --distrib с адресом другого зеркала из таблицы.

🔎 Теги для поиска: mageia 404 при обновлении, urpmi ошибка загрузки пакета, зеркало mageia, mageia медленно обновляется, dnf 404 mageia, заменить зеркало репозитория mageia, обновления не устанавливаются

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

7.2. Установка сторонних RPM-пакетов (в том числе собранных под RHEL/Fedora)

Сторонние RPM (Chrome, Opera, Vivaldi, Яндекс.Браузер, Zoom, AnyDesk, OnlyOffice, VS Code…) в Mageia ставятся так: пакет, подписанный вендором, ставится через dnf install ./файл.rpm — dnf сам тянет недостающие зависимости из репозиториев Mageia, в отличие от голого rpm -i.

Проверка и импорт GPG-ключей — обязательно. После установки проверяйте подпись: должно быть digests signatures ОК, а не NOKEY / SIGNATURES НЕ ОК:

rpm -K /path/pkg.rpm
rpm -q gpg-pubkey --qf '%{version}\t%{summary}\n'   # что уже импортировано

Рабочие URL ключей (скачать → gpg --show-keys --keyid-format long — сверить ID → sudo rpm --import):

вендорURL ключаID ключа
AnyDeskhttps://keys.anydesk.com/repos/RPM-GPG-KEYA8772835
Zoomhttps://zoom.us/linux/download/pubkey ⚠️ голый URL!4F2197399706AC24
Яндекс.Дискhttps://repo.yandex.ru/yandex-disk/YANDEX-DISK-KEY.GPG7C90E5AF
Microsoft / VS Codehttps://packages.microsoft.com/keys/microsoft.ascEB3E94ADBE1229CF
OnlyOffice, NoMachineпакеты не подписываются — импортировать нечего

⚠️ У Zoom URL с параметром ?version=... отдаёт старый ключ — нужен именно голый URL.

Грабли с ключами и репозиториями на Mageia:

  1. Блокировка базы rpm: %post-скрипты пакета, делающие rpm --import во время транзакции, падают (can't create transaction lock). Решение — импортировать ключ вручную после установки.
  2. Вендор не знает Mageia: например, установщик Opera (/usr/lib64/opera-stable/setup_repo.sh) распознаёт только Fedora/SUSE и репозиторий не создаёт. Решение — запустить этот скрипт вручную (он импортирует ключи), а repo-файл создать руками.
  3. VS Code RPM тоже не создаёт репозиторий на Mageia — создать вручную /etc/yum.repos.d/vscode.repo:
[code]
name=Visual Studio Code
baseurl=https://packages.microsoft.com/yumrepos/vscode
enabled=1
gpgcheck=1
gpgkey=https://packages.microsoft.com/keys/microsoft.asc

Проверка репозитория: dnf -q --refresh list code.

RPM, собранный под RHEL/Fedora (например, OnlyOffice .el7). Зависимости указаны по именам пакетов RHEL (gtk3, libX11, atk, xcb-util-*, *-fonts), которых в Mageia нет под такими именами, хотя сами библиотеки (.so) в системе есть → dnf install ругается «ничто не предоставляет…». Решение — установка с пропуском проверки имен зависимостей и обязательной проверкой реальных библиотек:

sudo rpm -Uvh --nodeps ./package-name.rpm
ldd /path/to/binary | grep 'not found'   # пусто = все библиотеки на месте
QT_QPA_PLATFORM=offscreen /usr/bin/<программа> --version   # должна вывести версию

Если вывод ldd пуст и программа отвечает на --version — приложение полностью готово к работе.

🔎 Теги для поиска: установить rpm mageia, rpm для fedora на mageia, ничто не предоставляет mageia, rpm nodeps, проверка gpg подписи rpm, rpm подпись not ok, onlyoffice на mageia, vscode repo mageia

7.3. Каталог Flatpak / Flathub

Flatpak в Mageia 10 обычно уже установлен; подключаем системно каталог Flathub и магазин приложений KDE (flatpak-бэкенд встроен в Discover, пакет flatpak-kcm — права Flatpak в Параметрах системы):

sudo flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
sudo dnf install -y discover flatpak-kcm
sudo flatpak update --appstream
flatpak search telegram     # проверка

🔎 Теги для поиска: установить flatpak mageia, подключить flathub, магазин приложений kde discover, flathub mageia

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

7.4. Поддержка RAR в архиваторе Ark (создание архивов)

Суть. Ark открывает RAR-архивы, но в диалоге создания пункта «Архив RAR» нет. Дело не в Ark: плагин kerfuffle_clirar.so уже установлен — режим записи он включает, только если найдёт в PATH бинарник rar (для чтения ему достаточно unrar). А rar — проприетарный инструмент RARLAB, в репозиториях Mageia его нет вообще (проверено: Core, Nonfree и Tainted подключены — пусто; есть только unrar из nonfree). Замены бинарнику не существует: ни 7zip, ни libarchive RAR-формат не создают — формат закрытый.

Ручная установка официального бинарного пакета RARLAB (актуальную версию тарбола смотреть на https://www.rarlab.com/download.htm; в примере — 7.23):

cd /tmp
curl -fSLO https://www.rarlab.com/rar/rarlinux-x64-723.tar.gz
tar xzf rarlinux-x64-723.tar.gz && cd rar

# ⚠️ НЕ делать 'make install': их makefile кладёт в /usr/local/bin ещё и свой unrar,
#    а /usr/local/bin идёт в PATH РАНЬШЕ /usr/bin — он перекрыл бы пакетный обновляемый unrar.
#    Ставим только то, что нужно Ark:
sudo install -Dm755 rar          /usr/local/bin/rar          # ← именно его ищет плагин clirar
sudo install -Dm755 default.sfx  /usr/local/lib/default.sfx  # модуль самораспаковки (SFX)
sudo install -Dm644 rarfiles.lst /etc/rarfiles.lst
sudo install -Dm644 license.txt  /usr/local/share/doc/rar/license.txt

Проверка: rar -iver7.23. Ark подхватывает бинарник при следующем запуске (наличие rar проверяется при загрузке плагинов) — уже открытый Ark нужно перезапустить. После этого в «Создание нового архива → Тип» появляется «Архив RAR»; пароль на архив и SFX работают.

⚠️ rar — trialware: формально бесплатен 40 дней, дальше начинает печатать напоминание о лицензии (создавать архивы не перестаёт). И это не пакет — автообновлений не будет, новые версии качать руками.

Откат:

sudo rm -f /usr/local/bin/rar /usr/local/lib/default.sfx /etc/rarfiles.lst
sudo rm -rf /usr/local/share/doc/rar

🔎 Теги для поиска: как создать rar в linux, нет пункта rar в ark, rar mageia, ark не создаёт rar, unrar работает rar нет, создать rar архив linux

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

7.5. Развёртывание нативного локального LAMP-стека (Apache + PHP-FPM + MariaDB + phpMyAdmin)

Полноценный локальный стек веб-разработки только из родных репозиториев, без сторонних — аналог классического Debian-стека, переложенный на Mageia. Версии на момент настройки: Apache 2.4.67, PHP 8.5.6 (FPM), MariaDB 12.2.2 (позже обновилась до 12.3.2), phpMyAdmin 5.2.3.

Ключевые отличия Mageia от Debian (что переучивать, если стек раньше ставился на Debian): сервис называется httpd (не apache2), системный пользователь apache (не www-data); нет a2ensite/a2enmod — виртуальные хосты просто кладутся в /etc/httpd/conf/sites.d/*.conf, подключение модулей — в modules.d/*.conf; PHP версионный (пакеты вида php8.5-*), общий каталог ini для CLI и FPM — /usr/lib64/php/8.5/ini/; связка FPM↔Apache готова из пакета php8.5-fpm-apache; системное доверие к CA — update-ca-trust + /etc/pki/ca-trust/source/anchors/ (не update-ca-certificates).

7.5.1. Установка пакетов

sudo dnf install -y apache apache-mod_ssl apache-mod_http2 apache-mod_proxy \
  php8.5-{cli,fpm,fpm-apache,common,openssl,mysqlnd,pdo_mysql,mysqli,pdo_pgsql,pgsql,sqlite3,pdo_sqlite,mbstring,intl,dom,xmlreader,xmlwriter,xsl,curl,zip,gd,imagick,bcmath,gmp,bz2,soap,apcu,redis,ldap,readline,gettext,exif,fileinfo,ftp,iconv,calendar,ctype,filter,sodium,tokenizer,phar,posix,sockets,sysvsem}
# если MariaDB не установлена: sudo dnf install -y mariadb mariadb-client

Примечание: json, opcache и simplexml отдельными пакетами НЕ ставятся — они в ядре (php8.5-common); искать их пакетами бесполезно.

🔎 Теги: установить php mageia, php-fpm mageia, apache mageia пакет, lamp установка, mariadb mageia

7.5.2. Apache: MPM event (нужен для FPM) + HTTP/2 + ServerName

# prefork → event (все MPM в базовом пакете, выбор — правкой этой строки):
sudo sed -i 's|^LoadModule mpm_prefork_module.*|LoadModule mpm_event_module modules/mod_mpm_event.so|' \
  /etc/httpd/conf/modules.d/00_mpm.conf
# глобальные ServerName + HTTP/2:
sudo tee /etc/httpd/conf/conf.d/zz-local.conf >/dev/null <<'EOF'
ServerName localhost
Protocols h2 h2c http/1.1
EOF

Модули mod_proxy, mod_proxy_fcgi, mod_ssl, mod_http2 подгружаются пакетами сами; Apache уже слушает :80 и :443 (mod_ssl). Проверка: sudo apachectl configtest, MPM — apachectl -V | grep MPM (должно быть event).

🔎 Теги: apache mpm event php-fpm, http2 apache mageia, апач prefork заменить event

7.5.3. PHP: тюнинг под CMS (общий для CLI и FPM)

Файл именуется с префикса zz_, чтобы парситься последним в /usr/lib64/php/8.5/ini/ и перекрывать дефолты:

sudo tee /usr/lib64/php/8.5/ini/zz_cms.ini >/dev/null <<'EOF'
memory_limit = 512M
upload_max_filesize = 256M
post_max_size = 256M
max_execution_time = 300
max_input_time = 300
max_input_vars = 5000
date.timezone = Asia/Yekaterinburg
expose_php = Off
opcache.enable = 1
opcache.enable_cli = 0
opcache.memory_consumption = 256
opcache.interned_strings_buffer = 16
opcache.max_accelerated_files = 20000
opcache.validate_timestamps = 1
opcache.revalidate_freq = 2
EOF

Пул FPM /etc/php-fpm.d/www.conf уже задан правильно из пакета (user/group=apache, listen=/var/lib/php-fpm/php-fpm.sock) — трогать не требуется.

🔎 Теги: php ini настройки mageia, opcache настройка, php fpm пул, php.ini где mageia

7.5.4. MariaDB: utf8mb4 + отключение cracklib + запуск

# ⚠️ Имя zz-cms.cnf намеренно: drop-in в /etc/my.cnf.d/ должен сортироваться ПОСЛЕДНИМ,
#    иначе пакетные файлы перебьют max_allowed_packet.
sudo tee /etc/my.cnf.d/zz-cms.cnf >/dev/null <<'EOF'
[mysqld]
character-set-server    = utf8mb4
collation-server        = utf8mb4_unicode_ci
innodb_file_per_table   = 1
innodb_buffer_pool_size = 512M
max_allowed_packet      = 256M

# Отключить cracklib_password_check — иначе CREATE USER / SET PASSWORD с простым
# паролем падает (ERROR 1819); мешает мастерам установки CMS. На Debian плагина нет.
# ⚠️ Отключать именно ОПЦИЕЙ и именно в НАШЕМ файле: трюк с переименованием пакетного
# cracklib_password_check.cnf НЕ переживает обновлений MariaDB — RPM восстанавливает
# «пропавший» %config (возвращался после апдейта MariaDB, вскрылось как внезапный
# ERROR 1819 при настройке phpMyAdmin).
# loose- = «молча пропустить, если плагина вдруг нет» (без него неизвестная опция
# не даст mysqld стартовать, случись Mageia выкинуть плагин из пакета).
loose-cracklib_password_check = OFF
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
EOF
sudo systemctl enable --now mysqld && sudo systemctl restart mysqld

Проверка: sudo mariadb -e "SHOW PLUGINS;" | grep -i crackDISABLED (или пусто). Root в БД — через unix_socket: sudo mariadb без пароля (для phpMyAdmin у root появится ещё и обычный пароль — см. 7.5.10).

🔎 Теги: error 1819 mysql, cracklib mariadb, mariadb utf8mb4 mageia, mysql пароль слишком простой, mariadb настройка mageia

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

7.5.5. Локальный CA и HTTPS-сертификаты (замена mkcert — его в репозиториях нет)

Готовый скрипт newcert <домен> [SAN...] (openssl + certutil) создаёт корневой CA (~/.local/share/local-ca/), добавляет его в доверенные (система + NSS/Chrome + Firefox) и выпускает сертификат сайта в /etc/pki/tls/local/. Первый запуск скрипта = создание CA. Если скрипта нет (чистая переустановка), одноразовый bootstrap CA вручную:

CAROOT=~/.local/share/local-ca; mkdir -p "$CAROOT"; chmod 700 "$CAROOT"
openssl genrsa -out "$CAROOT/rootCA-key.pem" 3072; chmod 400 "$CAROOT/rootCA-key.pem"
openssl req -x509 -new -nodes -key "$CAROOT/rootCA-key.pem" -sha256 -days 3650 \
  -subj "/O=local dev/CN=local dev CA" \
  -addext "basicConstraints=critical,CA:TRUE" -addext "keyUsage=critical,keyCertSign,cRLSign" \
  -out "$CAROOT/rootCA.pem"
sudo install -m0644 "$CAROOT/rootCA.pem" /etc/pki/ca-trust/source/anchors/local-dev-ca.pem
sudo update-ca-trust                                            # доверие для curl/PHP/wget
certutil -d sql:$HOME/.pki/nssdb -A -t "C,," -n "local dev CA" -i "$CAROOT/rootCA.pem"  # Chrome
for p in ~/.mozilla/firefox/*/; do [ -f "$p/cert9.db" ] && certutil -d "sql:$p" -A -t "C,," -n "local dev CA" -i "$CAROOT/rootCA.pem"; done  # Firefox

Затем выпуск сертификата сайта — просто newcert demo.offline "*.demo.offline". ⚠️ Открытый в момент добавления CA браузер увидит новый корень только после перезапуска.

🔎 Теги: локальный https сертификат linux, mkcert аналоги, локальный центр сертификации, https на localhost, доверенный ca браузер linux, newcert

7.5.6. Сайт demo.offline: hosts + docroot + БД + виртуальный хост

grep -q 'demo.offline' /etc/hosts || echo '127.0.0.1  demo.offline' | sudo tee -a /etc/hosts
sudo mkdir -p /var/www/demo.offline/public
echo '<?php phpinfo();' | sudo tee /var/www/demo.offline/public/index.php
sudo chown -R apache:apache /var/www/demo.offline
# БД + пользователь:
sudo mariadb <<'SQL'
CREATE DATABASE IF NOT EXISTS demo CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER IF NOT EXISTS 'demo'@'localhost' IDENTIFIED BY 'demo';
GRANT ALL PRIVILEGES ON demo.* TO 'demo'@'localhost'; FLUSH PRIVILEGES;
SQL

Виртуальный хост /etc/httpd/conf/sites.d/demo.offline.conf:80 перенаправляет на HTTPS, :443 — SSL + HTTP/2 + .htaccess:

<VirtualHost *:80>
    ServerName demo.offline
    DocumentRoot /var/www/demo.offline/public
    RewriteEngine On
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    ErrorLog  /var/log/httpd/demo.offline_error.log
    CustomLog /var/log/httpd/demo.offline_access.log combined
</VirtualHost>
<VirtualHost *:443>
    ServerName demo.offline
    DocumentRoot /var/www/demo.offline/public
    Protocols h2 http/1.1
    SSLEngine on
    SSLCertificateFile    /etc/pki/tls/local/demo.offline.crt
    SSLCertificateKeyFile /etc/pki/tls/local/demo.offline.key
    # PHP сайта обслуживает ИЗОЛИРОВАННЫЙ пул (см. 7.5.7), переопределяя глобальный
    # обработчик из modules.d/10_php-fpm.conf:
    <FilesMatch \.php$>
        SetHandler "proxy:unix:/run/php-fpm/demo.offline.sock|fcgi://localhost/"
    </FilesMatch>
    <Directory /var/www/demo.offline/public>
        Options FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
    ErrorLog  /var/log/httpd/demo.offline_ssl_error.log
    CustomLog /var/log/httpd/demo.offline_ssl_access.log combined
</VirtualHost>
sudo systemctl enable --now php-fpm httpd

🔎 Теги: apache виртуальный хост mageia, локальный сайт https, self-signed сертификат, htaccess локальный сайт, vhost настройка mageia

7.5.7. Изоляция сайта через open_basedir (PHP заперт в каталоге сайта)

Правильный способ для FPM — отдельный пул с php_admin_value (значение не переопределяется из скрипта через ini_set). PHP этого сайта не может читать/писать за пределами /var/www/demo.offline/ — ни /etc, ни /home, ни другие сайты. Сессии/загрузки/temp кладутся внутрь джейла (иначе open_basedir их заблокирует), в каталог tmp/ рядом с public/ (не под ним — по HTTP не отдаётся):

sudo mkdir -p /var/www/demo.offline/tmp/{session,upload}
sudo chown -R apache:apache /var/www/demo.offline/tmp
sudo chmod 700 /var/www/demo.offline/tmp /var/www/demo.offline/tmp/{session,upload}

Пул /etc/php-fpm.d/demo.offline.conf:

[demo.offline]
user = apache
group = apache
listen = /run/php-fpm/demo.offline.sock
listen.owner = apache
listen.group = apache
listen.mode = 0660
pm = ondemand
pm.max_children = 10
pm.process_idle_timeout = 10s
pm.max_requests = 500
php_admin_value[open_basedir]      = /var/www/demo.offline/
php_admin_value[session.save_path] = /var/www/demo.offline/tmp/session
php_admin_value[upload_tmp_dir]    = /var/www/demo.offline/tmp/upload
php_admin_value[sys_temp_dir]      = /var/www/demo.offline/tmp
sudo systemctl restart php-fpm && sudo systemctl reload httpd

Три проверенных нюанса: open_basedir обязан заканчиваться / (иначе префикс совпадёт и с соседним каталогом вида /var/www/demo.offline-evil); open_basedir не мешает подключению к MariaDB через unix-сокет (localhost) — проверено; проверка джейла — временный <?php var_dump(@file_get_contents('/etc/hostname')); в public/ должен вернуть false (заблокировано), а scandir(__DIR__) — работать.

🔎 Теги: open_basedir изоляция php, изолировать php сайт, php fpm отдельный пул, безопасность php-fpm, php может читать /etc

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

7.5.8. Новый сайт по образцу (шаблонизация конфигов)

D=shop.offline
newcert "$D" "*.$D"                                   # сертификат
echo "127.0.0.1  $D" | sudo tee -a /etc/hosts
sudo mkdir -p /var/www/$D/public /var/www/$D/tmp/{session,upload}
sudo chown -R apache:apache /var/www/$D
sudo sed "s/demo\.offline/$D/g" /etc/httpd/conf/sites.d/demo.offline.conf | sudo tee /etc/httpd/conf/sites.d/$D.conf
sudo sed "s/demo\.offline/$D/g" /etc/php-fpm.d/demo.offline.conf         | sudo tee /etc/php-fpm.d/$D.conf
sudo systemctl restart php-fpm && sudo apachectl configtest && sudo systemctl reload httpd

🔎 Теги: добавить сайт apache mageia, второй сайт php-fpm, шаблон vhost

7.5.9. Проверка стека

systemctl is-active httpd php-fpm mysqld              # active ×3
curl -sI http://demo.offline/                         # 301 → https
curl -sS -o /dev/null -w '%{http_code} verify=%{ssl_verify_result} h%{http_version}\n' https://demo.offline/
# 200 verify=0 h2

verify=0 = сертификат доверенный (curl работает без -k). Логи сайта — /var/log/httpd/demo.offline_*.

🔎 Теги: проверить https локально, curl ssl verify, lamp проверка

7.5.10. phpMyAdmin — https://pma.offline

Пакет есть в родном репозитории (phpmyadmin, noarch) — ставим им, обновляется вместе с системой. Зависимость php-webinterface уже закрыта нашим php8.5-fpm-apache — mod_php не притянется. Пакет даёт: код в /usr/share/phpmyadmin, конфиг /etc/phpmyadmin/config.inc.php (root:apache 0640; %config — правки переживают обновления, новая версия приезжает .rpmnew-файлом), каталоги /var/lib/phpmyadmin/{config,save,upload} и глобальный Alias /phpmyadmin в sites.d/phpmyadmin.conf.

Alias отключаем — иначе /phpmyadmin вылезает на всех виртуальных хостах и упирается в их open_basedir; вместо него полноценный хост по образцу 7.5.6–7.5.8:

sudo dnf install -y phpmyadmin
sudo sed -i 's|^Alias /phpmyadmin|#Alias /phpmyadmin|' /etc/httpd/conf/sites.d/phpmyadmin.conf
newcert pma.offline
grep -q 'pma.offline' /etc/hosts || echo '127.0.0.1  pma.offline' | sudo tee -a /etc/hosts
# temp/сессии/загрузки — внутрь будущего джейла:
sudo mkdir -p /var/lib/phpmyadmin/tmp/{session,upload}
sudo chown -R apache:apache /var/lib/phpmyadmin
sudo chmod 700 /var/lib/phpmyadmin/tmp /var/lib/phpmyadmin/tmp/{session,upload}

Пул /etc/php-fpm.d/pma.offline.conf — копия demo-шного (7.5.7) с заменой путей: сокет /run/php-fpm/pma.offline.sock, session.save_path=/var/lib/phpmyadmin/tmp/session, upload_tmp_dir=/var/lib/phpmyadmin/tmp/upload, sys_temp_dir=/var/lib/phpmyadmin/tmp, а джейл — из трёх корней:

php_admin_value[open_basedir] = /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/

Виртуальный хост /etc/httpd/conf/sites.d/pma.offline.conf — копия demo-шного с заменой имени (логи, сертификат, сокет в SetHandler), DocumentRoot /usr/share/phpmyadmin (без /public) и — раз это админка — в <Directory /usr/share/phpmyadmin> вместо Require all granted:

<RequireAny>
    Require ip 127.0.0.1
    Require ip ::1
</RequireAny>

БД. Вход в phpMyAdmin — по паролю; root для этого получает пароль вторым методом аутентификации: SET PASSWORD вписывает пароль в метод mysql_native_password цепочки mysql_native_password OR unix_socket, НЕ трогая unix_socket — sudo mariadb без пароля работает как раньше. Плюс служебный пользователь и БД «хранилища настроек» phpMyAdmin (закладки, история SQL, связи, шаблоны экспорта):

sudo mariadb -e "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('<пароль>');"
sudo mariadb -e "CREATE USER IF NOT EXISTS 'pma'@'localhost' IDENTIFIED BY '<пароль-pma>';
                 GRANT SELECT, INSERT, UPDATE, DELETE ON \`phpmyadmin\`.* TO 'pma'@'localhost';"
sudo mariadb < /usr/share/phpmyadmin/sql/create_tables.sql      # БД phpmyadmin, 19 pma__-таблиц

(Если тут ERROR 1819 — вернулся cracklib, перечитать 7.5.4.)

Конфиг /etc/phpmyadmin/config.inc.php (переписывается целиком по мотивам пакетного образца): auth_type=cookie, host=localhost (= unix-сокет), свежий blowfish_secret ровно в 32 байта (openssl rand -base64 24), раскомментирован весь блок configuration storage (controluser=pma / controlpass=<пароль>, pmadb=phpmyadmin и все pma__*-таблицы) и:

$cfg['TempDir'] = '/var/lib/phpmyadmin/tmp';      // ⚠️ Mageia-сборка целит в /tmp: под джейлом
                                                  //    и PrivateTmp php-fpm это мимо → без своего
                                                  //    TempDir нет twig-кэша и сыплются warning'и
$cfg['UploadDir'] = '/var/lib/phpmyadmin/upload'; // импорт файлов «с сервера»
$cfg['SaveDir'] = '/var/lib/phpmyadmin/save';     // экспорт «на сервер»
$cfg['VersionCheck'] = false;                     // версию обновляет dnf, звонки на сайт phpMyAdmin не нужны

Применить и проверить:

sudo systemctl restart php-fpm && sudo apachectl configtest && sudo systemctl reload httpd
curl -sS -o /dev/null -w '%{http_code} verify=%{ssl_verify_result} h%{http_version}\n' https://pma.offline/  # 200 verify=0 h2

Вход: root СУБД (вся база) или любой пользователь БД (demo/…). Сессии и twig-кэш ложатся в /var/lib/phpmyadmin/tmp/ — заодно признак, что пул с джейлом подхватился.

🔎 Теги: phpmyadmin mageia, phpmyadmin установка linux, pma temp dir, configuration storage phpmyadmin, blowfish_secret, phpmyadmin https локально, ошибка 1819 phpmyadmin


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

8. Искусственный интеллект: запуск локальных нейросетей (Ollama) на графике Intel Arc

Ollama ставится официальным скриптом install.sh в /usr/local (не RPM-пакет — обновляется перезапуском скрипта). Начиная с версии ~0.32 он несёт бэкенд вычислений на Vulkan (/usr/local/lib/ollama/vulkan/), и тот включён по умолчанию — но встроенные видеоядра отбрасываются, пока их явно не разрешить. Драйвер — штатный Mesa ANV (пакет lib64mesavulkan-drivers), ничего «интеловского» доставлять не нужно; пользователь ollama должен быть в группах render/video (install.sh делает это сам).

Для принудительного задействования встроенного графического ускорителя создаётся drop-in службы (переживает обновления ollama):

sudo mkdir -p /etc/systemd/system/ollama.service.d
printf '[Service]\nEnvironment="OLLAMA_IGPU_ENABLE=1"\n' | sudo tee /etc/systemd/system/ollama.service.d/igpu.conf
sudo systemctl daemon-reload && sudo systemctl restart ollama

Проверка: в журнале должно появиться inference compute … library=Vulkan … type=iGPU, а не строка dropping integrated GPU:

journalctl -u ollama -b | grep -iE 'dropping|inference compute' | tail -3

Встроенный GPU получает ~75 % ОЗУ как видеопамять (23 ГиБ из 32 в наблюдавшейся конфигурации); модели ~23 ГиБ идут гибридно GPU+CPU. Предвыборка (prefill) быстрее в разы, генерация упирается в пропускную способность DDR5 — зато центральный процессор остаётся свободен.

Практический вывод по производительности (проверено замерами): оставлен режим CPU-only (OLLAMA_IGPU_ENABLE=0 в том же drop-in — переменная служит и выключателем). Модели на 35 млрд параметров (q4, 21–23 ГиБ) целиком в память iGPU не влезают, и гибрид GPU+CPU оказался заметно медленнее чистого CPU; MoE-модели и на CPU работают быстро. GPU-режим (=1 + daemon-reload + restart) имеет смысл пробовать для плотных моделей, целиком влезающих в ~20 ГиБ. Переключать режимы удобно автоматизированным скриптом-тумблером (правит drop-in, перезапускает службу и уведомляет kdialog’ом о фактическом режиме; право перезапуска выдаётся через /etc/sudoers.d/ с NOPASSWD только на конкретный хелпер-скрипт, с обязательной проверкой visudo -c).

🔎 Теги для поиска: ollama не видит gpu intel, ollama vulkan intel arc, ollama медленно на linux, встроенная графика ollama, intel arc нейросеть локально, ollama igpu

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

Всё, можно ломать. Это мои наработки по настройке и тюнингу Mageia 10, тут есть ряд нихуя не очевидных проблем, решил поделится наработками с сообществом, что никто больше не наступал на те же грабли.

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

Да и так пойдет. Главное чтобы те кто столкнулись с такими же проблемами, что и я, могли найти решения через поиск, для этого спецом указаны теги в конце каждой проблемы.

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

Да не готов я. Итак задолбался пока агент мне все эти хаки с моей системы наскребал в статью, потом задобалься публиковать. Главную задачу я выполнил: поделится наработками по Mageia 10. Кому надо будет, найдут, остальное побоку.

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

Объясни смысл движения с thermald. Каким магическим образом получается что одно и то же количество ядер на частоте 400 МГц потребляет 40-50 Вт, а на частоте 2800 МГц - 28 Вт?

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

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

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