Network Profiles
From ArchWiki
i18n |
---|
English |
简体中文 |
Türkçe |
Contents |
Quickstart
Step 1
# pacman -Sy netcfg
Step 2
Copy an example configuration from /etc/network.d/examples/ to /etc/network.d/mynetwork. You may use another name instead of "mynetwork".
Depending on your security and connection, use the following examples from /etc/network.d/examples/
- WEP hex key wireless-wep
- WEP string key wireless-wep-string-key
- WPA passphrase wireless-wpa
- WPA enterprise wireless-wpa-config
- WPA enterprise/passphrase wireless-wpa-configsection (new in netcfg 2.5)
- Wired connection - dhcp ethernet-dhcp
- Wired connection - static IP ethernet-static
- Wired connection - iproute configuration ethernet-iproute
Step 3
Modify your configuration file new configuration file, /etc/network.d/mynetwork
- Set INTERFACE= to your wireless or ethernet interface. This can be checked with ifconfig and iwconfig.
- Wireless - Make sure you set your ESSID and KEY correctly. Typos in these are common errors.
- Wireless - WPA Enterprise - You'll need to use an external wpa_supplicant configuration.
Step 4
To connect, simply execute:
# netcfg mynetwork
If it does not work, have a look at the troubleshooting section for solutions and how to get help.
If all goes to plan, you can configure it to connect automatically or on boot.
Step 1: Install
Network profiles are handled by the bash scripts available in the netcfg package.
# pacman -Sy netcfg
For information relating to the latest development version of netcfg, see Network Profiles development
Step 2: Create the profile(s)
A profile is a single text file in /etc/network.d which defines variables used by netcfg. The file name will become the name of the profile, and can be anything you wish, it is not a setting involved in the connection.
The easiest way to create a new profile is to use one of the example profiles and edit it to fit with your network.
cp /etc/network.d/example/<profile> /etc/network.d/
The files are allowed to be read as a regular user. If you plan on storing a wireless passkey in this file (stored as regular text) or want to keep regular user from being able to read this file, you should change it's permissions:
chmod 600 /etc/network.d/<profile>
Configuration Notes
Details on some configuration options you may need to know.
Using a string WEP key
This is for a STRING WEP key, not a HEX WEP key, not a WPA key.
KEY="s:Somepasskey"
Ralink legacy drivers rt2500, rt2400 that use iwpriv
There is no plans to add WPA support to these drivers. rt2x00 is supported, however, and will replace these.
If you must use them, create a shell script that runs the needed iwpriv commands and put its path in PRE_UP=""
Passing arguments to iwconfig before connecting
Simply:
IWCONFIG="<arguments>"
Where <arguments> can be any valid iwconfig argument. The script then runs "iwconfig $INTERFACE $IWCONFIG"
For example, setting bssid/ap mac:
IWCONFIG="ap 12:34:56:78:90:12"
This supercedes the IWOPTS and WEP_OPTS options which were incompletely implemented.
Execute commands before/after interface up/down
If your interface requires special actions prior/after the establishment/closure of a connection, you may use the PRE_UP, POST_UP, PRE_DOWN, POST_DOWN properties.
For example, if you want to set your wlan card to operate in ad-hoc mode but you can only change it when the interface is down, you could use something like this:
PRE_UP="ifconfig wlan0 down; iwconfig wlan0 mode ad-hoc"
Or if you want to mount your network shares after a successful connection, you could use:
POST_UP="sleep 5; mount /mnt/shares/nexus/utorrent 2>/dev/null;"
Step 3: Connect
To connect to a profile just execute the following command as root:
# netcfg <profile-name>
To disconnect from a profile:
# netcfg down <profile-name>
Where <profile-name> is the name of the file created in /etc/network.d. For example /etc/network.d/homewireless would simply have a profile name of homewireless
Step 4: Connecting on boot
net-profiles
net-profiles
allows you to start some profiles on boot.
In order to do that you need to list the /etc/network.d/ profiles you want netcfg to try at boot in the NETWORKS=()
line in /etc/rc.conf.
NETWORKS=(home mywireless)
You also need to add net-profiles
to the DAEMONS array, eg: DAEMONS=(... net-profiles ...).
If you are only using a laptop, with little-to-no use of ethernet, you may want to delete the Network Daemon to resolve boot issues.
Display a menu at boot
net-profiles
can also display a menu so you can pick which profile you want to set up. For that you just need to set NETWORKS= to menu:
NETWORKS=menu
or
NETWORKS=(menu)
(either will work). You can also access that menu at any time by running netcfg-menu
in a terminal.
The dialog package is needed.
Automatic detection
net-auto
net-auto
is the second boot-time script of the netcfg package. Its function is to determine automatically which profile should be started.
net-auto
reads the AUTO_NETWORKS=() line in /etc/rc.conf. For example:
AUTO_NETWORKS=(auto-wireless wlan0)
Like net-profiles
it needs to be added to the DAEMONS=() line, eg: DAEMONS=(... net-auto ...).
To run after boot:
# /usr/bin/netcfg-auto-wireless $interface
note: for this to work with a given profile, that profile MUST set the ESSID variable (which is not required to connect manually if a separate wpa_supplicant.conf is supplied.)
Troubleshooting
Wireless connections
For wireless connections, make sure the required drivers and firmwares are installed as explained in Wireless Setup.
netcfg error messages
Network unavailable
This is typically one of:
- Out of range
- Driver issue (See Driver Quirks above)
- Trying to connect to a hidden network
If you know your network is hidden, set
SCAN=no
Wireless Association failed
This is typically one of:
- Out of range/reception
- Incorrect configuration
- Invalid key
- Driver problem (See Driver Quirks above)
If it is a range problem, increasing TIMEOUT= can help.
Unable to get IP address with DHCP
This is typically one of:
- Out of range/reception
Try increasing DHCP_TIMEOUT
Not a valid connection, check spelling or look at examples
You must set CONNECTION= to one of the connection types in /usr/lib/network/connections/. Alternatively use one of the provided configuration examples in /etc/network.d/examples.
Driver Quirks (netcfg 2.1 and later)
Some drivers behave oddly and need workarounds to connect. These have to be enabled manually. They're best determined by reading the forums, seeing what others have used, and, if that fails, trial and error. They can be combined.
- prescan - Run "iwlist $INTERFACE scan" before attempting to connect (Some broadcom)
- preessid - Run "iwconfig $INTERFACE essid $ESSID" before attempting to connect. (Some ipw3945 and Intel PRO/Wireless 4965AGN)
- wpaessid - Same as previous, run before starting wpa_supplicant (ath9k)
- predown - Take interface down before association and then restore it after. (madwifi)
- postsleep - Sleep 1 second before checking if the association was successful
- postscan - Run "iwlist scan" after associating
For example
QUIRKS=(prescan preessid)
If you are having problems with DNS and DHCP, try adding to your profile:
DHCLIENT=yes
This will tell netcfg to use dhclient instead of dhcpcd(witch netcfg uses by default)
If you get "Wireless Network Not Found" or "Association Failed" and have tried the above, try:
SCAN=no
It still doesn't work, what do I do ?
If the FAQs below didn't solve your problem the next best place to go is the forums, or the mailing list.
To be able to determine what's wrong, we need information so when you post, make sure that you provide the following output:
- ALL OUTPUT FROM netcfg
- ALL OUTPUT FROM netcfg
- ALL OUTPUT FROM netcfg - this is absolutely crucial to be able determine what went wrong. The message might be short or nonexistant, but it can mean a great deal.
- Your /etc/network.d network profiles - Also crucial as many problems are simple config issues. Feel free to censor your wireless key.
- netcfg version
- lsmod
- iwconfig
GUI
A Qt-based netcfg frontend called ArchAssistant exists. It proposes to manage & connect/disconnect profiles from a systray icon. Automatic wireless detection is also available. This tool is particularly useful for laptop users.
Links: archassistant on AUR | archassistant on kde-apps.org | archassistant package on archlinux.fr i686 and x86_64
There is also a relatively new gui to netcfg2 on qt-apps that does only network configuring.You can find it here: [1].
Supplementary tools
There is a console tool for selecting wireless networks "in real-time" (in NetworkManager manner) called wifi-select
. The tool is convenient for use in wifi-cafe or another places you are visiting for the first (and maybe the last) time. Then you don't need to create the file-profile for a new network, just type sudo wifi-select wlan0
and choose the network you need.
The tool is currently packaged and available in [community] repository. To install, do pacman -S wifi-select
.
It works as follows:
- parses
iwlist scan
results and presents list of networks along with its security settings (wpa/wep/none) usingdialog
- if user selects network with existing profile -- just use this profile to connect with
netcfg
- if user selects a new network (for example network from wifi-cafe he currently visited),
wifi-select
automatically generates new profile with corresponding$SECURITY
and asks for the key (if needed). It uses DHCP as$IP
by default - then, if connection succeeds, profile is saved for later usage
- if connection fails, user is asked if he/she wants to keep generated profile for further usage (for example to change
$IP
to static or adjust some additional options)
Links:
Forum thread related to development of wifi-select
| wifi-select on AUR | wifi-select mercurial repository
FAQ
Why doesnt netcfg do x?
netcfg doesn't need to. It connects to networks.
But netcfg is super modular and re-usable. Have a look at /usr/lib/networks/ -- heaps of reusable functions for your own scripts.
Why doesn't netcfg behave in this way? It makes more sense
netcfg doesn't enforce any rules. It's task is to connect to networks. It doesn't impose any heuristics, like 'disconnect from wireless if ethernet is connected'.
If you want behaviour like that, it'd be really easy to write a separate tool over netcfg. See the question above.
Do I still need x when I'm using netcfg?
- /etc/hosts: Yes, you still need this, this is important. Don't remove your hostname from this otherwise you'll have some odd problems.
- HOSTNAME= in /etc/rc.conf: It's strongly recommended you keep this, otherwise no hostname will be set if a profile fails
- DAEMONS=(network) and INTERFACES=() in /etc/rc.conf: If you've setup all your networks with netcfg instead, yes, you can remove this. You can also safely remove lo, it's been moved into rc.sysinit.
- lo: This is now in rc.sysinit, you don't need to configure it anywhere.
Additional Resources
- http://www.rayner.id.au/netcfg/ - documentation of the supported options for 'wireless' and 'ethernet' of netcfg profile.
- Network Profiles development - wiki about netcfg in the [Testing] repo.