Вопрос или проблема
В некоторых моих скриптах мне нужно знать, подключен ли мой Thinkpad к док-станции или нет. Пока что я просто проверяю, какие периферийные устройства, подключенные к док-станции, можно найти. Например, я использую xrandr
или get-edid
, чтобы получить список подключенных мониторов и понять, подключен ли ноутбук.
Тем не менее, я вижу в syslog, что ядро может видеть событие подключения, но я не хочу парсить syslog в поисках “подключения чего-то”.
Вы знаете какой-нибудь умный способ проверить из bash, подключен ли ноутбук к док-станции, не полагаясь на подключенные периферийные устройства? Было бы здорово, если бы я мог как отлавливать событие подключения/отключения, когда оно происходит, так и проверять статус подключения в любое время.
Благодаря reddit я нашел решение для обеих ситуаций.
Очевидно, что Dockd можно использовать для отлова события подключения, а также для запроса статуса подключения в любое время.
Также можно использовать /sys/. Ветка /sys/devices/platform/dock.2/docked
предоставляет статус подключения в виде логического значения.
Ответ или решение
Вопрос о том, как определить состояние докировки вашего ThinkPad (докинг/недокинг) является важным для автоматизации процессов и управления подключениями в инструментах и скриптах. Ниже приведены подробные методы, которые позволят вам добиться этого с использованием командной строки Bash.
Способы определения состояния докировки ThinkPad
-
Использование
/sys
файловой системы:
В Linux существует возможность проверить состояние докировки через специальный файл в виртуальной файловой системе/sys
. Для проверки статуса докировки выполните следующую команду:cat /sys/devices/platform/dock.2/docked
Эта команда вернет значение
1
, если ваше устройство находится в док-станции (докировано), и0
, если оно не подключено (недокировано). Однако путь к файлу может варьироваться в зависимости от вашей конфигурации системы, поэтому вы можете использоватьfind
для поиска:find /sys/devices/ -name docked
-
Использование
dockd
:
Программаdockd
является удобным инструментом для отслеживания событий докировки и позволяет запрашивать текущее состояние устройства. Чтобы использоватьdockd
, вам нужно установить его из репозитория. Для установки выполните следующие команды:git clone https://github.com/libthinkpad/dockd/ cd dockd make sudo make install
После установки вы сможете использовать команды, предоставляемые
dockd
, для того чтобы получать события докировки и статусы, например:dockd status
-
Отслеживание событий с использованием
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.