NetworkManagerから外して、直接 wpa_supplicant -iwlan0 で制御する 資料はよく見かけますが、 RHEL 7 で標準(のはず)のNetworkManager制御下で WiFiの自動接続を行う設定方法は意外に資料がなかったりします。
$Id: c7-nm-wifi.html,v 1.2 2021-09-06 15:36:55+09 kabe Exp $
通常の有線LANアダプタが存在する状態では、 その有線アダプタ用の「接続プロファイル」が自動で作られています。
[kabe@scorpio3 ~]$ nmcli connection show NAME UUID TYPE DEVICE enp2s1 a012d956-1650-4976-b27e-65cddbefc946 802-3-ethernet enp2s1 [kabe@scorpio3 ~]$ nmcli device status DEVICE TYPE STATE CONNECTION enp2s1 ethernet connected enp2s1 wlp2s2 wifi disconnected -- lo loopback unmanaged --
ip link
で確認できるデバイス名(enp2s1)と同じなので
わかりにくいですが、
nmcli connection show で出てくるほうが
「接続プロファイル」(connection profile) です。
NetworkManager-wifi パッケージがインストールされていることをまず確認します。 最小インストールでは入っていない場合があります。
[kabe@scorpio3 ~] rpm -q NetworkManager-wifi NetworkManager-wifi-1.12.0-6.el7.i686
入っていないと、 NetworkManager が起動時に
(wlp2s2): 'wifi' plugin not available; creating generic deviceといったエラーを出し、以下の wifi 関連のコマンドは使えません。
[kabe@scorpio3 ~] sudo nmcli connection add \ type wifi \ ifname '*' \ con-name aterm-8e4d37-g \ ssid aterm-8e4d37-g Connection 'aterm-8e4d37-g' (96221c80-ffee-4f62-ba5e-ef5dc73e5402) successfully added. [kabe@scorpio3 ~]$ nmcli connection show 追加されたプロファイルを確認 NAME UUID TYPE DEVICE enp2s1 a012d956-1650-4976-b27e-65cddbefc946 802-3-ethernet enp2s1 aterm-8e4d37-g 96221c80-ffee-4f62-ba5e-ef5dc73e5402 802-11-wireless --
基本は、nmcli connection add
です。
値が足らない場合はその旨のエラーが出ます。
type wifi のプロファイル作成時は、最低限、ifname '*' と ssid ssid
が必要です。
プロファイル名は、デフォルトだと "wifi" になってしまうので、
GUIでの設定を踏襲するのであれば SSID と同じ値を con-name name
で与えます。
新規プロファイルを作成すると、ファイル的には
/etc/sysconfig/network-scripts/ifcfg-aterm-8e4d37-g
というファイルが作られます。
この辺の RHEL の network-scripts 互換的な動作は、 NetworkManager のプラグインの /usr/lib/NetworkManager/libnm-settings-plugin-ifcfg-rh.so が行っています。
nmcli connection edit コマンドを発行し、 今作ったプロファイルを編集します。 指定できる設定項目は、 nm-settings(5) を参照してください。
[kabe@scorpio3 ~]$ sudo nmcli connection edit aterm-8e4d37-g ===| nmcli interactive connection editor |=== Editing existing '802-11-wireless' connection: 'aterm-8e4d37-g' Type 'help' or '?' for available commands. Type 'describe [<setting>.<prop>]' for detailed property description. You may edit the following settings: connection, 802-11-wireless (wifi), 802-11-wireless-security (wifi-sec), 802-1x, ipv4, ipv6 nmcli> print 初期値の確認 connection.id: aterm-8e4d37-g connection.uuid: 96221c80-ffee-4f62-ba5e-ef5dc73e5402 connection.interface-name: -- connection.type: 802-11-wireless connection.autoconnect: yes ... nmcli> _
nmcli> set connection.autoconnect yes
新規プロファイルでは最初から yes になっていますが、 念のため手動でセットします。
ファイル的には、
/etc/sysconfig/network-scripts/ifcfg-aterm-8e4d37-g の
ONBOOT=yes
の設定です。
(saveコマンドを発行するまでファイルには書き込まれません)
nmcli> goto 802-11-wireless-security You may edit the following properties: key-mgmt, wep-tx-keyidx, auth-alg, proto, pairwise, group, leap-username, wep-key0, wep-key1, wep-key2, wep-key3, wep-key-flags, wep-key-type, psk, psk-flags, leap-password, leap-password-flags nmcli 802-11-wireless-security> print 初期値の確認 ['802-11-wireless-security' setting values] 802-11-wireless-security.key-mgmt: -- ... 802-11-wireless-security.psk: <hidden> 802-11-wireless-security.psk-flags: 0 (none) 802-11-wireless-security.leap-password: <hidden> 802-11-wireless-security.leap-password-flags:0 (none) nmcli 802-11-wireless-security> set key-mgmt Allowed values for 'key-mgmt' property: none, ieee8021x, wpa-none, wpa-psk, wpa-eap Enter 'key-mgmt' value: WPA-PSK nmcli 802-11-wireless-security> set psk-flags Enter 'psk-flags' value: 0 nmcli 802-11-wireless-security> set psk Enter 'psk' value: xxxxxxxxxxxxxxxx
ここで重要なのが、 psk-flags を 0 (none) に設定するところです。 GUIで作成した接続プロファイルでは 1 (agent-owned) になっていて、 nmcli で接続を開始するには nmcli --ask device connect wlp2s2 と パスワードを陽に聞かれるモードにしないと接続できなくなってしまいます。
psk-flags を 0 にすると、「システム側でパスワードを保存する」モードになり、 以下の save コマンドでパスワードがファイルに保存されます。
固定IPアドレスをふりたい場合は、 ipv4.* 設定にて設定します。 (無線ではDHCPが普通なので、あまりやりませんが)
nmcli> goto ipv4 You may edit the following properties: method, dns, dns-search, addresses, gateway, routes, route-metric, ignore-auto-routes, ignore-auto-dns, dhcp-hostname, dhcp-send-hostname, never-default, may-fail, dhcp-client-id nmcli ipv4> set method Allowed values for 'method' property: auto, link-local, manual, shared, disabled Enter 'method' value: manual nmcli ipv4> print ['ipv4' setting values] ipv4.method: manual ipv4.dns: ipv4.dns-search: ipv4.addresses: ipv4.gateway: -- ... nmcli ipv4> set addresses マニュアル nm-settings(5) では address-dataを使え、とあるが… Enter 'addresses' value: 10.5.0.99/24 nmcli ipv4> set gateway ... nmcli ipv4> set dns ...
nmcli 802-11-wireless-security> save Connection 'aterm-8e4d37-g' (96221c80-ffee-4f62-ba5e-ef5dc73e5402) successfully updated. nmcli 802-11-wireless-security> _保存すると、
KEY_MGMT=WPA-PSK
が設定されます。
WPA_PSK="xxxxxx"
と無線のパスフレーズが格納されます。
秘密情報なので root所有の -rw------- なモードで保存されます。
nmcli 802-11-wireless-security> save Error: Failed to save 'aterm-8e4d37-g' (96221c80-ffee-4f62-ba5e-ef5dc73e5402) connection: Insufficient privileges.と言われる場合は、sudo nmcli connection edit でroot権限で起動しましょう。
nmcli connection edit はインタラクティブなので、 スクリプトに固定したい時は以下のように書き下します。
nmcli connection modify con-name connection.autoconnect yes nmcli connection modify con-name 802-11-wireless-security.key-mgmt wpa-psk nmcli connection modify con-name 802-11-wireless-security.psk-flags 0 nmcli connection modify con-name 802-11-wireless-security.psk xxxxxxxxx
プロファイルを編集すれば接続されますが、 陽に接続を開始させるには
$ nmcli connection up aterm-8e4d37-g 接続プロファイルで接続する もしくは $ nmcli device connect wlp2s1 デバイス指定で接続する従来互換の
ifup aterm-8e4d37-g
でも接続できますが、
ifup内部では nmcli con up を起動しているので同じことです。
無線インタフェースを複数持っている場合は、 デバイス指定でどっちを使うか選べます。実験以外ではあまりそういうことは ないかもしれませんが。
$ nmcli connection down aterm-8e4d37-g 接続プロファイル もしくは $ nmcli device disconnect wlp2s1 デバイス指定