Вопрос или проблема
Я недавно приобрел ноутбук 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
для выполнения вашего скрипта.
- Создайте новый
.rules
файл в директории/etc/udev/rules.d/
например99-dock.rules
. - Определите правила для запуска вашего скрипта:
ACTION=="change", SUBSYSTEM=="power_supply", RUN+="/path/to/your-script.sh"
- Перезагрузите
udev
:sudo udevadm control --reload-rules
4. Проверка информации о док-станции
Если вы используете современное оборудование, у вас могут быть доступные утилиты, которые позволяют проверять состояние док-станции через интерфейсы управления питания. Например, выполнение команды:
cat /sys/class/docking_station/dock
может вернуть состояние подключения к док-станции.
Заключение
Определение состояния док-станции на Linux может быть реализовано разными способами. В зависимости от архитектуры вашего устройства и драйверов, доступность определённых слотов может служить индикатором подключения. Благодаря использованию скриптов и системных правил udev
, вы сможете создать гибкую систему автоматизации для настройки параметров работы вашего устройства при изменении его состояния. Не забывайте тестировать скрипты на разных конфигурациях оборудования, чтобы убедиться, что они работают корректно.