No description
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-09-03 14:09:37 +03:00
99-mediaui-waybar.rules first commit 2026-08-25 14:25:08 +03:00
mediaui.py update? 2026-09-03 14:09:37 +03:00
README.md first commit 2026-08-25 14:25:08 +03:00

mediaui

mediaui — терминальный интерфейс для управления носителями и просмотра состояния дисков и оборудования Linux.

По духу это компактный аналог части возможностей GNOME Disks и системного монитора, рассчитанный на работу прямо в терминале и интеграцию с Waybar.

Скрипт написан на Python и не требует сторонних Python-библиотек: используется только стандартная библиотека.

Возможности

Removable

Работа со съёмными и внешними носителями:

  • USB-флешки и USB-диски;
  • SD/MMC-накопители;
  • классические floppy-дисководы /dev/fd0, /dev/fd1 и т. п.;
  • USB floppy-дисководы — отображаются как обычные USB-носители;
  • CD/DVD/оптические приводы;
  • смонтированные сетевые файловые системы;
  • сетевые ресурсы, описанные в /etc/fstab.

Поддерживаемые действия:

  • mount;
  • unmount;
  • безопасное отключение USB/MMC-устройства через udisksctl power-off;
  • извлечение диска из CD/DVD-привода;
  • открытие/закрытие лотка оптического привода;
  • подключение и отключение сетевых ресурсов.

Disks

Просмотр внутренних накопителей и их разделов:

  • модель и производитель;
  • размер;
  • тип подключения;
  • HDD/SSD;
  • разделы и точки монтирования;
  • состояние SMART;
  • полный SMART-отчёт;
  • температура и время работы диска, если эти данные доступны через smartctl.

Разрешено только монтирование и размонтирование разделов.

Форматирование, изменение таблицы разделов и другие разрушительные операции намеренно не реализованы.

Корневая файловая система / не размонтируется через интерфейс mediaui.

Overview

Сводная информация о системе:

  • CPU;
  • текущая загрузка CPU;
  • загрузка отдельных ядер;
  • история загрузки CPU;
  • RAM и swap;
  • внутренние накопители и использование файловых систем;
  • GPU;
  • температуры с lm_sensors;
  • батареи;
  • общая информация о системе.

Требования

Минимально необходимы:

  • Linux;
  • Python 3.7+;
  • lsblk.

Без lsblk программа работать не сможет.

Остальные компоненты являются опциональными: если какой-то инструмент отсутствует, связанная с ним функция будет недоступна, но сама программа продолжит работать.

Команда Для чего используется
lsblk обнаружение дисков и разделов
findmnt точки монтирования, сетевые ресурсы, защита системного диска
udisksctl mount/unmount и безопасное отключение устройств
eject управление лотком CD/DVD
smartctl SMART дисков
lspci определение GPU
sensors температуры
df использование файловых систем
blkid определение файловой системы на классических floppy

Установка в Void Linux

Основной набор:

sudo xbps-install -S python3 util-linux udisks2 smartmontools pciutils lm_sensors eject

lsblk, findmnt и blkid входят в util-linux.

df входит в coreutils, который обычно уже присутствует в базовой системе Void Linux.

Для сетевых файловых систем устанавливаются соответствующие mount-helper'ы. Например:

sudo xbps-install -S cifs-utils nfs-utils sshfs rclone davfs2

Устанавливать весь этот набор необязательно — достаточно пакета для того типа сетевой файловой системы, которым вы пользуетесь.

Для desktop-уведомлений можно использовать dunstify или notify-send. Они не обязательны для работы mediaui.

Установка самого mediaui

Можно оставить файл под исходным именем:

chmod +x mediaui.py
./mediaui.py

Либо установить его как обычную пользовательскую команду:

install -Dm755 mediaui.py "$HOME/.local/bin/mediaui"

Убедитесь, что ~/.local/bin находится в $PATH:

export PATH="$HOME/.local/bin:$PATH"

После этого программу можно запускать просто так:

mediaui

Проверка зависимостей

Встроенная диагностика:

mediaui check

или:

mediaui doctor

Пример вывода:

mediaui component check
========================================
  [     OK] lsblk      device enumeration — required, nothing works without it
  [     OK] findmnt    mount table, network shares, boot-disk protection
  [     OK] udisksctl  mount / unmount / safely remove (udisks2)
  [MISSING] smartctl   SMART health on the Disks tab
  [     OK] lspci      GPU name on the Overview tab

Отсутствие lsblk является критической ошибкой. Остальные компоненты только отключают связанные с ними функции.

Запуск

Полный интерфейс

mediaui

Программа откроется на вкладке Overview.

То же самое:

mediaui tui

или:

mediaui overview

Сразу открыть Removable

mediaui removable

Короткий вариант:

mediaui media

Это удобно для привязки к кнопке Waybar.

JSON для Waybar

mediaui bar

Команда выполняется один раз и печатает JSON в stdout.

Например, при подключённой флешке:

{"text":"󱊞","tooltip":"Removable:\n  USB DISK 29G — /run/media/user/USB","class":"removable mounted"}

Если съёмных или сетевых носителей нет:

{"text":"","tooltip":"","class":"off"}

Управление

Нажмите ? или F1 внутри программы, чтобы открыть встроенную справку.

Навигация

Клавиша Действие
Left / Right предыдущая/следующая вкладка
h / l предыдущая/следующая вкладка
Tab следующая вкладка
1 / 2 / 3 Removable / Disks / Overview
Up / Down перемещение по списку
j / k перемещение по списку
PgUp / PgDn перемещение на страницу
g начало списка
G конец списка

Действия

Клавиша Действие
m / Enter смонтировать выбранный объект
u размонтировать
e безопасно отключить / извлечь
t открыть/закрыть лоток CD/DVD
i подробная информация / SMART / полный текст раздела
r немедленно обновить данные
L журнал событий текущего запуска
? / F1 справка
q выход

Работа с USB и SD-картами

mediaui считает устройство съёмным, если lsblk сообщает хотя бы один из признаков:

  • RM=1;
  • HOTPLUG=1;
  • транспорт usb;
  • транспорт mmc.

При этом накопитель, с которого загружена текущая система, исключается из списка съёмных устройств даже в случае, если SD/eMMC ошибочно помечен ядром как removable.

Это особенно важно для Raspberry Pi и других SBC.

Безопасное отключение

Для USB/MMC клавиша e:

  1. размонтирует все смонтированные разделы устройства;
  2. выполняет udisksctl power-off;
  3. после успешного завершения устройство можно физически отключать.

Пример:

USB DISK
└─ /dev/sdb1  exfat  /run/media/user/USB

Выберите /dev/sdb1 и нажмите e. mediaui определит родительский /dev/sdb, размонтирует его разделы и отключит устройство целиком.

Floppy

Поддерживаются классические floppy-контроллеры:

/dev/fd0
/dev/fd1

Для определения файловой системы используется blkid.

Проверка пустого floppy-дисковода может запускать мотор и на несколько секунд блокировать обращение к устройству. Поэтому mediaui не опрашивает floppy каждые 3 секунды.

Полная проверка выполняется:

  • при первоначальном сканировании;
  • после ручного нажатия r.

Для floppy клавиша e не выполняет power-off: диск только размонтируется, после чего его можно физически извлечь.

USB floppy определяется ядром как обычное USB/SCSI removable-устройство и работает по стандартной логике съёмного диска.

CD/DVD

Оптические устройства определяются по типу rom из lsblk.

Основные действия:

e  — размонтировать диск и извлечь его
t  — открыть/закрыть лоток
m  — смонтировать вставленный диск
u  — размонтировать

Для полноценного управления лотком рекомендуется наличие команды eject.

Если eject отсутствует, mediaui пытается использовать udisksctl как запасной вариант, но возможности управления конкретным приводом могут зависеть от оборудования и драйвера.

Сетевые ресурсы

mediaui показывает два типа сетевых ресурсов:

  1. уже смонтированные сетевые файловые системы;
  2. сетевые ресурсы, прописанные в /etc/fstab, даже если они сейчас не смонтированы.

Распознаются, в частности:

nfs
nfs4
cifs
smbfs
smb3
fuse.sshfs
fuse.rclone
fuse.davfs
davfs
9p

Пример CIFS

Создайте точку монтирования:

mkdir -p "$HOME/mnt/nas"

Пример строки /etc/fstab:

//192.168.1.10/share /home/user/mnt/nas cifs noauto,user,_netdev,credentials=/home/user/.config/smb-credentials 0 0

После этого ресурс появится на вкладке Removable даже в отключённом состоянии.

Выберите его и нажмите:

m — mount
u — unmount

Пример NFS

192.168.1.10:/data /home/user/mnt/nfs nfs noauto,user,_netdev 0 0

Пример SSHFS

user@server:/data /home/user/mnt/ssh fuse.sshfs noauto,user,_netdev,IdentityFile=/home/user/.ssh/id_ed25519 0 0

Замените /home/user/... на реальные пути вашего пользователя.

mediaui вызывает для таких записей обычные команды:

mount /точка/монтирования
umount /точка/монтирования

Поэтому права на монтирование задаются средствами самого mount и /etc/fstab. Для запуска без root обычно необходима подходящая опция user или users.

SMART

На вкладке Disks выберите строку самого диска, например:

/dev/nvme0n1

и нажмите:

i

Будет запрошен полный SMART-отчёт через:

smartctl -a /dev/nvme0n1

Краткое состояние диска запрашивается через smartctl -H.

На некоторых системах чтение SMART требует дополнительных прав. Если SMART отображается как недоступный, сначала проверьте вручную:

smartctl -H /dev/sda

или:

sudo smartctl -H /dev/sda

Права udisks2 / polkit

Для блочных устройств mediaui использует udisksctl с параметром:

--no-user-interaction

То есть графическое окно запроса пароля не вызывается.

В нормальной пользовательской desktop-сессии udisks2 обычно разрешает активному локальному пользователю стандартные операции со съёмными носителями через polkit.

Если появляется ошибка вида:

Not authorized

или ошибка polkit, проверьте ту же операцию напрямую:

udisksctl mount -b /dev/sdb1 --no-user-interaction

Если и эта команда не работает, проблема находится на уровне udisks2/polkit, а не интерфейса mediaui.

Запускать весь интерфейс от root обычно не требуется.

Интеграция с Waybar

mediaui bar специально предназначен для custom-модуля Waybar.

Пример для ~/.config/waybar/config.jsonc:

{
    "custom/media": {
        "exec": "$HOME/.local/bin/mediaui bar",
        "return-type": "json",
        "interval": 2,
        "signal": 11,
        "hide-empty-text": true,
        "tooltip": true,
        "on-click": "foot -e $HOME/.local/bin/mediaui removable"
    }
}

Добавьте модуль в нужную секцию Waybar, например:

"modules-right": [
    "custom/media",
    "clock"
]

Если используется другой терминал, замените foot.

Например для kitty:

"on-click": "kitty -e $HOME/.local/bin/mediaui removable"

Для alacritty:

"on-click": "alacritty -e $HOME/.local/bin/mediaui removable"

Иконки

Waybar-режим использует Material Design Icons из Nerd Fonts.

Поэтому шрифт Waybar должен содержать соответствующие Nerd Font glyphs. Иначе вместо иконки может отображаться квадрат или пустой символ.

Обновление Waybar

Внутри mediaui используется realtime-сигнал:

RTMIN+11

Поэтому в конфиге Waybar указано:

"signal": 11

После mount/unmount/eject интерфейс может немедленно попросить Waybar обновить модуль.

Периодический interval всё равно полезен, чтобы обнаруживать физическое подключение и отключение устройств.

Desktop-уведомления

Режим bar отслеживает появление и исчезновение носителей и может отправлять уведомления:

Media attached
Media detached

Сначала используется dunstify, если он установлен. Если его нет — notify-send.

Состояние хранится в:

$XDG_RUNTIME_DIR/waybar-state/media.state

или, если XDG_RUNTIME_DIR отсутствует:

/tmp/waybar-state/media.state

Для защиты от одновременного запуска нескольких экземпляров используется lock-файл.

Автообновление

В TUI обычные данные обновляются в фоне примерно раз в 3 секунды.

Это не блокирует интерфейс: тяжёлые операции выполняются через внутренний worker.

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

Примеры

Посмотреть состояние всех компонентов

mediaui check

Открыть системный обзор

mediaui

Быстро открыть список флешек, CD/DVD и сетевых ресурсов

mediaui removable

Смонтировать флешку

  1. Запустите:
mediaui removable
  1. Выберите раздел, например /dev/sdb1.
  2. Нажмите m или Enter.

Безопасно отключить флешку

  1. Выберите её раздел.
  2. Нажмите e.
  3. Дождитесь сообщения об успешном отключении.
  4. Физически извлеките устройство.

Открыть лоток CD/DVD

  1. Выберите оптический привод.
  2. Нажмите t.

Повторное нажатие t переключает состояние лотка, если это поддерживается приводом и командой eject.

Посмотреть SMART

  1. Перейдите на вкладку Disks.
  2. Выберите строку физического диска, а не раздела.
  3. Нажмите i.

Обновить информацию вручную

r

Для floppy это также запускает явное повторное определение вставленной дискеты.

Что mediaui намеренно не делает

mediaui не предназначен для администрирования разметки дисков.

Он не выполняет:

  • форматирование;
  • создание файловых систем;
  • удаление файловых систем;
  • создание/удаление разделов;
  • изменение GPT/MBR;
  • изменение размера разделов;
  • восстановление данных.

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

Диагностика

Если что-то работает не так, начните с:

mediaui check

Затем полезно проверить данные, которые видит система:

lsblk -o NAME,PATH,TYPE,SIZE,FSTYPE,LABEL,MOUNTPOINTS,MODEL,TRAN,RM,HOTPLUG

Текущие точки монтирования:

findmnt

Проверка udisks2:

udisksctl status

Проверка конкретного раздела:

udisksctl info -b /dev/sdb1

Проверка SMART:

smartctl -H /dev/sda

Проверка температур:

sensors

Структура режима работы

mediaui
├── Removable
│   ├── USB / MMC
│   ├── Floppy
│   ├── CD / DVD
│   └── Network shares
├── Disks
│   ├── Internal disks
│   ├── Partitions
│   └── SMART
└── Overview
    ├── CPU
    ├── Memory
    ├── Storage
    ├── GPU
    ├── Sensors
    ├── Battery
    └── System

Команды целиком

mediaui
mediaui tui
mediaui overview
mediaui full
mediaui removable
mediaui media
mediaui bar
mediaui check
mediaui doctor

Неизвестная команда завершится с кодом 2 и покажет краткую подсказку по использованию.