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

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

Я недавно приобрел ноутбук Lenovo X200s с док-станцией, который использовал с Ubuntu 9.10. Когда ноутбук подключен к док-станции, я использую клавиатуру и трекбол.

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

Смотрите статью Linux Laptop-HOWTO, и особенно раздел Docking Station / Port Replicator, где описан скрипт, который определяет состояние докинга ноутбука.

Основная идея заключается в том, чтобы проверить /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 после запуска cardmgr
#
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, вы можете использовать несколько подходов. В этом ответе мы рассмотрим как автоматическое определение состояния подключения, так и способы сценарного выполнения в зависимости от состояния. Основная цель — настроить различные параметры для документа и простоя.

1. Определение состояния подключения

Одним из методов обнаружения состояния подключения ноутбука является анализ конфигурации слотов PCMCIA. Когда ноутбук подключен к док-станции, определённое количество слотов может быть доступно, а когда он отключен — меньшее. Приведённый ниже скрипт является примером того, как это можно реализовать. Скрипт проверяет количество доступных слотов и в зависимости от этого выполняет нужные команды.

#!/bin/bash

# Получить количество сокетов
SOCKETS=$(tail -1 /var/run/stab | cut -d ":" -f 1)

case "$SOCKETS" in

"Socket 3")
    echo "Ноутбук подключен к док-станции ..."
    echo "Отключение внутреннего LCD дисплея для X11"

    cp /etc/XF86Config_extern /etc/XF86Config

    echo "Настройка интерфейса eth0 для сети ..."
    /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 "Сетевое устройство НЕ настроено"
    ;;
esac

2. Считывание состояния через /sys

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

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

Эта команда ищет файлы, отвечающие за состояние подключения к док-станции и выводит их. Если вывод показывает «yes» или «no», вы сможете использовать эти данные для настройки вашего скрипта.

3. Настройка автоматизации с использованием udev

Чтобы запустить ваши скрипты автоматически при подключении или отключении от док-станции, вы можете использовать udev. Ниже приведены шаги по настройке udev для выполнения вашего скрипта.

  1. Создайте новый .rules файл в директории /etc/udev/rules.d/ например 99-dock.rules.
  2. Определите правила для запуска вашего скрипта:
ACTION=="change", SUBSYSTEM=="power_supply", RUN+="/path/to/your-script.sh"
  1. Перезагрузите udev:
    sudo udevadm control --reload-rules

4. Проверка информации о док-станции

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

cat /sys/class/docking_station/dock

может вернуть состояние подключения к док-станции.

Заключение

Определение состояния док-станции на Linux может быть реализовано разными способами. В зависимости от архитектуры вашего устройства и драйверов, доступность определённых слотов может служить индикатором подключения. Благодаря использованию скриптов и системных правил udev, вы сможете создать гибкую систему автоматизации для настройки параметров работы вашего устройства при изменении его состояния. Не забывайте тестировать скрипты на разных конфигурациях оборудования, чтобы убедиться, что они работают корректно.

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

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