Баш & Thinkpad: как получить статус докинга / недокинга?

Вопрос или проблема

В некоторых моих скриптах мне нужно знать, подключен ли мой Thinkpad к док-станции или нет. Пока что я просто проверяю, какие периферийные устройства, подключенные к док-станции, можно найти. Например, я использую xrandr или get-edid, чтобы получить список подключенных мониторов и понять, подключен ли ноутбук.

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

Вы знаете какой-нибудь умный способ проверить из bash, подключен ли ноутбук к док-станции, не полагаясь на подключенные периферийные устройства? Было бы здорово, если бы я мог как отлавливать событие подключения/отключения, когда оно происходит, так и проверять статус подключения в любое время.

Благодаря reddit я нашел решение для обеих ситуаций.

Очевидно, что Dockd можно использовать для отлова события подключения, а также для запроса статуса подключения в любое время.

Также можно использовать /sys/. Ветка /sys/devices/platform/dock.2/docked предоставляет статус подключения в виде логического значения.

Ответ или решение

Вопрос о том, как определить состояние докировки вашего ThinkPad (докинг/недокинг) является важным для автоматизации процессов и управления подключениями в инструментах и скриптах. Ниже приведены подробные методы, которые позволят вам добиться этого с использованием командной строки Bash.

Способы определения состояния докировки ThinkPad

  1. Использование /sys файловой системы:
    В Linux существует возможность проверить состояние докировки через специальный файл в виртуальной файловой системе /sys. Для проверки статуса докировки выполните следующую команду:

    cat /sys/devices/platform/dock.2/docked

    Эта команда вернет значение 1, если ваше устройство находится в док-станции (докировано), и 0, если оно не подключено (недокировано). Однако путь к файлу может варьироваться в зависимости от вашей конфигурации системы, поэтому вы можете использовать find для поиска:

    find /sys/devices/ -name docked
  2. Использование dockd:
    Программа dockd является удобным инструментом для отслеживания событий докировки и позволяет запрашивать текущее состояние устройства. Чтобы использовать dockd, вам нужно установить его из репозитория. Для установки выполните следующие команды:

    git clone https://github.com/libthinkpad/dockd/
    cd dockd
    make
    sudo make install

    После установки вы сможете использовать команды, предоставляемые dockd, для того чтобы получать события докировки и статусы, например:

    dockd status
  3. Отслеживание событий с использованием udev:
    Вы также можете настроить события так, чтобы отслеживать изменения статуса докировки в реальном времени с помощью системы udev. Для этого создайте правила в директории /etc/udev/rules.d/. Создайте файл, например, 99-dock.rules, и добавьте в него следующее:

    ACTION=="change", KERNEL=="dock.2", SUBSYSTEM=="platform", RUN+="/path/to/your_script.sh"

    Замените /path/to/your_script.sh на путь к вашему скрипту, который будет вызываться при изменении состояния докировки.

Пример скрипта для проверки состояния

Вы можете создать простой Bash-скрипт для проверки состояния докировки вашего ThinkPad. Пример:

#!/bin/bash

DOCKED_STATUS=$(cat /sys/devices/platform/dock.2/docked)

if [ "$DOCKED_STATUS" -eq 1 ]; then
    echo "Ваш ThinkPad подключён к док-станции."
else
    echo "Ваш ThinkPad не подключён к док-станции."
fi

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...