Вопрос или проблема
Я недавно приобрел ноутбук 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 можно эффективно настраивать конфигурацию системы в зависимости от ситуации. Опыт работы с данными методами улучшит вашу продуктивность и сделает использование устройства более удобным.