Оверлей с FPS, температурами и частотами GPU не встроен в игру — его рисует слой Vulkan, который подмешивается в цепочку вызовов API. На Arch Linux такую картину даёт MangoHud, а LACT отвечает за другую сторону дел: температуру, вентиляторы, лимит питания и андервольт на картах AMD. Оба ставятся из репозитория, не конфликтуют друг с другом и вместе дают полную картину нагрузки.
Vulkan-приложение само не рисует счётчик кадров — этим занимается слой загрузчика. vkloader при старте читает манифесты из /usr/share/vulkan/explicit_layer.d/ и /usr/share/vulkan/implicit_layer.d/, а переменная VK_LAYER_PATH меняет каталог поиска. Слой подменяет часть функций Vulkan API, поэтому видит тайминги кадров и параметры GPU, не меняя логику самой игры.
Слои делятся на два типа. Явные (explicit) включаются по запросу приложения или через переменные окружения. Неявные (implicit) подхватываются всегда, без чьего-либо запроса, и живут в системных каталогах. MangoHud кладёт манифесты в оба каталога, поэтому работает и как явный слой (mangohud game), и как неявный, если сделать симлин.
Если слой не подхватывается, начинать отладку лучше не с MangoHud, а с драйвера и выбора Vulkan-движка — про RADV, VK_ICD_FILENAMES, VK_DRIVER_FILES и связку с Steam читайте в материале про настройку amdgpu и Mesa для игр.
sudo pacman -S mangohud lib32-mangohud
Нативным 64-битным играм хватает пакета mangohud, а 32-битным (Steam Linux Runtime 32, часть Wine-префиксов) нужен lib32-mangohud. Без него оверлей просто не появится, ошибок в логах тоже не будет.
Проверка перед запуском игр:
mangohud vkcube
mangohud --dlsym vkcube
Ключ --dlsym заставляет MangoHud перехватывать вызовы через dlsym вместо Vulkan-слоя — запасной путь для игр и портов, которые грузят драймин свой слой или обходят загрузчик.
В Steam оверлей подключается через «Настройка» → «Параметры запуска»:
mangohud %command%
Ничего глобального менять не нужно: оверлей включается только в этой игре и так же легко выключается удалением строки. Если слои лежат в нестандартном месте, укажи путь явно, иначе загрузчик перестанет их находить:
export VK_LAYER_PATH=/usr/share/vulkan/explicit_layer.d
mangohud vkcube
Оверлей настраивается без перезапуска: правишь файл и сохраняешь, изменения подхватываются на следующем запуске игры.
mkdir -p ~/.config/MangoHud
nano ~/.config/MangoHud/MangoHud.conf
# ~/.config/MangoHud/MangoHud.conf
fps
fps_limit=0
gpu_stats
cpu_stats
ram
vram
temp
refresh_rate=1
fps_max=240
fontsize=20
position=top_left
background_alpha=0.5
fps_limit=0 отключает лимит, положительное значение задаёт потолок, а fps_limit=-1 только показывает текущий лимит, не ограничивая кадры. refresh_rate — период опроса в секундах, fps_max — верхняя граница графика, position принимает девять значений от top_left до bottom_right, background_alpha — прозрачность фона от 0 до 1. Полный список с описаниями выдаёт mangohud --list-options, а хоткеи (toggle_fps, toggle_fps_only, toggle_hud) настраиваются в том же файле. Если игра или лаунчер сбрасывают окружение, помогает MANGOHUD_CONFIG=1 — заставить читать файл конфигурации.
Про то, когда лимит кадров полезнее, чем разгон частот, — в разборе низкой частоты кадров на Ryzen iGPU.
MangoHud только показывает цифры, а вот управлять ими позволяет LACT — утилита для карт AMD, которая через sysfs драйвера меняет кривую вентиляторов, лимит питания, рабочие состояния и, где позволяет ядро, напряжение.
sudo pacman -S lact
systemctl --user enable --now lactd
lact show
Демон живёт в пользовательской сессии (lactd.service), команда lact show выводит текущее состояние в терминал, а lact без аргументов открывает графический интерфейс. Проект переехал в организацию kgpu-dev, и свежие сборки лежат именно там, вместе с поддержкой NVIDIA.
В окне LACT полезны четыре блока:
pp_dpm. Занижаешь для тихого режима, поднимаешь ради стабильного буста.pp_od_clk_voltage. Поля остаются серыми, если драйвер или версия ядра не отдают нужные дескрипторы, и никакой твик это не обойдёт.Те же значения можно зашить в конфиг (по умолчанию /etc/lact/config.toml) и применять без графического окна. На NVIDIA аналогичные ручки крутятся через Coolbits — разбор есть в статье про перегрев и вентиляторы Coolbits.
Схема простая: LACT работает как системный демон и меняет состояние железа независимо от способа запуска, а MangoHud подключается к конкретной игре. Поэтому параметр запуска нужен только для оверлея:
gamemoderun mangohud %command%
Если геймлаунч идёт через gamescope, оверлей лучше вставить внутрь команды — снаружи gamescope его не увидит:
gamescope -f -- mangohud %command%
Для отдельных случаев хватает переменных окружения: MANGOHUD=0 отключает оверлей, MANGOHUD_CONFIG=<путь> подключает отдельный конфиг, а MANGOHUD=1 включает слой принудительно, если игра пытается его выключить. Кривую вентиляторов и лимит питания через launch options не передать, они живут в демоне LACT.
Самый частый способ испортить себе оверлей — вписать слой в переменные окружения глобально:
export VK_INSTANCE_LAYERS=VK_LAYER_MangoHud
Так делать не стоит по трём причинам. Переменная достаётся каждому процессу в системе, включая композитор Wayland, утилиты вулкана и фоновые службы. Она заменяет список слоёв, который приложение передало загрузчику, из-за чего теряются другие полезные слои. И если баг в слое роняет игру, отключить слой точечно не выйдет. У современного загрузчика есть более аккуратные VK_LOADER_LAYERS_ENABLE и VK_LOADER_LAYERS_DISABLE.
Если оверлей нужен во всех Vulkan-играх разом, включи слой как неявный:
ls /usr/share/vulkan/*_layer.d/
sudo mkdir -p /etc/vulkan/implicit_layer.d
sudo ln -s /usr/share/vulkan/explicit_layer.d/MangoHud.json \
/etc/vulkan/implicit_layer.d/MangoHud.json
Путь к манифесту слегка отличается от версии к версии, поэтому сначала проверь, что лежит в explicit_layer.d. Сбросить оверлей для отдельных игр и лаунчеров проще всего переменной MANGOHUD=0, а для портов, которые игнорируют слой, помогает mangohud --dlsym %command%.
Разработчики MangoHud говорят об одном проценте потерь, и в большинстве игр это правда. Реальные 2–5% встречаются в сценах, упирающихся в CPU: там кадр и так на пределе, и опрос слоя съедает часть бюджета времени. В GPU-bound сценах оверлей почти невидим, потому что простаивающий GPU скрывает его нагрузку.
Дешевле всего «голый» счётчик кадров, дороже всего всё сразу: cpu_stats, vram, ram плюс частый опрос. Что можно урезать:
refresh_rate до 2–5 секунд;cpu_stats и vram, если не ловишь конкретную проблему;autostart_log и log_interval без нужды, запись даёт больше всего;MANGOHUD=0, чтобы не мерить слоем.Проверь параметр запуска (mangohud %command%), наличие lib32-mangohud для 32-битных игр и содержимое ls /usr/share/vulkan/*_layer.d/. Лаунчеры вроде Heroic или Lutris иногда выставляют MANGOHUD=0 — это видно через echo $MANGOHUD. Игры с античитом под Linux слои не подхватывают, там остаётся только нативный счётчик самой игры. Если ничего не помогло, пробуй mangohud --dlsym %command%.
Да, если кривая построена так, что до порога вентилятор стоит: MangoHud не слышно, пока карта холодная. Проверь, что точка остановки не завышена, иначе под нагрузкой карта останется без обдува. На части ноутбуков вентилятором управляет прошивка через встроенный контроллер, и LACT там ничего не изменит — на десктопных картах доступ полный.
Да, fps_limit=30 в конфиге или fps_limit=30 в переменных окружения работает независимо от драйвера, ограничение видит и сама игра, и оверлей. Оно удобно тем, что не требует перезагрузки драйвера и одинаково ведёт себя на любой карте.
Первым делом увеличь refresh_rate до 2–3 секунд, затем выключи cpu_stats и vram, затем запись логов. Если оверлей нужен не в каждой игре, проще держать его на параметрах запуска у избранных игр, а остальные запускать без него.
MangoHud и LACT закрывают разные задачи и потому спокойно уживаются: первый рисует оверлей и следит за слоями Vulkan, второй управляет вентиляторами, питанием и андервольтом на AMD. Ставь их из репозитория, включай оверлей через параметры запуска игры, а конфиг держи в ~/.config/MangoHud/MangoHud.conf — и вместо угадывания причин фризов ты получишь цифры, по которым уже можно принимать решения.
Задай вопрос в чате — отвечаем быстро, по делу и без воды.
Комментарии