У меня Dell Latitude XT2, использующий карту Intel WLAN (в lspci
он указан как «Intel Corporation Ultimate N WiFi Link 5300») под управлением Lubuntu 12.04 с последними обновлениями. В ноутбуке есть аппаратный переключатель WLAN.
У меня проблемы с активацией WLAN при загрузке с выключенным аппаратным переключателем. К сожалению, ситуация немного запутанная.
rfkill
перечисляет два устройства WLAN (хотя lspci
показывает только одно устройство Intel). Это ситуация при загрузке с аппаратным переключателем, установленным в положение «Выкл.»:
0: dell-wifi: Wireless LAN
Soft blocked: yes
Hard blocked: yes
1: dell-bluetooth: Bluetooth
Soft blocked: yes
Hard blocked: yes
2: phy0: Wireless LAN
Soft blocked: yes
Hard blocked: yes
Из некоторых тестов я заключаю, что WLAN активируется только тогда, когда оба, dell-wifi
и phy0
, разблокированы программно-аппаратный. Но я могу разблокировать dell-wifi
только после того, как аппаратный переключатель установлен в положение «on».
Процедура справа от загрузки с аппаратным переключателем, установленным в положение «Выкл.»:
phy0
работает, как и ожидалось. Это можно сделать с помощью сценария запуска. sudo rfkill unblock 0
: ничего не происходит. Мягкий блок dell-wifi
не удален . phy0
удаляет свой жесткий блок. Все еще нет WLAN. sudo rfkill unblock 0
: и , мягкая и жесткая блокировка dell-wifi
удалены. WLAN сейчас активен и работает. sudo rfkill block 0
: только добавляет мягкий блок, как и ожидалось. WLAN снова отключается. Итак, чтобы активировать WLAN, мне нужно использовать аппаратный переключатель, а затем (вручную) запустить скрипт - это немного неудобно.
Кто-нибудь знает лучшее решение? Может быть, демон может помочь, чтобы прослушивать события rfkill
, чтобы разблокировать dell-wifi
после того, как я установил аппаратный переключатель в положение «on»? (звучит как обходной путь)
При загрузке с аппаратным переключателем, установленным в положение «Вкл.», ничто не блокируется ни жестко, ни мягко.
Уже существует демон, которого можно использовать с этой целью: udevd
Можно создать файл правил для него, чтобы слушать rfkill события, видеть этот ответ unix.stackexchange.com. Просто адаптируйте сценарий к своей цели, посмотрите ниже. Знайте, что мой удар не является лучшим - он работает, но вероятно не может считаться хорошим примером.
#!/bin/bash
#/usr/local/bin/unblock-dell-wifi
DEV_CHANGED_BY_HW_SWITCH=phy0
DEV_TO_UNBLOCK=dell-wifi
if [ ${RFKILL_NAME} != ${DEV_CHANGED_BY_HW_SWITCH} ]
then
exit
fi
# get $DEV_TO_UNBLOCK rfkill id
DEV_TO_UNBLOCK_ID=`rfkill list wlan | grep $DEV_TO_UNBLOCK | grep -o -e "^[0-9]*"`
# maybe add error handling if $DEV_TO_UNBLOCK couldn't be found
if [ -z $DEV_TO_UNBLOCK_ID ]
then
echo "$DEV_TO_UNBLOCK not found in rfkill list" 1>2&
exit
fi
if [ ${RFKILL_STATE} = 0 ]
then
sudo rfkill block $DEV_TO_UNBLOCK_ID
else
sudo rfkill unblock $DEV_TO_UNBLOCK_ID
fi