iwd (Русский)
iwd (iNet wireless daemon) — беспроводной демон для Linux, созданный компанией Intel. Разработчики постарались снизить число внешних библиотек-зависимостей и использовать по максимуму возможности ядра Linux.
iwd может работать как отдельно, так и в паре с сетевым менеджером вроде ConnMan, systemd-networkd или NetworkManager.
Установка
Установите пакет iwd.
Использование
Пакет iwd содержит клиентскую программу iwctl
, демон iwd
и утилиту для мониторинга Wi-Fi сетей iwmon
.
iwgtkAUR предоставляет графический интерфейс и значок в трее.
Запустите/включите службу iwd.service
. Для управления службой можно использовать команду iwctl
или графический интерфейс iwgtk
.
netdev
или wheel
. Для использования iwctl или iwgtk добавьте себя в одну из этих групп.iwctl
Запуск в интерактивном режиме:
$ iwctl
В интерактивном режиме приглашение командной строки имеет вид [iwd]#
.
- В интерактивном режиме работает автодополнение команд и названий устройств по нажатию клавиши
Tab
. - Для выхода из интерактивного режима отправьте EOF комбинацией
Ctrl+d
. - Все команды можно использовать как аргументы командной строки в неинтерактивном режиме. Пример:
iwctl device wlan0 show
.
Вывести список доступных команд:
[iwd]# help
Подключение к сети
Если вы не знаете название своего беспроводного интерфейса, запросите список всех Wi-Fi устройств:
[iwd]# device list
Если устройство или соответствующий адаптер выключен, включите его:
[iwd]# device устройство set-property Powered on
[iwd]# adapter адаптер set-property Powered on
Затем запустите сканирование сети (команда ничего не выведет):
[iwd]# station устройство scan
После этого можно вывести список обнаруженных сетей:
[iwd]# station устройство get-networks
Наконец, подключитесь к сети:
[iwd]# station устройство connect SSID
station
и нажмите Tab
Tab
— отобразится список доступных устройств; введите первую букву названия устройства и нажмите Tab
для завершения. Аналогично, connect
Tab
Tab
выведет список доступных сетей, а Tab
при частично введённом названии завершит его.
Если для подключения к сети необходим пароль, то появится соответствующий запрос. В неинтерактивном режиме его можно передать в виде аргумента:
$ iwctl --passphrase пароль station устройство connect SSID
iwd
автоматически сохраняет пароли в каталоге/var/lib/iwd
и использует их для автоподключения в будущем. См. #Настройка сети.- Если SSID содержит пробелы, то его необходимо обернуть двойными кавычками.
- iwd поддерживает только PSK-пароли, от 8 до 63 ASCII-символов. В противном случае вы увидите сообщение об ошибке:
PMK generation failed. Ensure Crypto Engine is properly configured
.
Подключение к сети через WPS/WSC
Если ваша сеть поддерживает подключение по нажатию клавиши (Википедия:Wi-Fi Protected Setup), убедитесь, что сетевое устройство тоже может использовать эту возможность.
[iwd]# wsc list
После этого, если ваше устройство было в списке, выполните
[iwd]# wsc устройство push-button
и нажмите кнопку на маршрутизаторе. В принципе кнопку можно нажать и до этого (но не ранее, чем за 2 минуты).
Если при таком способе подключения сеть требует подтверждения PIN, изучите вывод команды help
на предмет подходящих опций для команды wsc
.
Отключение от сети
Отключиться от сети:
[iwd]# station устройство disconnect
Информация об устройстве и соединении
Вывести подробности о Wi-Fi устройстве (например, MAC-адрес):
[iwd]# device устройство show
Вывести состояние подключения, в том числе сети, подключённой к устройству:
[iwd]# station устройство show
Ранее посещённые сети
Вывести список сетей, к которым вы подключались в прошлом:
[iwd]# known-networks list
«Забыть» известную сеть:
[iwd]# known-networks SSID forget
iwgtk
iwgtkAUR предоставляет графический интерфейс, через который также можно взаимодействовать с iwd.
Запуск iwgtk
без аргументов откроет окно приложения, с помощью которого можно включать/выключать адаптеры и устройства, изменять режимы их работы, просматривать доступные сети, подключаться к ним и управлять известными сетями.
Значок в трее
Для запуска демона, отображающего значок iwgtk в трее, выполните команду:
$ iwgtk -i
Если значок не появился, то, скорее всего, трей не поддерживает StatusNotifierItem API — в этом случае попробуйте использовать слой совместимости, например snixembed-gitAUR
Реализации трея, которые поддерживают StatusNotifierItem и поэтому работают из коробки:
- KDE Plasma
- swaybar
- xfce4-panel
Реализации, поддерживающие только XEmbed и потому требующие установки snixembed-gitAUR:
- AwesomeWM
- i3bar
Автозапуск
Распространённый вариант использования iwgtk — запуск демона, отображающего значок в трее, при входе в систему. Если используемая вами среда рабочего стола поддерживает XDG Autostart, это должно происходить автоматически благодаря файлу iwgtk-indicator.desktop
, который устанавливается AUR-пакетом в /etc/xdg/autostart/
.
В качестве альтернативы пакет AUR также предоставляет юнит systemd для запуска демона. Если среда рабочего стола поддерживает юнит graphical-session.target
, то для автозапуска iwgtk через systemd включите пользовательский юнит iwgtk.service
.
Настройка сети
По умолчанию iwd хранит настройки сети в каталоге /var/lib/iwd
. Файл настроек именуется по схеме сеть.тип
, где сеть — SSID сети, а, соответственно, .тип — её тип (.open, .psk или .8021x). В файле хранится зашифрованный PreSharedKey
, а также (опционально) Passphrase
открытым текстом. Файл можно создать вручную, не вызывая iwctl
. Кроме того, в файле можно указывать и другие настройки, подробнее см. iwd.network(5).
WPA-PSK
Пример минимального файла настроек для подключения к сети WPA-PSK или WPA2-PSK с SSID «spaceship» и паролем «test1234»:
/var/lib/iwd/spaceship.psk
[Security] PreSharedKey=aafb192ce2da24d8c7805c956136f45dd612103f086034c402ed266355297295
- _
. При наличии иных символов имя файла имеет вид hex-строки, начинающейся с символа =
, после которого идёт SSID, закодированный в шестнадцатеричном виде.PreSharedKey можно вычислить одним из двух методов:
- Указав пароль открытым текстом в файле настроек:
/var/lib/iwd/spaceship.psk
[Security] Passphrase=test1234
- Ключ будет добавлен в файл при первом подключении:
/var/lib/iwd/spaceship.psk
[Security] Passphrase=test1234 PreSharedKey=aafb192ce2da24d8c7805c956136f45dd612103f086034c402ed266355297295
- Вычислив на основе SSID и пароля утилитами wpa_passphrase (входит в wpa_supplicant) или wpa-pskAUR. Подробнее см. wpa_supplicant#Connecting with wpa_passphrase.
WPA Enterprise
EAP-PWD
Для подключения к производственным сетям с EAP-PWD защитой создайте файл essid.8021x
в каталоге /var/lib/iwd
со следующим содержимым:
/var/lib/iwd/essid.8021x
[Security] EAP-Method=PWD EAP-Identity=ваш_email_на_предприятии EAP-Password=ваш_пароль [Settings] AutoConnect=true
Если автоподключение к точке доступа не требуется, измените значение последней опции на False. После этого подключаться к сети придётся вручную командой iwctl
. То же самое касается пароля — если вы не хотите хранить его в файле в открытом виде, то просто удалите соответствующую опцию и подключайтесь вручную.
AutoConnect=false
.EAP-PEAP
Как и в случае EAP-PWD, создайте файл essid.8021x
. Предварительно выясните, какой CA-сертификат используется в вашей организации. Ниже дан пример файла настроек с MSCHAPv2-аутентификацией:
/var/lib/iwd/essid.8021x
[Security] EAP-Method=PEAP EAP-Identity=anonymous@realm.edu EAP-PEAP-CACert=/path/to/root.crt EAP-PEAP-ServerDomainMask=radius.realm.edu EAP-PEAP-Phase2-Method=MSCHAPV2 EAP-PEAP-Phase2-Identity=johndoe@realm.edu EAP-PEAP-Phase2-Password=hunter2 [Settings] AutoConnect=true
Пароли MsCHAPv2 также можно хранить в виде хэша. Правильный хэш md4 может быть вычислен такой командой:
$ iconv -t utf16le | openssl md4 -provider legacy
Завершите ввод пароля нажатием Ctrl+d
(не нажимайте Enter
). Полученный хэш поместите в параметр EAP-PEAP-Phase2-Password-Hash
.
TTLS-PAP
Как и в случае EAP-PWD, создайте файл essid.8021x
. Предварительно выясните, какой CA-сертификат используется в вашей организации. Ниже дан пример файла настроек с PAP-аутентификацией:
/var/lib/iwd/essid.8021x
[Security] EAP-Method=TTLS EAP-Identity=anonymous@uni-test.de EAP-TTLS-CACert=cert.pem EAP-TTLS-ServerDomainMask=*.uni-test.de EAP-TTLS-Phase2-Method=Tunneled-PAP EAP-TTLS-Phase2-Identity=user EAP-TTLS-Phase2-Password=password [Settings] AutoConnect=true
eduroam
eduroam предоставляет утилиту для настройки (configuration assistant tool, CAT), но она, к сожалению, не поддерживает iwd. Тем не менее, загружаемый установщик представляет собой обычный Python-скрипт. Из него нетрудно извлечь необходимые параметры настройки, включая сертификат и маску домена.
В таблице ниже приведены значения параметров iwd, которые используются в переменных установочного сценария CAT.
Опция iwd | Переменная скрипта CAT |
---|---|
essid | один из Config.ssids
|
EAP-Method |
Config.eap_outer
|
EAP-Identity |
Config.anonymous_identity
|
EAP-метод-CACert |
содержимое Config.CA или абсолютный путь к файлу .pem, содержащему Config.CA
|
EAP-метод-ServerDomainMask |
один из Config.servers
|
EAP-метод-Phase2-Method |
Config.eap_inner , если он не равен PAP , иначе Tunneled-PAP
|
EAP-метод-Phase2-Identity |
имя_пользователя@Config.user_realm
|
где метод
— это содержимое EAP-Method
, которое должно быть TTLS
или PEAP
. После извлечения всей необходимой информации и преобразования её в настройки iwd можно поместить её в файл с именем essid.8021x
, как описано в разделах выше.
- Ваш провайдер может не требовать параметр
EAP-Identity
, в этом случае укажите для него значениеanonymous@Config.user_realm
. - Если ваш
EAP-метод-ServerDomainMask
начинается сDNS:
, используйте только часть послеDNS:
.
Прочие случаи
В репозитории разработчиков можно найти много дополнительных примеров.
Дополнительные настройки
Для хранения большинства настроек вполне подойдёт файл /etc/iwd/main.conf
. См. iwd.config(5).
Отключение автоподключения к сети
Создайте/отредактируйте файл /var/lib/iwd/сеть.тип
:
/var/lib/iwd/spaceship.psk (для примера)
[Settings] AutoConnect=false
Отключение сканирования сетей
По умолчанию, если iwd
ни к чему не подключён, он периодически выполняет сканирование для поиска доступных сетей. Чтобы это отключить (и сканировать вручную при необходимости), создайте/отредактируйте файл /etc/iwd/main.conf
:
/etc/iwd/main.conf
[Scan] DisablePeriodicScan=true
Включение встроенной настройки сети
С версии 0.19 iwd может выполнять привязку IP-адресов и настраивать маршруты с помощью встроенного DHCP-клиента или в соответствии со статической конфигурацией. Это неплохая альтернатива использованию отдельных DHCP-клиентов.
Чтобы активировать возможности iwd по настройке сети, добавьте следующие строки в /etc/iwd/main.conf
:
/etc/iwd/main.conf
[General] EnableNetworkConfiguration=true
Также можно задать параметр маршрутизации RoutePriorityOffset
:
/etc/iwd/main.conf
[Network] RoutePriorityOffset=300
Поддержка IPv6
С версии 1.10 iwd имеет поддержку IPv6, но в версиях до 2.0 она по умолчанию она отключена. С версии 2.0 она включена по умолчанию.
Для отключения добавьте следующие строки в файл настроек:
/etc/iwd/main.conf
[Network] EnableIPv6=false
Для включения на версиях до 2.0:
/etc/iwd/main.conf
[Network] EnableIPv6=true
Эта настройка должна быть включена, если вы желаете использовать DHCPv6 или статическую IPv6-конфигурацию. Её также можно задать для отдельной сети.
Статический IP-адрес в настройках сети
Добавьте следующие строки в файл /var/lib/iwd/сеть.тип
:
/var/lib/iwd/spaceship.psk
[IPv4] Address=192.168.1.10 Netmask=255.255.255.0 Gateway=192.168.1.1 Broadcast=192.168.1.255 DNS=192.168.1.1
Выбор DNS-менеджера
На данный момент iwd поддерживает два DNS-менеджера — systemd-resolved и resolvconf.
Настройки для systemd-resolved
:
/etc/iwd/main.conf
[Network] NameResolvingService=systemd
Для resolvconf
:
/etc/iwd/main.conf
[Network] NameResolvingService=resolvconf
Разрешить всем пользователям считывать состояние
Если вы хотите разрешить любому пользователю читать информацию о состоянии, но не изменять настройки, создайте файл настроек D-Bus:
/etc/dbus-1/system.d/iwd-allow-read.conf
<!-- Allow any user to read iwd status information. Overrides some part of /usr/share/dbus-1/system.d/iwd-dbus.conf. --> <!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"> <busconfig> <policy context="default"> <deny send_destination="net.connman.iwd"/> <allow send_destination="net.connman.iwd" send_interface="org.freedesktop.DBus.Properties" send_member="GetAll" /> <allow send_destination="net.connman.iwd" send_interface="org.freedesktop.DBus.Properties" send_member="Get" /> <allow send_destination="net.connman.iwd" send_interface="org.freedesktop.DBus.ObjectManager" send_member="GetManagedObjects" /> <allow send_destination="net.connman.iwd" send_interface="net.connman.iwd.Device" send_member="RegisterSignalLevelAgent" /> <allow send_destination="net.connman.iwd" send_interface="net.connman.iwd.Device" send_member="UnregisterSignalLevelAgent" /> </policy> </busconfig>
Решение проблем
Подробная отладка TLS
Это может пригодиться при решении проблем с MSCHAPv2 или TTLS. Задайте следующую переменную окружения с помощью drop-in файла:
/etc/systemd/system/iwd.service.d/tls-debug.conf
[Service] Environment=IWD_TLS_DEBUG=TRUE
После этого проверьте логи iwd, выполнив journalctl -u iwd.service
с правами root.
Перезапуск iwd.service после загрузки
Сообщалось, что на некоторых машинах для работы службы iwd.service
необходимо перезапустить её после загрузки. Смотрите FS#63912 и тему на форуме. Вероятно, это происходит потому, что ядро Linux и службы загружаются слишком быстро и iwd запускается до того, как беспроводная сетевая карта успеет включиться. В качестве обходного пути создайте drop-in файл, добавляющий задержку перед запуском службы:
[Service] ExecStartPre=/usr/bin/sleep 2
Затем выполните daemon-reload.
Проблемы с подключением после перезагрузки
Низкая энтропия системы может вызвать проблемы с подключением, особенно после перезагрузки. Рекомендации по увеличению энтропии можно найти в статье Random number generation.
udev не переименовывает беспроводное устройство
С версии 1.0 iwd отключает присвоение беспроводным интерфейсам предсказуемых имён. Для этого используется link-файл systemd, который запрещает udev присваивать беспроводным интерфейсам типовые имена wlp#s#
:
/usr/lib/systemd/network/80-iwd.link
[Match] Type=wlan [Link] NamePolicy=keep kernel
В результате после перезагрузки интерфейсы будут иметь имена wlan#
. Это позволяет избежать ситуации гонок между iwd и udev при переименовании интерфейсов[устаревшая ссылка 2024-10-12 ⓘ].
Если это привело к каким-то нежелательным последствиям, link-файл можно замаскировать с помощью символической ссылки:
# ln -s /dev/null /etc/systemd/network/80-iwd.link
Нет DHCP в режиме точки доступа
Когда iwd работает в режиме точки доступа, клиенты могут не получить IP-адрес по протоколу DHCP. Нужно разрешить настройку сети с помощью iwd на управляемых интерфейсах:
/etc/iwd/main.conf
[General] EnableNetworkConfiguration=True
Создайте файл, если его ещё не существует.
WiFi постоянно отключается из-за сбоя iwd
Некоторые пользователи сталкиваются с обрывом связи WiFi и переподключениями, но через время подключиться всё-таки удаётся.
Пользователи сообщают о падениях ([1]) службы iwd.service
.
Основная причина проблемы заключается в наличии нескольких конфликтующих служб, управляющих одними и теми же сетевыми подключениями. Для решения этой проблемы проверьте, не включены ли они одновременно.
Ошибка при загрузке закрытого ключа клиента
Для загрузки файлов ключей iwd использует модуль ядра pkcs8_key_parser
. Он должен загружаться автоматически через systemd-modules-load.service(8) благодаря файлу /usr/lib/modules-load.d/pkcs8.conf
, но если iwd был установлен только что, то модуль не будет загружен до перезагрузки системы.
Если при попытке подключения к сетям WPA Enterprise в журнале появляются сообщения типа Error loading client private key /путь/к/ключу
, загрузите модуль вручную:
# modprobe pkcs8_key_parser
iwd постоянно переподключается к разным точкам доступа
iwd будет подключаться к другим известным точкам доступа, если соединение с текущей точкой доступа слишком плохое.
Это записывается в журнал: wlan0: deauthenticating from xx:xx:xx:xx:xx:xx by local choice (Reason: 3=DEAUTH_LEAVING)
Проверьте мощность сигнала:
iwctl station wlan0 show | grep RSSI
Вы можете изменить порог мощности, чтобы разрешить использование плохого соединения. По умолчанию RoamThreshold имеет значение -70, а RoamThreshold5G имеет значение -76.
/etc/iwd/main.conf
[General] RoamThreshold=-75 RoamThreshold5G=-80
Смотрите также
- Getting Started with iwd[устаревшая ссылка 2024-10-12 ⓘ]
- Network Configuration Settings[устаревшая ссылка 2024-10-12 ⓘ]
- More Examples for WPA Enterprise
- The IWD thread on the Arch Linux Forums
- 2017 Update on new WiFi daemon for Linux by Marcel Holtmann - YouTube
- The New Wi-Fi Experience for Linux - Marcel Holtmann, Intel - YouTube
- How to set up a simple access point with iwd[устаревшая ссылка 2024-10-12 ⓘ]