середу, 7 березня 2012 р.

Network-Manager та автоматичне вимкнення бездротового адаптера

Уже декілька разів стикався з тим, що нові дистрибутиви включають типово режим „у літаку“. Спроби відключити його через графічну утиліту не завжди приводять до успіху, а тому доводиться лізти в термінал, що для недосвідченого користувача є суцільним жахіттям. Насправді все не так страшно, як виглядає, просто потрібно трішки більше знати про обладнання на якому працюємо.

Основними засобами для перевірки параметрів мережевого з’єднання є утиліти ifconfig, iwlist та rfkill (пакунки net-tools, wireless-tools та rfkill, які в принципі є встановлені). Перша - налаштовує мережеві адаптери, друга - дозволяє сканувати мережі, третя - показує поточний стан мережевого безпровідного адапетра. Але про все по-порядку.

Перш за все, слід дізнатися модель мережевого адаптера. Для цього існує утиліта сканування PCI-пристроїв lspci (для USB-пристроїв lsusb відповідно). Її запуск видає повний перелік пристроїв, які наявні у системі, який я скоротив до прийнятного розміру. Мережевий адаптер для безпровідних мереж, який нас цікавить виділено товстим шрифтом. Важливо не сплутати його із Ethernet controller, який теж є мережевим адаптером, але для дротових мереж.

$ lspci
01:00.0 VGA compatible controller: ATI Technologies Inc Madison [Radeon HD 5000M Series]
01:00.1 Audio device: ATI Technologies Inc Redwood HDMI Audio [Radeon HD 5600 Series]
02:00.0 Network controller: Ralink corp. RT3090 Wireless 802.11n 1T/1R PCIe
03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 03)

Якщо пристрій відсутній у даному переліку, можливо його просто немає, а тому слід переконатися, що він підключений. Оскільки Network-Manager керує даним адаптером, то він найбільш ймовірним він є деактивованим, що можна перевірити командою ip link:
$ ip link
1: lo: mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
    link/ether 60:eb:69:6d:c5:58 brd ff:ff:ff:ff:ff:ff
3: wlan0: mtu 1500 qdisc mq state UP qlen 1000
    link/ether e0:2a:82:12:df:7d brd ff:ff:ff:ff:ff:ff
4: vboxnet0: mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 0a:00:27:00:00:00 brd ff:ff:ff:ff:ff:ff

Як згадувалось вище, за допомогою утиліти rfkill можна управляти блокуванням безпровідного адаптера. Одним з параметрів є list, задача якого, друк списку поточних адаптерів та статусів блокування :
$ rfkill list
0: hp-wifi: Wireless LAN
    Soft blocked: no
    Hard blocked: no
1: phy0: Wireless LAN
    Soft blocked: no
    Hard blocked: no
32: hci0: Bluetooth
    Soft blocked: no
    Hard blocked: no


Інформація про безпровідний пристрій має наступні поля, які розділені двокрапкою: індекс пристрою, фізичну адресу, опис.
З цих полів індекс використовується при доступі до окремого елементу пристрою. М’яке та жорстке блокування є відповідно програмним та апаратним блокуванням.
У тому випадку, коли rfkill показує щось на кшалт Hard blocked: yes слід шукати відповідну кнопку на ноутбуці, яка вмикає адаптер. Після цього, запуск команди iwlist scan повинен вивести на екран (терміналу) перелік доступних Wi-Fi мереж. Якщо такий перелік є, а Network-Manager не показує перелік доступних мереж, ймовірною є проблема конфлікту кількох модулів бездротових адаптерів.

Перегляд списку адаптерів дозволяє виявити проблематичний модуль. Напр.:
0: tpacpi_bluetooth_sw: Bluetooth
    Soft blocked: no
    Hard blocked: no
1: hci0: Bluetooth
    Soft blocked: no
    Hard blocked: no
2: acer-wireless: Wireless LAN
    Soft blocked: yes
    Hard blocked: no

3: phy0: Wireless LAN
    Soft blocked: no
    Hard blocked: no

Конфліктуючим пристроєм є acer-wireless, а відповідним модулем - acer_wmi. Для того, щоб його видалити з системи назавжди треба додати відповідний запис до теки /etc/modprobe.d/<назва_файлу>.conf, який буде містити один рядок:
blacklist acer_wmi