「Netctl」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(校正(でき・出来))
 
(5人の利用者による、間の14版が非表示)
1行目: 1行目:
 
{{Lowercase title}}
 
{{Lowercase title}}
[[Category:ネットワーク]]
+
[[Category:ネットワークマネージャ]]
  +
[[Category:Arch プロジェクト]]
  +
[[Category:コマンド]]
 
[[cs:Netctl]]
 
[[cs:Netctl]]
 
[[en:Netctl]]
 
[[en:Netctl]]
6行目: 8行目:
 
[[fr:Netctl]]
 
[[fr:Netctl]]
 
[[ru:Netctl]]
 
[[ru:Netctl]]
[[zh-CN:Netctl]]
+
[[zh-hans:Netctl]]
 
{{Related articles start}}
 
{{Related articles start}}
{{Related|ネットワーク設定}}
 
{{Related|ワイヤレス設定}}
 
{{Related|NetworkManager}}
 
{{Related|Wicd}}
 
 
{{Related|netctl でブリッジ接続}}
 
{{Related|netctl でブリッジ接続}}
  +
{{Related|NetworkManager}}
  +
{{Related|ワイヤレスネットワーク設定}}
 
{{Related articles end}}
 
{{Related articles end}}
 
''netctl'' はプロファイルを使ってネットワーク接続を管理・設定する CLI ベースのツールです。netctl は古い ''netcfg'' ユーティリティを置き換える新しい Arch Linux の独自プロジェクトです。
 
''netctl'' はプロファイルを使ってネットワーク接続を管理・設定する CLI ベースのツールです。netctl は古い ''netcfg'' ユーティリティを置き換える新しい Arch Linux の独自プロジェクトです。
63行目: 63行目:
 
===自動操作===
 
===自動操作===
   
プロファイルを一つのインターフェイスに一つしか使わなかったり、手動でプロファイルを切り替える場合、[[#基本的な方法|基本的な方法]]を使って下さい。一般的な例として、サーバー・ワークステーション・ルーターなどがあります。
+
プロファイルを(一つのインターフェイスに)一つしか使わなかったり、手動でプロファイルを切り替える場合、[[#基本的な方法|基本的な方法]]を使って下さい。一般的な例として、サーバー・ワークステーション・ルーターなどがあります。
   
 
頻繁に複数のプロファイルを切り替える必要がある時は、[[#プロファイルの自動切り替え|プロファイルの自動切り替え]]を使って下さい。一般的な例として、ラップトップがあります。
 
頻繁に複数のプロファイルを切り替える必要がある時は、[[#プロファイルの自動切り替え|プロファイルの自動切り替え]]を使って下さい。一般的な例として、ラップトップがあります。
93行目: 93行目:
   
 
まず必要なパッケージを[[インストール]]してください:
 
まず必要なパッケージを[[インストール]]してください:
* {{ic|netctl-auto@''interface''.service}} を使うには {{Pkg|wpa_actiond}} パッケージが必要です。
+
* {{ic|netctl-auto@''interface''.service}} を使うには {{AUR|wpa_actiond}} パッケージが必要です。
 
* {{ic|netctl-ifplugd@''interface''.service}} を使うには {{Pkg|ifplugd}} パッケージが必要です。
 
* {{ic|netctl-ifplugd@''interface''.service}} を使うには {{Pkg|ifplugd}} パッケージが必要です。
   
100行目: 100行目:
 
{{ic|netctl-auto@''interface''.service}} によって無線プロファイルが自動的に起動'''しない'''ようにしたい場合は、そのプロファイルに {{ic|1=ExcludeAuto=yes}} を加える必要があります。また、{{ic|1=Priority=}} を使うことで複数のプロファイルが利用可能な場合に、どのプロファイルを優先的に使うか設定できます。{{ic|netctl-ifplugd@''interface''.service}} は [[Wikipedia:ja:DHCP|DHCP]] を使うプロファイルを優先します。固定 IP のプロファイルを優先させるために、{{ic|1=AutoWired=yes}} を使うことができます。詳しくは {{ic|netctl.profile(5)}} を見て下さい。
 
{{ic|netctl-auto@''interface''.service}} によって無線プロファイルが自動的に起動'''しない'''ようにしたい場合は、そのプロファイルに {{ic|1=ExcludeAuto=yes}} を加える必要があります。また、{{ic|1=Priority=}} を使うことで複数のプロファイルが利用可能な場合に、どのプロファイルを優先的に使うか設定できます。{{ic|netctl-ifplugd@''interface''.service}} は [[Wikipedia:ja:DHCP|DHCP]] を使うプロファイルを優先します。固定 IP のプロファイルを優先させるために、{{ic|1=AutoWired=yes}} を使うことができます。詳しくは {{ic|netctl.profile(5)}} を見て下さい。
   
{{Warning|''netctl-auto'' による WPA のプロファイルの自動選択は {{ic|1=Security=wpa-config}} オプションでは出来ません、代わりに {{ic|1=Security=wpa-configsection}} を使って下さい。}}
+
{{Warning|''netctl-auto'' による WPA のプロファイルの自動選択は {{ic|1=Security=wpa-config}} オプションではできません、代わりに {{ic|1=Security=wpa-configsection}} を使って下さい。}}
   
 
プロファイルを設定して、動作するのを確認したら、''systemctl'' を使ってサービスを有効にしてください:
 
プロファイルを設定して、動作するのを確認したら、''systemctl'' を使ってサービスを有効にしてください:
108行目: 108行目:
 
{{Warning|
 
{{Warning|
 
* {{ic|1=Key=}} の値が空だったり、プロファイルのどれかにエラーがある場合、このユニットは起動時に {{ic|"Failed to read or parse configuration '/run/network/wpa_supplicant_wlan0.conf'}} というメッセージを残して (そのプロファイルが使われていなかったとしても) 失敗します。
 
* {{ic|1=Key=}} の値が空だったり、プロファイルのどれかにエラーがある場合、このユニットは起動時に {{ic|"Failed to read or parse configuration '/run/network/wpa_supplicant_wlan0.conf'}} というメッセージを残して (そのプロファイルが使われていなかったとしても) 失敗します。
* この方法は[[#基本的な方法|基本的な方法]]と衝突します。以前 ''netctl'' でプロファイルを有効にしていたのならば、{{bc|# netctl disable ''profile''}} を実行してプロファイルを二重に起動しないようにしてください。}}
+
* この方法は[[#基本的な方法|基本的な方法]]と衝突します。以前 ''netctl'' でプロファイルを有効にしていたのならば、{{ic|# netctl disable ''profile''}} を実行してプロファイルを二重に起動しないようにしてください。}}
   
 
netctl 1.3 から、netctl-auto サービスを止めないで netctl-auto によって管理されているインターフェイスを手動で操作できるようになりました。netctl-auto コマンドを使ってこれを行うことが可能です。利用可能な操作のリストを表示するには次を実行してください:
 
netctl 1.3 から、netctl-auto サービスを止めないで netctl-auto によって管理されているインターフェイスを手動で操作できるようになりました。netctl-auto コマンドを使ってこれを行うことが可能です。利用可能な操作のリストを表示するには次を実行してください:
 
# netctl-auto --help
 
# netctl-auto --help
   
  +
=== サンプルプロファイル ===
===パスワードの暗号化 (256-bit PSK)===
 
  +
  +
==== 有線 ====
  +
  +
DHCP 接続を使う場合、サンプルプロファイルの {{ic|/etc/netctl/examples/ethernet-dhcp}} を {{ic|/etc/netctl}} にコピーして {{ic|Interface}} を設定するだけです。例:
  +
{{hc|/etc/netctl/''my_dhcp_profile''|<nowiki>
  +
Interface=enp1s0
  +
Connection=ethernet
  +
IP=dhcp</nowiki>
  +
}}
  +
  +
固定 IP 設定を使う場合、サンプルプロファイルの {{ic|/etc/netctl/examples/ethernet-static}} を {{ic|/etc/netctl}} にコピーして {{ic|Interface}}, {{ic|Address}}, {{ic|Gateway}}, {{ic|DNS}} を適切に変更してください。例:
  +
{{hc|/etc/netctl/''my_static_profile''|<nowiki>
  +
Interface=enp1s0
  +
Connection=ethernet
  +
IP=static
  +
Address=('10.1.10.2/24')
  +
Gateway='10.1.10.1'
  +
DNS=('10.1.10.1')</nowiki>
  +
}}
  +
  +
サブネットを指定する {{ic|/24}} に注意してください。{{ic|255.255.255.0}} のネットマスクと同じであり、これがないとプロファイルを起動しません。詳しくは [[wikipedia:ja:Classless Inter-Domain Routing#プレフィックス集約|CIDR 表記]]を参照してください。{{ic|Address&#61;('10.1.10.2/24' '192.168.1.2/24')}} と設定することで複数の IP アドレスを NIC にエイリアスできます。
  +
  +
==== ワイヤレス (WPA-PSK) ====
   
 
{{Note|"暗号化"されていたとしても、プロファイルに記述したキーだけで WPA-PSK ネットワークに接続することは可能です。従って、この手順は人間が読めるパスフレーズを隠すことにしか訳に立ちません。ファイルを読める人間がネットワークに接続するのを止めることはできません。どこでも同じパスフレーズを使うというのはセキュリティ的に問題があります、同じパスワードをどこかで使っていないか自問自答するべきでしょう。}}
 
{{Note|"暗号化"されていたとしても、プロファイルに記述したキーだけで WPA-PSK ネットワークに接続することは可能です。従って、この手順は人間が読めるパスフレーズを隠すことにしか訳に立ちません。ファイルを読める人間がネットワークに接続するのを止めることはできません。どこでも同じパスフレーズを使うというのはセキュリティ的に問題があります、同じパスワードをどこかで使っていないか自問自答するべきでしょう。}}
130行目: 153行目:
 
#psk="''passphrase''"
 
#psk="''passphrase''"
 
psk=64cf3ced850ecef39197bb7b7b301fc39437a6aa6c6a599d0534b16af578e04a
 
psk=64cf3ced850ecef39197bb7b7b301fc39437a6aa6c6a599d0534b16af578e04a
  +
<nowiki>}</nowiki>
}
 
 
}}
 
}}
   
153行目: 176行目:
   
 
{{Note|
 
{{Note|
* {{ic|Key}} 変数には [https://github.com/joukewitteveen/netctl/blob/master/docs/netctl.profile.5.txt netctl.profile(5)] の最後で説明されている '''special non-quoting rules''' を使うようにして下さい。
+
* {{ic|Key}} 変数には [https://github.com/joukewitteveen/netctl/blob/master/docs/netctl.profile.5.txt netctl.profile(5)] の最後で説明されている '''special quoting rules''' を使うようにして下さい。
 
* パスフレーズが失敗する場合、{{ic|Key}} の中の {{ic|\"}} を削除してみてください。}}
 
* パスフレーズが失敗する場合、{{ic|Key}} の中の {{ic|\"}} を削除してみてください。}}
   
  +
==ヒントとテクニック‎==
==Tips and Tricks==
 
   
 
=== GUI を使う ===
 
=== GUI を使う ===
214行目: 237行目:
 
}}
 
}}
   
  +
そして、{{ic|active-backup}} を使うように {{ic|bonding}} ドライバーのオプションを設定して、{{ic|primary}} パラメータを使用したいデバイス (普通は有線インターフェイス) に設定します。また、{{ic|ip link}} を実行したときに返されるのと同じデバイス名を使うようにしてください:
Then, configure the options of the {{ic|bonding}} driver to use {{ic|active-backup}} and configure the {{ic|primary}} parameter to the device you want to be the active one (normally the wired interface). Also, be sure to use the same device name as returned when running {{ic|ip link}}:
 
   
 
{{hc|/etc/modprobe.d/bonding.conf|2=
 
{{hc|/etc/modprobe.d/bonding.conf|2=
220行目: 243行目:
 
}}
 
}}
   
The {{ic|miimon}} option is needed, for the link failure detection. The {{ic|max_bonds}} option avoids the {{ic|Interface bond0 already exists}} error. More information can be obtained on the [https://www.kernel.org/doc/Documentation/networking/bonding.txt kernel documentation].
+
{{ic|miimon}} オプションはリンクが切れたのを検出するために必要です。{{ic|max_bonds}} オプションは {{ic|Interface bond0 already exists}} エラーを回避します。詳しい情報は [https://www.kernel.org/doc/Documentation/networking/bonding.txt カーネルドキュメント] を参照してください。
   
  +
次に、2つのハードウェアインターフェイスを従属させる netctl プロファイルを設定します。使用したい全てのデバイスの名前を使ってください。有線・無線インターフェイスが3つ以上ある場合、全てのインターフェイスを bond インターフェイスに接続させることができます。ただし、大抵の場合は、有線と無線、2つのデバイスだけを使用します:
Next, configure a netctl profile to enslave the two hardware interfaces. Use the name of all the devices you want to enslave. If you have more than two wired or wireless interfaces, you can enslave all of them on a bond interface. But, for most cases you will have only two devices, a wired and a wireless one:
 
   
 
{{hc|/etc/netctl/failover|2=
 
{{hc|/etc/netctl/failover|2=
232行目: 255行目:
 
}}
 
}}
   
  +
前に使っていた他のプロファイル (特に有線や無線のプロファイル) は全て無効化して、起動時に failover プロファイルを有効にするようにしてください:
Disable any other profiles (specially a wired or wireless) you had enabled before and then enable the failover profile on startup:
 
   
 
# netctl enable failover
 
# netctl enable failover
   
  +
それから使用したい既知のネットワークに接続できるように ''wpa_supplicant'' を設定する必要があります。インターフェイスごとにファイルを作成して systemd で有効化してください。以下の内容でファイルを作成:
Now you need to configure ''wpa_supplicant'' to connect to any know network you wish. You should create a file for each interface and enable it on systemd. Create the following file with this content:
 
   
 
{{hc|/etc/wpa_supplicant/wpa_supplicant-wlan0.conf|2=
 
{{hc|/etc/wpa_supplicant/wpa_supplicant-wlan0.conf|2=
243行目: 266行目:
 
}}
 
}}
   
  +
ファイルの末尾に接続したいネットワークを追加してください:
And append to the end of this file any networks you want to connect:
 
   
 
network={
 
network={
269行目: 292行目:
 
}}
 
}}
   
その後、システムをもう一度再起動して問題ないか確認してください。{{ic|netctl@failover.service}} ユニットの [[systemd#Journal|journal]] を確認することでボンディングの状態をチェックできます。
+
その後、システムをもう一度再起動して問題ないか確認してください。{{ic|netctl@failover.service}} ユニットの [[systemd#Journal|journal]] を確認することでボンディングの状態をチェックできます。インターフェイスを確認:
 
And by checking:
 
   
 
# ip link
 
# ip link
   
  +
以下のように表示されるはずです:
You should see something like this:
 
   
 
1: eth0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP mode DEFAULT group default qlen 1000
 
1: eth0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP mode DEFAULT group default qlen 1000
288行目: 309行目:
   
 
=== 全てのインターフェイスを使う ===
 
=== 全てのインターフェイスを使う ===
  +
ときには、プロファイルでシステム上の全てのインターフェイスを使いたいという場合もあります。例えば、様々なハードウェアの様々なマシンにまたがって共通のディスクイメージを使用するケースです (ヘッドレスサーバーの場合、特にこういうことがあります)。カーネルの命名規則を使って、マシンにイーサネットインターフェイスが一つしかない場合、おそらく適切なインターフェイスは eth0 です。しかしながら、udev の [https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/ Predictable Network Interface Names] を使うとすると、ハードウェアが検出された順番ではなく (例: eth0, eth1)、名前はそれぞれのハードウェアに基づいて命名されます (例: enp1s0)。その場合、マシンによってインターフェイスの名前が変わってしまうため、netctl プロファイルを他のマシンで使うことはできなくなります。
In some cases it may be desirable to allow a profile to use any interface on the system. A common example use case is using a common disk image across many machines with differing hardware (this is especially useful if they are headless). If you use the kernel's naming scheme, and your machine has only one ethernet interface, you can probably guess that eth0 is the right interface. If you use udev's [http://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/ Predictable Network Interface Names], however, names will be assigned based on the specific hardware itself (e.g. enp1s0), rather than simply the order that the hardware was detected (e.g. eth0, eth1). This means that a netctl profile may work on one machine and not another, because they each have different interface names.
 
   
  +
簡単で粗雑な解決方法は {{ic|/etc/netctl/interfaces/}} ディレクトリを利用する方法です。インターフェイスのエイリアス (下記の例では {{ic|en-any}}) の名前を決めて、その名前を使ったファイルに以下を記述します (ファイルには実行可能権限を付与してください)。
A quick and dirty solution is to make use of the {{ic|/etc/netctl/interfaces/}} directory. Choose a name for your interface alias ({{ic|en-any}} in this example), and write the following to a file with that name (making sure it is executable).
 
 
{{hc|/etc/netctl/interfaces/en-any|<nowiki>
 
{{hc|/etc/netctl/interfaces/en-any|<nowiki>
 
#!/bin/bash
 
#!/bin/bash
299行目: 320行目:
 
echo "en-any: using interface $Interface";
 
echo "en-any: using interface $Interface";
 
</nowiki>}}
 
</nowiki>}}
  +
そしてインターフェイスのエイリアスを使用するプロファイルを作成してください。{{ic|Interface}} ディレクティブに特に注意してください。後はサンプルと同じです。
Then create a profile that uses the interface. Pay special attention to the {{ic|Interface}} directive. The rest are only provided as examples.
 
 
{{hc|/etc/netctl/wired|<nowiki>
 
{{hc|/etc/netctl/wired|<nowiki>
 
Description='Wired'
 
Description='Wired'
310行目: 331行目:
 
</nowiki>}}
 
</nowiki>}}
   
  +
{{ic|wired}} プロファイルを起動すると、上記の2つのファイルを使用するマシンは自動的に、udev によって割り当てられた名前は無視して、システムで一番最初に認識されたイーサネットインターフェイスを立ち上げて設定します。インターフェイスの設定としてはあまり信頼性がある方法ではないので注意してください。インターフェイスが複数ある場合、netctl によって全てのインターフェイスに同じインターフェイスが割り当てられ、接続ができなくなってしまう可能性があります。ソリューションが複雑になるのを気にしないときは、{{ic|netctl-auto}} のほうが信頼できます。
When the {{ic|wired}} profile is started, any machine using the two files above will automatically bring up and configure the first ethernet interface found on the system, regardless of what name udev assigned to it. Note that this is not the most robust way to go about configuring interfaces. If you use multiple interfaces, netctl may try to assign the same interface to them, and will likely cause a disruption in connectivity. If you do not mind a more complicated solution, {{ic|netctl-auto}} is likely to be more reliable.
 
   
 
=== フックを使う ===
 
=== フックを使う ===
   
  +
netctl は {{ic|/etc/netctl/hooks/}} からフックを使うことができ、インターフェイスごとのフックは {{ic|/etc/netctl/interfaces/}} に保存します。フック/インターフェイスではプロファイルで使えるあらゆるオプションが設定できます。プロファイルと同じように読み込まれて、特に重要なのは {{ic|ExecUpPost}} と {{ic|ExecDownPre}} です。
netctl supports hooks in {{ic|/etc/netctl/hooks/}} and per interface hooks in {{ic|/etc/netctl/interfaces/}}. You can set any option in a hook/interface that you can
 
in a profile. They are read the same way! Most importantly this includes {{ic|ExecUpPost}} and {{ic|ExecDownPre}}.
 
   
  +
プロファイルを読み込むとき、netctl は {{ic|hooks}} にある全ての実行可能なスクリプトを読み込んで、それからプロファイルを読み込み接続を行います。そして、最後に {{ic|interfaces}} ディレクトリに入っている、使用するインターフェイスと同じ名前の実行可能なスクリプトを読み込みます。そのため、インターフェイススクリプトで定義したオプションはプロファイル (とフック) の宣言を上書きします。
When a profile is read, netctl sources ''all executable'' scripts in {{ic|hooks}}, then it reads the profile file for the connection and finally it sources an executable script with the name of the interface used in the profile from the {{ic|interfaces}} directory. Therefore, declarations in an interface script override declarations in the profile, which override declarations in hooks.
 
   
The variables {{ic|$INTERFACE}}, {{ic|$SSID}}, {{ic|$ACTION}} and {{ic|$Profile}} are available in hooks/interfaces '''only''' when using {{ic|netctl-auto}}
+
{{ic|netctl-auto}} を使用する場合、フックやインターフェイスで使うことができる変数は {{ic|$INTERFACE}}, {{ic|$SSID}}, {{ic|$ACTION}}, {{ic|$Profile}} だけです。
   
 
==== サンプル ====
 
==== サンプル ====
342行目: 362行目:
 
===== デフォルトの DHCP クライアントの設定 =====
 
===== デフォルトの DHCP クライアントの設定 =====
   
  +
全てのプロファイルで使用する DHCP クライアントを設定・変更するには:
To set or change the DHCP client used for all profiles:
 
   
 
{{hc|/etc/netctl/hooks/dhcp|<nowiki>
 
{{hc|/etc/netctl/hooks/dhcp|<nowiki>
349行目: 369行目:
 
</nowiki>}}
 
</nowiki>}}
   
  +
もしくは、以下の行を含んだ実行可能ファイル {{ic|/etc/netctl/interfaces/<interface>}} を作成することで、特定のネットワークインターフェイスでクライアントを指定することもできます:
Alternatively, it may also be specified for a specific network interface by creating an executable file {{ic|/etc/netctl/interfaces/<interface>}} with the following line:
 
   
 
DHCPClient='dhclient'
 
DHCPClient='dhclient'
357行目: 377行目:
 
=== Job for netctl@wlan(...).service failed ===
 
=== Job for netctl@wlan(...).service failed ===
   
  +
''netctl'' でネットワークに接続するときに、以下のような問題が発生することがあります:
Some people have an issue when they connect to a network with ''netctl'', for example:
 
   
 
{{hc|# netctl start wlan0-ssid|<nowiki>
 
{{hc|# netctl start wlan0-ssid|<nowiki>
363行目: 383行目:
 
</nowiki>}}
 
</nowiki>}}
   
  +
{{ic|journalctl -xn}} を確認して、以下のどちらかを行なって下さい:
When then looking at {{ic|journalctl -xn}}, either of the following are shown:
 
   
  +
1. デバイスが立ち上がっている場合 (上記の場合 {{ic|wlan0}}):
1. If your device ({{ic|wlan0}} in this case) is up:
 
 
network[2322]: The interface of network profile 'wlan0-ssid' is already up
 
network[2322]: The interface of network profile 'wlan0-ssid' is already up
   
  +
インターフェイスを落とすように設定すれば問題は解決します:
Setting the interface down should resolve the problem:
 
 
# ip link set wlan0 down
 
# ip link set wlan0 down
   
  +
一度落としてから再試行してください:
Then retry:
 
 
# netctl start wlan0-ssid
 
# netctl start wlan0-ssid
   
  +
2. インターフェイスが落ちている場合:
2. If it is down:
 
 
dhcpcd[261]: wlan0: ipv4_sendrawpacket: Network is down
 
dhcpcd[261]: wlan0: ipv4_sendrawpacket: Network is down
   
  +
{{Pkg|dhclient}} など、別の DHCP クライアントを使えば解決します。クライアントのパッケージをインストールしてから ''netctl'' を設定してください:
One way to solve this is to use a different DHCP client, for example {{Pkg|dhclient}}. After installing the package configure ''netctl'' to use it:
 
   
 
{{hc|/etc/netctl/wlan0-ssid|<nowiki>
 
{{hc|/etc/netctl/wlan0-ssid|<nowiki>
384行目: 404行目:
 
</nowiki>}}
 
</nowiki>}}
   
Adding the {{ic|ForceConnect}} option may also be helpful:
+
{{ic|ForceConnect}} オプションを追加することで解決することもあります:
   
 
{{hc|/etc/netctl/wlan0-ssid|<nowiki>
 
{{hc|/etc/netctl/wlan0-ssid|<nowiki>
393行目: 413行目:
 
</nowiki>}}
 
</nowiki>}}
   
  +
プロファイルを保存したら再度接続を試行してください:
Save it and try to connect with the profile:
 
 
# netctl start wlan0-ssid
 
# netctl start wlan0-ssid
   
 
=== dhcpcd: ipv4_addroute: File exists ===
 
=== dhcpcd: ipv4_addroute: File exists ===
   
  +
dhcpcd と netctl を組み合わせた場合、特にスリープしている間にネットワークを切り替えたときに、復帰時にタイムアウトの問題が発生することがあります。netctl は接続が成功したと報告しますがタイムアウトしてしまいます。このような場合、古いデフォルトルートが残存していて新しくなっていません。この問題を回避するにはデフォルトの dhcp クライアントとして [[#デフォルトの DHCP クライアントの設定|dhclient]] を使うようにしてください。詳しくは [https://bbs.archlinux.org/viewtopic.php?pid=1399842#p1399842 こちら] を参照。
On some systems dhcpcd in combination with netctl causes timeout issues on resume, particularly when having switched networks in the meantime. netctl will report that you are successfully connected but you still receive timeout issues. In this case, the old default route still exists and is not being renewed. A workaround to avoid this misbehaviour is to switch to [[#Set default dhcp client for all profiles|dhclient]] as the default dhcp client. More information on the issue can be found [https://bbs.archlinux.org/viewtopic.php?pid=1399842#p1399842 here].
 
   
 
=== DHCP がタイムアウトする問題 ===
 
=== DHCP がタイムアウトする問題 ===
   
  +
DHCP でリースを要求するときにタイムアウトの問題が発生する場合、タイムアウトの値を netctl のデフォルト値である30秒よりも高く設定することができます。{{ic|/etc/netctl/hooks/}} や {{ic|/etc/netctl/interfaces/}} にファイルを作成して、ファイルに {{ic|1=TimeoutDHCP=40}} を追加して実行可能権限を与えればタイムアウト値が40秒になります。
If you are having timeout issues when requesting leases via DHCP you can set the timeout value higher than netctl's 30 seconds by default. Create a file in {{ic|/etc/netctl/hooks/}} or {{ic|/etc/netctl/interfaces/}}, add {{ic|1=TimeoutDHCP=40}} to it for a timeout of 40 seconds and make the file executable.
 
   
 
=== 接続がタイムアウトする問題 ===
 
=== 接続がタイムアウトする問題 ===
   
  +
DHCP と関係ない (固定イーサネット接続などで) タイムアウトの問題が発生したり、プロファイルを起動するときに以下のようなエラーが表示される場合:
If you are having timeout issues that are unrelated to DHCP (on a static ethernet connection for example), and are experiencing errors similar to the following when starting your profile:
 
 
{{hc|# journalctl _SYSTEMD_UNIT&#61;netctl@''profile''.service|
 
{{hc|# journalctl _SYSTEMD_UNIT&#61;netctl@''profile''.service|
 
Starting network profile &#39;''profile''&#39;...
 
Starting network profile &#39;''profile''&#39;...
412行目: 432行目:
 
Failed to bring the network up for profile &#39;''profile''&#39;
 
Failed to bring the network up for profile &#39;''profile''&#39;
 
}}
 
}}
Then you should increase carrier and up timeouts by adding {{ic|1=TimeoutUp=}} and {{ic|1=TimeoutCarrier=}} to your profile file:
+
プロファイルに {{ic|1=TimeoutUp=}} {{ic|1=TimeoutCarrier=}} を追加して、キャリアタイムアウトとアップタイムアウトの時間を増やしてください:
 
{{hc|/etc/netctl/''profile''|<nowiki>
 
{{hc|/etc/netctl/''profile''|<nowiki>
 
...
 
...
418行目: 438行目:
 
TimeoutCarrier=300</nowiki>
 
TimeoutCarrier=300</nowiki>
 
}}
 
}}
  +
設定を変更したらプロファイルを reenable してください:
Do not forget to reenable your profile:
 
   
 
# netctl reenable ''profile''
 
# netctl reenable ''profile''
440行目: 460行目:
   
 
ワイヤレスカードでサービスを[[有効化]]するには、root で {{ic|netctl-auto-resume@wlan0.service}} などを有効化してください。{{ic|wlan0}} は適当なネットワークインターフェイスに置き換えてください。
 
ワイヤレスカードでサービスを[[有効化]]するには、root で {{ic|netctl-auto-resume@wlan0.service}} などを有効化してください。{{ic|wlan0}} は適当なネットワークインターフェイスに置き換えてください。
  +
  +
=== netctl-auto で突然 WiFi アダプタが動作しなくなる ===
  +
  +
この問題は最近の wpa_supplicant のアップデートが関連しています ({{Bug|44731}} を参照)。ただし回避方法はとても簡単です。{{ic|/etc/netctl/interfaces}} にあなたの使っているインターフェイスの名前のファイル (例: wlp3s0) を以下の内容で作成して実行可能属性を付与してください:
  +
  +
{{hc|/etc/netctl/interfaces/wlp3s0|<nowiki>
  +
WPAOptions="-m ''"
  +
</nowiki>}}
  +
  +
その後、{{ic|netctl-auto}} サービスを再起動すれば WiFi の自動検出がまた動作するようになります。
  +
  +
=== netctl-auto で自動的にワイヤレスカードのブロックを解除してインターフェイスを使うことができない ===
  +
  +
多くのノートパソコンにはワイヤレスカードをオフにするハードウェアボタン (あるいはスイッチ) が付いていますが、カードのブロックはカーネルでも行われます。ブロックは [[Rfkill|rfkill]] によって処理されています。
  +
  +
''netctl-auto'' でワイヤレスカードのブロックを自動的に解除して特定のネットワークに接続したい場合、使用するワイヤレス接続のプロファイルで {{ic|1=RFKill=++auto++}} オプションを設定してください。詳しくは [https://github.com/joukewitteveen/netctl/blob/master/docs/netctl.profile.5.txt netctl.profile(5)] の man ページを参照。
   
 
== 参照 ==
 
== 参照 ==
   
 
* 公式アナウンススレッド: https://bbs.archlinux.org/viewtopic.php?id=157670
 
* 公式アナウンススレッド: https://bbs.archlinux.org/viewtopic.php?id=157670
* AUR に cinnamon アプレットがあります: {{AUR|cinnamon-applet-netctl-systray-menu}}
+
* AUR に cinnamon アプレットがあります: {{AUR|cinnamon-applet-netctl-systray-menu}}{{Broken package link|{{aur-mirror|cinnamon-applet-netctl-systray-menu}}}}

2024年7月10日 (水) 20:40時点における最新版

関連記事

netctl はプロファイルを使ってネットワーク接続を管理・設定する CLI ベースのツールです。netctl は古い netcfg ユーティリティを置き換える新しい Arch Linux の独自プロジェクトです。

インストール

netctl パッケージが公式リポジトリから利用できます。netctl をインストールすると netcfgAUR が置き換えられます。

netctlnetcfgAUR は衝突するパッケージです。プロファイルが正しく設定されていないと、netctl をインストールした後に接続を失う可能性があります。

ノート: systemctl --type=service を使ってネットワークを設定するサービスが動作していないことを確認するとよいでしょう。ネットワークサービスが複数あると衝突します。

必読

netctl を使う前に以下の man ページを読むのを推奨します:

設定

netctl はプロファイルを使ってネットワーク接続を管理します。様々な動作方法があり、プロファイルを自動的に起動したり、必要に応じて手動で起動することができます。

プロファイルの設定

netctl のプロファイルは /etc/netctl/ に保存されています。ユーザーがネットワーク接続を設定するのを助けるために、設定のサンプルファイルが提供されています。これらのサンプルプロファイルが置かれている場所は /etc/netctl/examples/ です。一般的な設定として以下が用意されています:

  • ethernet-dhcp
  • ethernet-static
  • wireless-wpa
  • wireless-wpa-static

サンプルプロファイルを使うには、プロファイルのどれかを /etc/netctl/examples/ から /etc/netctl/ にコピーしてあなたの設定にあわせてプロファイルを修正して下さい:

# cp /etc/netctl/examples/wireless-wpa /etc/netctl/profile
ノート: ほとんどの場合プロファイルの中のインターフェイス名を編集する必要があるはずです。v197 から、udev は wlanX や ethX という命名形式を使ってネットワークのインターフェイス名を割り当てなくなりました。無線インターフェイスが wlan0 で、有線インターフェイスが eth0 ということはなくなっています。インターフェイスの名前を調べるには ip link コマンドを使って下さい。
ヒント:
  • ワイヤレス設定のために、wifi-menu -o を使ってプロファイルを /etc/netctl/ に生成することができます。
  • ケーブルが接続されているかどうかにかかわらず有線インターフェイスで固定 IP プロファイルを有効にしたい場合は、プロファイルに SkipNoCarrier=yes を使ってください。

プロファイルを作成したら、新しく作ったプロファイルを使って接続を確立するために次を実行して下さい:

# netctl start profile
ノート: profile はファイル名です、フルパスを含みません。フルパスを指定すると netctl はエラーコードを返します。

上のコマンドが失敗する場合、journalctl -xnnetctl status profile を使って失敗の詳細情報を取得して下さい。そして設定を修正してから再テストして下さい。

自動操作

プロファイルを(一つのインターフェイスに)一つしか使わなかったり、手動でプロファイルを切り替える場合、基本的な方法を使って下さい。一般的な例として、サーバー・ワークステーション・ルーターなどがあります。

頻繁に複数のプロファイルを切り替える必要がある時は、プロファイルの自動切り替えを使って下さい。一般的な例として、ラップトップがあります。

基本的な方法

この方法では、インターフェイス毎に一つのプロファイルを固定して起動することができます。最初にプロファイルが問題なく起動することを手動で確認します:

# netctl start profile

それから次のコマンドで enabled にしてください:

# netctl enable profile

このコマンドによって systemd サービスが作成・有効にされ、コンピュータが立ち上がる時にサービスが起動するようになります。ただし、netctl はネットワークインターフェイスデバイスが既に起動している場合 (例えば dhcpcd を使っている場合) はプロファイルを実行しません。

プロファイルへの変更はサービスファイルに自動的には適用されません。変更後、プロファイルを再度有効にする必要があります:

# netctl reenable profile

ブート時 (もしくはサービスの起動時) にプロファイルの起動が成功した時に初めて接続は確立されます。具体的に言うと、有線接続の場合はケーブルが挿さっている必要があり、無線接続の場合、ネットワークが圏内である必要があります。

プロファイルの自動切り替え

netctl は自動でプロファイルを切り替えるために2つの特別な systemd サービスを用意しています:

  • 有線インターフェイス: netctl-ifplugd@interface.service。これを使うと、あなたがケーブルを抜き差しするたびに netctl プロファイルが変更されます。
  • 無線インターフェイス: netctl-auto@interface.service。これを使うと、あなたが特定のネットワークの圏内から他のネットワークの圏内に移動したときに netctl のプロファイルが変更されます。

まず必要なパッケージをインストールしてください:

  • netctl-auto@interface.service を使うには wpa_actiondAUR パッケージが必要です。
  • netctl-ifplugd@interface.service を使うには ifplugd パッケージが必要です。

そして netctl-auto@interface.servicenetctl-ifplugd@interface.service が起動できるプロファイルを全て設定してください。

netctl-auto@interface.service によって無線プロファイルが自動的に起動しないようにしたい場合は、そのプロファイルに ExcludeAuto=yes を加える必要があります。また、Priority= を使うことで複数のプロファイルが利用可能な場合に、どのプロファイルを優先的に使うか設定できます。netctl-ifplugd@interface.serviceDHCP を使うプロファイルを優先します。固定 IP のプロファイルを優先させるために、AutoWired=yes を使うことができます。詳しくは netctl.profile(5) を見て下さい。

警告: netctl-auto による WPA のプロファイルの自動選択は Security=wpa-config オプションではできません、代わりに Security=wpa-configsection を使って下さい。

プロファイルを設定して、動作するのを確認したら、systemctl を使ってサービスを有効にしてください:

# systemctl enable netctl-auto@interface.service 
# systemctl enable netctl-ifplugd@interface.service  
警告:
  • Key= の値が空だったり、プロファイルのどれかにエラーがある場合、このユニットは起動時に "Failed to read or parse configuration '/run/network/wpa_supplicant_wlan0.conf' というメッセージを残して (そのプロファイルが使われていなかったとしても) 失敗します。
  • この方法は基本的な方法と衝突します。以前 netctl でプロファイルを有効にしていたのならば、# netctl disable profile を実行してプロファイルを二重に起動しないようにしてください。

netctl 1.3 から、netctl-auto サービスを止めないで netctl-auto によって管理されているインターフェイスを手動で操作できるようになりました。netctl-auto コマンドを使ってこれを行うことが可能です。利用可能な操作のリストを表示するには次を実行してください:

# netctl-auto --help

サンプルプロファイル

有線

DHCP 接続を使う場合、サンプルプロファイルの /etc/netctl/examples/ethernet-dhcp/etc/netctl にコピーして Interface を設定するだけです。例:

/etc/netctl/my_dhcp_profile
Interface=enp1s0
Connection=ethernet
IP=dhcp

固定 IP 設定を使う場合、サンプルプロファイルの /etc/netctl/examples/ethernet-static/etc/netctl にコピーして Interface, Address, Gateway, DNS を適切に変更してください。例:

/etc/netctl/my_static_profile
Interface=enp1s0
Connection=ethernet
IP=static
Address=('10.1.10.2/24')
Gateway='10.1.10.1'
DNS=('10.1.10.1')

サブネットを指定する /24 に注意してください。255.255.255.0 のネットマスクと同じであり、これがないとプロファイルを起動しません。詳しくは CIDR 表記を参照してください。Address=('10.1.10.2/24' '192.168.1.2/24') と設定することで複数の IP アドレスを NIC にエイリアスできます。

ワイヤレス (WPA-PSK)

ノート: "暗号化"されていたとしても、プロファイルに記述したキーだけで WPA-PSK ネットワークに接続することは可能です。従って、この手順は人間が読めるパスフレーズを隠すことにしか訳に立ちません。ファイルを読める人間がネットワークに接続するのを止めることはできません。どこでも同じパスフレーズを使うというのはセキュリティ的に問題があります、同じパスワードをどこかで使っていないか自問自答するべきでしょう。

パスワードを平文で保存したくない場合、256-bit Encrypted PSK を生成するという方法があります。これはパスフレーズと SSID から標準アルゴリズムを使って計算します。

  • 方法 1: wifi-menu -o を実行して /etc/netctl に設定ファイルを生成する
  • 方法 2: 手順に従って手動設定する

どちらの方法でも、chmod 600 /etc/netctl/<config_file> をしてパスワードにユーザーがアクセスできないようにするのを提案します。

wpa_passphrase を使ってあなたの 256-bit Encrypted PSK を生成してください:

$ wpa_passphrase your_essid passphrase
network={
  ssid="your_essid"
  #psk="passphrase"
  psk=64cf3ced850ecef39197bb7b7b301fc39437a6aa6c6a599d0534b16af578e04a
}
ノート: 表示された情報はプロファイルで使うのでターミナルを閉じないで下さい。

新しいターミナルを開き、サンプルファイル wireless-wpa/etc/netctl/examples から /etc/netctl にコピーしてください。

# cp /etc/netctl/examples/wireless-wpa /etc/netctl/wireless-wpa

それからお好きなテキストエディタを使って /etc/netctl/wireless-wpa を編集する必要があります。先に wpa_passphrase を使って生成された Encrypted Pre-shared Key (psk) をプロファイルの Key 変数に追加してください。

256-bit Encrypted PSK を含むネットワークプロファイル wireless-wpa は以下のようになるはずです:

/etc/netctl/wireless-wpa
Description='A simple WPA encrypted wireless connection using 256-bit Encrypted PSK'
Interface=wlp2s2
Connection=wireless
Security=wpa
IP=dhcp
ESSID=your_essid
Key=\"64cf3ced850ecef39197bb7b7b301fc39437a6aa6c6a599d0534b16af578e04a
ノート:
  • Key 変数には netctl.profile(5) の最後で説明されている special quoting rules を使うようにして下さい。
  • パスフレーズが失敗する場合、Key の中の \" を削除してみてください。

ヒントとテクニック‎

GUI を使う

netctl や接続を管理するのにグラフィカルユーザーインターフェースが欲しい場合、netguiAUR をインストールすることができます。ただし、netgui はまだベータなので問題が起こった時のために基本的な netctl の構文には慣れておいて下さい。

'netcfg current' の代用

以前 netcfg current を使っていた場合は、netctl-auto で起動した接続の代わりとして # netctl-auto current を使うことができます (netctl-1.3 以降の機能)。

接続を手動でパースするには、次を使って下さい:

# netctl list | awk '/*/ {print $2}'

Eduroam

WPA2 Enterprise#netctl を見て下さい。

ボンディング

kernel documentation より:

Linux bonding ドライバは複数のネットワークインターフェースを単一の論理的な「結合された」インターフェースに統合する手段を提供します。結合されたインターフェースの動作はモードに依存します。一般に言われる事ですが、モードはホットスタンバイまたは負荷分散サービスを提供します。加えて、リンクの保全監視が実現されます。

ロードバランシング

netctl とボンディングを使うには、公式リポジトリから追加のパッケージをインストールする必要があります: ifenslave.

/etc/netctl/examples/bonding/etc/netctl/bonding にコピーして、以下のように編集してください:

/etc/netctl/bonding
Description='Bond Interface'
Interface='bond0'
Connection=bond
BindsToInterfaces=('eth0' 'eth1')
IP=dhcp
IP6=stateless

古い設定を無効にして、bonding を自動的に起動するよう設定してください。新しいプロファイルに切り替えるには:

# netctl switch-to bonding
ノート: これは bonding ドライバーのデフォルトであるラウンドロビン方式を使います。詳しくは公式ドキュメントを見て下さい。
ヒント: 状態とボンディングモードを確認するには:
$ cat /proc/net/bonding/bond0

有線から無線へのフェイルオーバー

ここでは有線のイーサネットが切断されたときに無線にフォールバックするボンディングを使用する方法を説明します。有線と無線のインターフェイスがどちらも同じネットワークに接続されるような場合に有用です。無線ルーター/アクセスポイントが bridge モードに設定されている必要があります。

公式リポジトリから以下のパッケージをインストールしてください: ifenslavewpa_supplicant

まずは起動時に bonding モジュールがロードされるように設定します (カーネルモジュール#ロードを参照):

/etc/modules-load.d/bonding.conf
bonding

そして、active-backup を使うように bonding ドライバーのオプションを設定して、primary パラメータを使用したいデバイス (普通は有線インターフェイス) に設定します。また、ip link を実行したときに返されるのと同じデバイス名を使うようにしてください:

/etc/modprobe.d/bonding.conf
options bonding mode=active-backup miimon=100 primary=eth0 max_bonds=0

miimon オプションはリンクが切れたのを検出するために必要です。max_bonds オプションは Interface bond0 already exists エラーを回避します。詳しい情報は カーネルドキュメント を参照してください。

次に、2つのハードウェアインターフェイスを従属させる netctl プロファイルを設定します。使用したい全てのデバイスの名前を使ってください。有線・無線インターフェイスが3つ以上ある場合、全てのインターフェイスを bond インターフェイスに接続させることができます。ただし、大抵の場合は、有線と無線、2つのデバイスだけを使用します:

/etc/netctl/failover
Description='A wired connection with failover to wireless'
Interface='bond0'
Connection=bond
BindsToInterfaces=('eth0' 'wlan0')
IP='dhcp'

前に使っていた他のプロファイル (特に有線や無線のプロファイル) は全て無効化して、起動時に failover プロファイルを有効にするようにしてください:

# netctl enable failover

それから使用したい既知のネットワークに接続できるように wpa_supplicant を設定する必要があります。インターフェイスごとにファイルを作成して systemd で有効化してください。以下の内容でファイルを作成:

/etc/wpa_supplicant/wpa_supplicant-wlan0.conf
ctrl_interface=/run/wpa_supplicant
update_config=1

ファイルの末尾に接続したいネットワークを追加してください:

network={
    ssid="SSID"
    psk=PSK
}

難読化された PSK を生成するには WPA supplicant#wpa_passphrase で接続する のページに書かれているように wpa_passphrase を実行します。

そして、wpa_supplicant@ テンプレートサービスにネットワークインターフェイスを指定して有効化してください。例: wpa_supplicant@wlan0

マシンを再起動して設定が上手く機能するかどうか確認できます。

ノート: ボンディングの起動時に以下のエラーが表示される場合:
wlan0 is up - this may be due to an out of date ifenslave

このエラーは failover netctl プロファイルよりも前に wpa_supplicant が実行されてしまっているのが原因です。特に指定がないかぎり systemd は何もかもを同時に実行してしまうからです。bond0 インターフェイスにボンディングする前に、ifenslave は全てのインターフェイスが立ち上がっていないを要求します。ネットワークをスキャンするためにはインターフェイスが立ち上がっている必要があるため、有線インターフェイスだけがボンディングされることにもなります。

このような場合、wpa_supplicant@wlan0 サービスと netctl@failover の依存関係をカスタマイズする必要があります。特に、netctl プロファイルの後に wpa_supplicant が起動されるようにしなくてはなりません。systemd#依存関係を解決する に書かれているようにして、カスタム依存関係ファイルを作成してください:

/etc/systemd/system/wpa_supplicant@wlan0.service.d/customdependency.conf
[Unit]
After=netctl@failover.service

その後、システムをもう一度再起動して問題ないか確認してください。netctl@failover.service ユニットの journal を確認することでボンディングの状態をチェックできます。インターフェイスを確認:

# ip link

以下のように表示されるはずです:

1: eth0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP mode DEFAULT group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
2: wlan0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP mode DORMANT group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
3: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default 
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff

巨大なダウンロードをすることで、ファイルオーバーの設定をテストすることができます。ダウンロードの途中に有線インターフェイスを抜いて見て下さい。無線インターフェイスに切り替わってダウンロードが継続するはずです。そして、もう一度有線インターフェイスを接続すると有線でダウンロードが続行されるはずです。netctl@failover.servicewpa_supplicant@wlan0.service ユニットの journal を確認することでデバッグできます。

全てのインターフェイスを使う

ときには、プロファイルでシステム上の全てのインターフェイスを使いたいという場合もあります。例えば、様々なハードウェアの様々なマシンにまたがって共通のディスクイメージを使用するケースです (ヘッドレスサーバーの場合、特にこういうことがあります)。カーネルの命名規則を使って、マシンにイーサネットインターフェイスが一つしかない場合、おそらく適切なインターフェイスは eth0 です。しかしながら、udev の Predictable Network Interface Names を使うとすると、ハードウェアが検出された順番ではなく (例: eth0, eth1)、名前はそれぞれのハードウェアに基づいて命名されます (例: enp1s0)。その場合、マシンによってインターフェイスの名前が変わってしまうため、netctl プロファイルを他のマシンで使うことはできなくなります。

簡単で粗雑な解決方法は /etc/netctl/interfaces/ ディレクトリを利用する方法です。インターフェイスのエイリアス (下記の例では en-any) の名前を決めて、その名前を使ったファイルに以下を記述します (ファイルには実行可能権限を付与してください)。

/etc/netctl/interfaces/en-any
#!/bin/bash
for interface in /sys/class/net/en*; do
        break;
done
Interface=$(basename $interface)
echo "en-any: using interface $Interface";

そしてインターフェイスのエイリアスを使用するプロファイルを作成してください。Interface ディレクティブに特に注意してください。後はサンプルと同じです。

/etc/netctl/wired
Description='Wired'
Interface=en-any
Connection=ethernet
IP=static
Address=('192.168.1.15/24')
Gateway='192.168.1.1'
DNS=('192.168.1.1')

wired プロファイルを起動すると、上記の2つのファイルを使用するマシンは自動的に、udev によって割り当てられた名前は無視して、システムで一番最初に認識されたイーサネットインターフェイスを立ち上げて設定します。インターフェイスの設定としてはあまり信頼性がある方法ではないので注意してください。インターフェイスが複数ある場合、netctl によって全てのインターフェイスに同じインターフェイスが割り当てられ、接続ができなくなってしまう可能性があります。ソリューションが複雑になるのを気にしないときは、netctl-auto のほうが信頼できます。

フックを使う

netctl は /etc/netctl/hooks/ からフックを使うことができ、インターフェイスごとのフックは /etc/netctl/interfaces/ に保存します。フック/インターフェイスではプロファイルで使えるあらゆるオプションが設定できます。プロファイルと同じように読み込まれて、特に重要なのは ExecUpPostExecDownPre です。

プロファイルを読み込むとき、netctl は hooks にある全ての実行可能なスクリプトを読み込んで、それからプロファイルを読み込み接続を行います。そして、最後に interfaces ディレクトリに入っている、使用するインターフェイスと同じ名前の実行可能なスクリプトを読み込みます。そのため、インターフェイススクリプトで定義したオプションはプロファイル (とフック) の宣言を上書きします。

netctl-auto を使用する場合、フックやインターフェイスで使うことができる変数は $INTERFACE, $SSID, $ACTION, $Profile だけです。

サンプル

接続の確立時にコマンドを実行
/etc/netctl/hooks/myservices
#!/bin/sh
ExecUpPost="systemctl start crashplan.service; systemctl start dropbox@<username>.service"
ExecDownPre="systemctl stop crashplan.service; systemctl stop dropbox@<username>.service"
network-online.target の有効化
/etc/netctl/hooks/status
#!/bin/sh
ExecUpPost="systemctl start network-online.target"
ExecDownPre="systemctl stop network-online.target"

このフックを使うことで、ネットワーク接続が必要な systemd サービスを network-online.target の後に起動するように順番を変えることができ、接続が切断される前にサービスが停止されます。

デフォルトの DHCP クライアントの設定

全てのプロファイルで使用する DHCP クライアントを設定・変更するには:

/etc/netctl/hooks/dhcp
#!/bin/sh
DHCPClient='dhclient'

もしくは、以下の行を含んだ実行可能ファイル /etc/netctl/interfaces/<interface> を作成することで、特定のネットワークインターフェイスでクライアントを指定することもできます:

DHCPClient='dhclient'

トラブルシューティング

Job for netctl@wlan(...).service failed

netctl でネットワークに接続するときに、以下のような問題が発生することがあります:

# netctl start wlan0-ssid
Job for netctl@wlan0\x2ssid.service failed. See 'systemctl status netctl@wlan0\x2ssid.service' and 'journalctl -xn' for details.

journalctl -xn を確認して、以下のどちらかを行なって下さい:

1. デバイスが立ち上がっている場合 (上記の場合 wlan0):

network[2322]: The interface of network profile 'wlan0-ssid' is already up

インターフェイスを落とすように設定すれば問題は解決します:

# ip link set wlan0 down

一度落としてから再試行してください:

# netctl start wlan0-ssid

2. インターフェイスが落ちている場合:

dhcpcd[261]: wlan0: ipv4_sendrawpacket: Network is down

dhclient など、別の DHCP クライアントを使えば解決します。クライアントのパッケージをインストールしてから netctl を設定してください:

/etc/netctl/wlan0-ssid
...
DHCPClient='dhclient'

ForceConnect オプションを追加することで解決することもあります:

/etc/netctl/wlan0-ssid

...

ForceConnect=yes

プロファイルを保存したら再度接続を試行してください:

# netctl start wlan0-ssid

dhcpcd: ipv4_addroute: File exists

dhcpcd と netctl を組み合わせた場合、特にスリープしている間にネットワークを切り替えたときに、復帰時にタイムアウトの問題が発生することがあります。netctl は接続が成功したと報告しますがタイムアウトしてしまいます。このような場合、古いデフォルトルートが残存していて新しくなっていません。この問題を回避するにはデフォルトの dhcp クライアントとして dhclient を使うようにしてください。詳しくは こちら を参照。

DHCP がタイムアウトする問題

DHCP でリースを要求するときにタイムアウトの問題が発生する場合、タイムアウトの値を netctl のデフォルト値である30秒よりも高く設定することができます。/etc/netctl/hooks//etc/netctl/interfaces/ にファイルを作成して、ファイルに TimeoutDHCP=40 を追加して実行可能権限を与えればタイムアウト値が40秒になります。

接続がタイムアウトする問題

DHCP と関係ない (固定イーサネット接続などで) タイムアウトの問題が発生したり、プロファイルを起動するときに以下のようなエラーが表示される場合:

# journalctl _SYSTEMD_UNIT=netctl@profile.service
Starting network profile 'profile'...
No connection found on interface 'eth0' (timeout)
Failed to bring the network up for profile 'profile'

プロファイルに TimeoutUp=TimeoutCarrier= を追加して、キャリアタイムアウトとアップタイムアウトの時間を増やしてください:

/etc/netctl/profile
...
TimeoutUp=300
TimeoutCarrier=300

設定を変更したらプロファイルを reenable してください:

# netctl reenable profile

復帰時の netctl-auto の問題

サスペンドからシステムが復帰したときに netctl-auto がときどき再接続に失敗することがあります。一番簡単な解決法は netctl-auto のサービスを再起動することです。以下のようなサービスを作ることで自動で再起動させることができます:

/etc/systemd/system/netctl-auto-resume@.service
[Unit]
Description=restart netctl-auto on resume.
Requisite=netctl-auto@%i.service
After=suspend.target

[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl restart netctl-auto@%i.service

[Install]
WantedBy=suspend.target

ワイヤレスカードでサービスを有効化するには、root で netctl-auto-resume@wlan0.service などを有効化してください。wlan0 は適当なネットワークインターフェイスに置き換えてください。

netctl-auto で突然 WiFi アダプタが動作しなくなる

この問題は最近の wpa_supplicant のアップデートが関連しています (FS#44731 を参照)。ただし回避方法はとても簡単です。/etc/netctl/interfaces にあなたの使っているインターフェイスの名前のファイル (例: wlp3s0) を以下の内容で作成して実行可能属性を付与してください:

/etc/netctl/interfaces/wlp3s0
WPAOptions="-m ''"

その後、netctl-auto サービスを再起動すれば WiFi の自動検出がまた動作するようになります。

netctl-auto で自動的にワイヤレスカードのブロックを解除してインターフェイスを使うことができない

多くのノートパソコンにはワイヤレスカードをオフにするハードウェアボタン (あるいはスイッチ) が付いていますが、カードのブロックはカーネルでも行われます。ブロックは rfkill によって処理されています。

netctl-auto でワイヤレスカードのブロックを自動的に解除して特定のネットワークに接続したい場合、使用するワイヤレス接続のプロファイルで RFKill=++auto++ オプションを設定してください。詳しくは netctl.profile(5) の man ページを参照。

参照