Узнать, подключен ли ноутбук к док-станции в Linux

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

Я недавно приобрел ноутбук Lenovo X200s с док-станцией, который использовал с Ubuntu 9.10. Когда ноутбук подключен к док-станции, я использую клавиатуру и трекбол. Я хотел бы иметь разные параметры конфигурации, когда ноутбук подключен к док-станции, и когда он не подключен. Есть ли событие, к которому я могу подключиться и запустить сценарий, когда ноутбук подключается/отключается от док-станции? В противном случае, есть ли способ узнать, подключен ли ноутбук? Что-то вроде команды “is_docked”.

Спасибо

Смотрите статью Linux Laptop-HOWTO, особенно главу Док-станция / Порт репликатор, где описан сценарий, который определяет состояние подключения ноутбука к док-станции.

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

В приведенном ниже сценарии, если ноутбук подключен к док-станции, то доступны 4 слота PCMCIA, в то время как если он работает автономно, то доступно только 2 слота:

# проверьте, подключен ли ноутбук к док-станции (4 слота PCMCIA доступны)
# или работает ли он автономно (2 слота доступны)
# Запускать после старта cardmgr
#
# Фридхельм Кюк mailto:[email protected]
# 08-Сен-1998
#
# Найдите количество сокетов
SOCKETS=`tail -1 /var/run/stab | cut -d ":" -f 1`

case "$SOCKETS" in

"Socket 3")
echo Ноутбук подключен к док-станции ...
echo Отключение внутреннего LCD-дисплея для X11
echo
cp /etc/XF86Config_extern /etc/XF86Config
#
# Настройка сетевого интерфейса PCMCIA после запуска cardmge
#
echo
echo "Настройка eth0 для работы в сети ..."
echo
/sbin/ifconfig eth0 10.1.9.5 netmask 255.255.0.0 broadcast 10.1.255.255
/sbin/route add -net 10.1.0.0 gw 10.1.9.5
/sbin/route add default gw 10.1.10.1
;;

"Socket 1")
echo Ноутбук работает автономно
echo Отключение внешнего монитора для X11
cp /etc/XF86Config_intern /etc/XF86Config
echo
echo Сетевое устройство НЕ настроено
;;
esac

Посмотрите, как вы можете получать уведомления от X6 Ultrabase: http://www.thinkwiki.org/wiki/X6_UltraBase

Я не знаю о X200 Ultrabase, но предполагаю, что это должно быть очень похоже.

Я нашел это в своей системе:

⏵ find /sys/devices/platform -name dock -print -exec cat {} \;
/sys/devices/platform/USBC000:00/typec/port2/physical_location/dock
нет
/sys/devices/platform/USBC000:00/typec/port0/physical_location/dock
нет
/sys/devices/platform/USBC000:00/typec/port3/physical_location/dock
нет
/sys/devices/platform/USBC000:00/typec/port1/physical_location/dock
нет

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

Чтобы понять, как определить, подключен ли ноутбук к док-станции в Linux, возможно использовать несколько подходов. Для вашей модели Lenovo X200s с Ubuntu 9.10 существует несколько способов проверки состояния подключения к док-станции, что позволит вам настроить различные конфигурации в зависимости от состояния.

1. Просмотр системной информации

Первый способ — это проверка системных файлов, которые предоставляют информацию о подключенных устройствах. В Linux информация о подключении к док-станции может храниться в /proc и /sys файловых системах. Например, вам может понадобиться проверить количество доступных слотов PCMCIA, что может сигнализировать о состоянии докирования.

Вы можете использовать следующую команду:

tail -1 /var/run/stab | cut -d ":" -f 1

Эта команда извлекает информацию о последних известных сокетах. В зависимости от того, сколько слотов доступно, вы можете с точностью определить, подключен ноутбук к док-станции или нет.

2. Сценарий для автоматизации

Вы можете создать сценарий, который будет проверять состояние докирования и выполнять необходимые команды в зависимости от результата. Пример подобного сценария уже был упомянут:

# check, if Laptop is in docking-station (4 PCMCIA slots available)
# or if it is standalone (2 slots available)

SOCKETS=`tail -1 /var/run/stab | cut -d ":" -f 1`

case "$SOCKETS" in
"Socket 3")
    echo "Ноутбук подключен к док-станции..."
    # Выполните команды для изменения конфигурации
    ;;
"Socket 1")
    echo "Ноутбук не подключен к док-станции..."
    # Выполните команды для изменения конфигурации
    ;;
esac

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

3. Использование файловой системы /sys

Вы также можете получить информацию из каталога /sys/devices/platform, чтобы проверить наличие устройства докирования. Ваша команда может выглядеть следующим образом:

find /sys/devices/platform -name dock -print -exec cat {} \;

Если вывод покажет, что устройство в состоянии "yes" или "no", вы сможете использовать это для определения, подключён ноутбук или нет.

4. Использование Udev

Другой метод — использование udev, что позволяет запускать скрипты при изменении состояния устройства. Вы можете создать правило udev, которое будет реагировать на события подключения и отключения док-станции. Например, файл правила может выглядеть следующим образом:

ACTION=="change", SUBSYSTEM=="platform", KERNEL=="dock", RUN+="/путь/к/вашему/скрипту"

Заключение

Таким образом, вы можете использовать различные методы для определения состояния подключения вашего ноутбука к док-станции в Linux. С помощью анализа системных файлов, написания специализированных сценариев и использования Udev можно эффективно настраивать конфигурацию системы в зависимости от ситуации. Опыт работы с данными методами улучшит вашу продуктивность и сделает использование устройства более удобным.

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

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