- Python 100%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| 99-mediaui-waybar.rules | ||
| mediaui.py | ||
| README.md | ||
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:
- размонтирует все смонтированные разделы устройства;
- выполняет
udisksctl power-off; - после успешного завершения устройство можно физически отключать.
Пример:
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 показывает два типа сетевых ресурсов:
- уже смонтированные сетевые файловые системы;
- сетевые ресурсы, прописанные в
/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
Смонтировать флешку
- Запустите:
mediaui removable
- Выберите раздел, например
/dev/sdb1. - Нажмите
mилиEnter.
Безопасно отключить флешку
- Выберите её раздел.
- Нажмите
e. - Дождитесь сообщения об успешном отключении.
- Физически извлеките устройство.
Открыть лоток CD/DVD
- Выберите оптический привод.
- Нажмите
t.
Повторное нажатие t переключает состояние лотка, если это поддерживается приводом и командой eject.
Посмотреть SMART
- Перейдите на вкладку Disks.
- Выберите строку физического диска, а не раздела.
- Нажмите
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 и покажет краткую подсказку по использованию.