NETCTL.PROFILE(5)
๐ NETCTL.PROFILE โ the manual page, bestie edition (5) ๐
okay so you're here for netctl.profile(5)?? the profile options page?? iconic. let's go. this is part 1 of 3, so hydrate and stay with me ๐ซถ
โจ NAME โจ
netctl.profile โ profile options. that's it, that's the name. short king energy. ๐
๐ธ SYNOPSIS ๐ธ
netctl.profile
๐ DESCRIPTION ๐
so. profiles for netctl live under /etc/netctl/ and they're literally just plain text files, no cap. they're made of variable definitions that follow bash shell syntax, and ngl they are not expected to execute any code โ this is a vibe situation, not a script situation. the move is to omit as much quoting as humanly possible. however, for a few WPA-related variables, special quoting rules apply (they're below, keep reading, don't scroll past me ๐).
the name of the profile is the name of the file. simple. elegant. and bestie, listen: profile names must not contain newlines, and should not end in .action, .conf, or .service. that's the rule. no exceptions, fr fr.
so whenever a profile is read, all the executable scripts in /etc/netctl/hooks/ get sourced, PLUS any executable script in /etc/netctl/interfaces/ that has the name of the interface for the profile. sneak peek behaviour, we love her โจ
- the name of the current profile is available via the
Profilevariable in the environment of the sourced scripts - on starting or stopping a profile, the respective command is available via the
Commandvariable
and the hierarchy?? the tea: declarations in an interface script override declarations in a profile, which override declarations in hooks. that's the order. respect it.
also every connection type has example profile files chillin' in /etc/netctl/examples/ โ go look, they're free ๐
๐ AVAILABLE CONNECTION TYPES ๐
pick your fighter:
ethernetโ for wired connections. the classic. the OG. ๐wirelessโ for wireless connections. this one requireswpa_supplicantto be available, so don't come crying if it's not installed ๐ญbondโ for bonded interfaces.bridgeโ for bridge interfaces.dummyโ for dummy interfaces.pppโ for PPP connections (currently only PPPoE, that's the limit bestie).pppoeโ for PPPoE connections.mobile_pppโ for mobile broadband PPP connections that use a USB modem.openvswitchโ for Open vSwitch bridge interfaces.tunnelโ for tunnel interfaces.tuntapโ for TUN/TAP interfaces.vlanโ for VLANs on ethernet-like connections.macvlanโ for MACVLANs on ethernet-like connections.wireguardโ for WireGuard interfaces.
๐ GENERAL OPTIONS ๐
these are the universal girlies, everyone gets them:
Description=โ a description of the profile. basically a little bio. make it cute. ๐Connection=โ [mandatory for all profiles] the connection type used by the profile. required, babes, no skipping.Interface=โ [mandatory for all profiles] the name of the associated network interface. โ ๏ธ the interface name should not be quoted โ just say the name, raw, unquoted, unbothered.BindsToInterfaces=()โ an array of physical network interfaces that this profile needs before it can be started. for 'enabled' profiles, systemd will literally wait for the presence of the specified interfaces before starting a profile. if you don't specify this variable, it defaults to the value ofInterface=. she's self-sufficient like that.MACAddress=โ optional MAC address for newly created interfaces. when set to the name of an existing interface, the address of that interface is used. the connection types that create an interface AND are able to set a MAC address arebond,bridge,dummy,vlan, andmacvlan. that's the whole list, don't @ me.After=()โ an array of profile names that should be started before this profile is started. careful though: this is only an ordering dependency, it is not intended to be a list of profiles that this profile requires. the meaning is the same asAfter=insystemd.unit(5). it's giving "after you, no after YOU" ๐ฆWaitOnline=โ set toyesto consider the profile activated only when it is online. defaults tono.ExecUpPost=โ a command that is executed after a connection is established. if the specified command returns anything other than0(success), netctl will abort and stop the profile. if you want the command to be allowed to fail, add|| trueto the end of it. chaos-proof it ๐ExecDownPre=โ a command that is executed before a connection is brought down. similar precautions should be taken as withExecUpPost=. same energy, different direction.TimeoutUpโ maximum time, in seconds, to wait for an interface to get up. defaults to5.ForceConnect=โ set toyesto force connecting even if the interface is up. ๐จ do not use this unless you know what you are doing. i'm serious. this is not a vibe-check situation, this is a "you better know what you're doing" situation.ExcludeAuto=โ whether or not to exclude this profile from automatic profile selection. defaults tonofor wireless and DHCP enabled connections, and toyesotherwise.NETCTL_DEBUG=โ set toyesto generate debugging output. turn it on when things are cursed ๐ฅ
๐ง IP OPTIONS ๐ง
these options apply to all connections that set up an IP-enabled network. in particular, these connection types are: ethernet, wireless, bond, bridge, tunnel, tuntap, and vlan. so basically the whole squad.
IP=โ [mandatory for IPv4] one ofstatic,dhcp, orno, depending on the desired way of obtaining an address.IP6=โ [mandatory for IPv6] one ofstatic,stateless,dhcp-noaddr,dhcp,no, or left out (empty) altogether. and here's the subtle flex: the difference between not specifying and setting tonois in the handling of router advertisement packages, which is blocked byno. sonois not the same as nothing. write that down ๐Address=()โ [requiresIP=static] an array of IP addresses suffixed with/<netmask>. leaving out the brackets for arrays consisting of a single element is accepted in the Bash syntax. we're being lenient, we're being nice ๐ซถGateway=โ [requiresIP=static] an IP routing gateway address.Routes=()โ an array of custom routes of the form:
<address range> via <gateway>
Address6=()โ [requiresIP6=staticorIP6=stateless] an array of IPv6 addresses. prefix length may be specified via the1234:bcd::11/64syntax. and yes you can specify modifiers โ in particular,1234:bcd::11/64 nodaddisables Duplicate Address Detection for the address. fancy โจGateway6=โ [requiresIP6=staticorIP6=stateless] an IPv6 routing gateway address.Routes6=()โ an array of custom routes of the form:
<address range> via <gateway>
DHCPClient=โ [requiresIP=dhcp] the name of the DHCP client to use. by default, netctl comes with support fordhcpcdanddhclient. clients may accept additional options through client-specific variables: command line options fordhcpcd(8)are read fromDhcpcdOptions=(defaults to-L), and command line options fordhclient(8)are read fromDhclientOptions=. defaults todhcpcd.DHCP6Client=โ [requiresIP6=dhcporIP6=dhcp-noaddr] the name of the DHCPv6 client to use. by default,dhcpcdanddhclientare supported. command line options for the IPv6 instance ofdhcpcd(8)are read fromDhcpcdOptions6=, and command line options for the IPv6 instance ofdhclient(8)are read fromDhclientOptions6=. defaults todhclient. yes, the v6 default is different from the v4 default. she contains multitudes ๐DHCPReleaseOnStop=โ set toyesto release the DHCP lease when the profile is stopped. let it go, girl ๐ธIPCustom=()โ an array of argument lines to pass toip. this can be used to achieve complicated configurations within the framework of netctl. for the overachievers.Hostname=โ a transient hostname for the system. a little name tag, but temporary.DNS=()โ an array of DNS nameservers. simply specify the IP addresses of each of the DNS nameservers. no extra steps, babes.DNSDomain=โ adomainline for/etc/resolv.conf, passed toresolvconf(5).DNSSearch=โ asearchline for/etc/resolv.conf, passed toresolvconf(5).DNSOptions=()โ an array ofoptionslines for/etc/resolv.conf, passed toresolvconf(5).TimeoutDHCP=โ maximum time, in seconds, to wait for DHCP to be successful. defaults to30. be patient with her ๐ญTimeoutDAD=โ maximum time, in seconds, to wait for IPv6's Duplicate Address Detection to succeed. defaults to3.SkipDAD=โ whether or not to bypass Duplicate Address Detection altogether. defaults tono.
๐ฆ OPTIONS FOR 'ETHERNET' CONNECTIONS ๐ฆ
next to the ip options (yeah, all of those up there still apply), the following are understood for connections of the ethernet type:
Auth8021X=โ set toyesto use 802.1x authentication.WPAConfigFile=โ path to awpa_supplicantconfiguration file. defaults to/etc/wpa_supplicant.conf.WPADriver=โ thewpa_supplicantdriver to use for 802.1x authentication. defaults towired.TimeoutCarrier=โ maximum time, in seconds, to wait for a carrier. defaults to5.TimeoutWPA=โ maximum time, in seconds, to wait for 802.1x authentication to succeed. defaults to15.SkipNoCarrier=โ whether or not the absence of a carrier (a plugged-in cable, bestie, an actual cable) is acceptable. defaults tono.Priority=โ priority level of the profile. in case of automatic profile selection, profiles are tried in decreasing order of priority. defaults to1in DHCP enabled profiles and to0otherwise. so yeah, higher number = tried first. main character energy ๐
okay that's the first chunk!! there are more parts coming, so do NOT close the tab, we're not done yet ๐
๐ OPTIONS FOR โWIRELESSโ CONNECTIONS ๐
okay bestie, so besides all the ip options you already learned, wireless connections also understand the stuff below. wifi girlies rise ๐ฆโจ
Security=โ one of โnoneโ, โwepโ, โwpaโ, โwpa-configsectionโ, or โwpa-configโ. Defaults to โnoneโ. pick your fighter ๐ESSID=[mandatory] โ the name of the network you're connecting to. Special quoting rules apply (they're explained somewhere below, iykyk). yes it's mandatory, no you can't skip it ๐AP=โ the BSSID (that's a MAC address, bestie) of the access point you want to connect to.Key=โ the secret key to a WEP or WPA encrypted network. Special quoting rules apply here too ๐Hidden=โ whether or not the network you specified is a hidden network. Defaults to โnoโ.AdHoc=โ whether or not to use ad-hoc mode. Defaults to โnoโ.ScanFrequencies=โ a space-separated list of frequencies (in MHz, obviously) to scan when searching for the network. Defaults to all available frequencies. it's giving "scan everything" energy โจFrequency=โ a frequency in MHz to use in ad-hoc mode when a new IBSS is created (aka when the network isn't already there).Priority=โ priority group for the network. When automatic profile selection happens, the matched network with the highest priority wins. Defaults to โ0โ. main character network only ๐WPAConfigSection=()[mandatory forSecurity=wpa-configsection] โ an array of lines that make up a network block for wpa_supplicant. Heads up: all of the options above get ignored. all of them. ๐WPAConfigFile=โ path to a wpa_supplicant configuration file. Only used forSecurity=wpa-config. Every option exceptWPADriver=,TimeoutWPA=, andRFKill=gets ignored. Also, the profile is excluded from automatic profile selection. Defaults to/etc/wpa_supplicant.conf.Country=โ the country for which frequency regulations will be enforced.WPAGroup=โ the group that has the authority to configure wpa_supplicant via its control interface. Defaults to โsystemd-networkโ.WPADriver=โ the wpa_supplicant driver to use. Defaults to โnl80211,wextโ.TimeoutWPA=โ the maximum time, in seconds, to wait for steps in the association and authentication to succeed. Defaults to โ15โ. tick tock โฐRFKill=โ the name of an rfkill device. When you specify one, that device gets used to block/unblock the interface when appropriate. You can find names in/sys/class/rfkill/rfkillX/name. You can also set this variable to โautoโ โ in that case, an rfkill device that's associated with the network interface gets used. so convenient fr fr
๐ฅ OPTIONS FOR โBONDโ CONNECTIONS ๐ฅ
the interfaces listed in BindsToInterfaces= get bound together into the interface named by Interface=. Next to the ip options, here's what bond connections understand:
Mode=โ the bonding policy. Go read the kernel documentation on bonding for the deets.LinkOptions=โ extra options to pass toip link. Runip link add type bond helpto see what's available.
๐ OPTIONS FOR โBRIDGEโ CONNECTIONS ๐
the interfaces in BindsToInterfaces= take part in the bridge named by Interface=. Next to the ip options, bridge connections understand this:
SkipForwardingDelay=โ skip (R)STP and immediately activate all bridge members. This can be useful when DHCP is used on the bridge. no waiting, we go now ๐จ
๐ OPTIONS FOR โDUMMYโ CONNECTIONS ๐
the name of the dummy interface goes in Interface=. Only the ip options are understood for connections of the โdummyโ type. that's it, that's the whole section, lowkey iconic for how simple it is โจ
๐ OPTIONS FOR โPPPโ CONNECTIONS ๐
this connection type is literally identical to the โpppoeโ type below, except the ethernet interface gets specified in BindsToInterfaces=. Also, the value of Interface= has to be of the form โppp<n>โ, where n gets passed on to PPPUnit=.
๐ซถ OPTIONS FOR โPPPOEโ CONNECTIONS ๐ซถ
the interface to dial peer-to-peer over ethernet goes in Interface=. Here's what โpppoeโ connections understand:
User=andPassword=โ the username and password to connect with.ConnectionMode=โ one of โpersistโ or โdemandโ, depending on how a connection should be established. Defaults to โpersistโ.IdleTimeout=[requiresConnectionMode=demand] โ the idle time (in seconds) after which the PPP daemon should disconnect.MaxFail=โ the number of consecutive failed connection attempts to tolerate. A value of0means no limit. Defaults to โ5โ.DefaultRoute=โ whether or not to use the default route provided by the peer. Defaults to โyesโ.UsePeerDNS=โ whether or not to use the DNS servers provided by the peer. Defaults to โyesโ.PPPUnit=โ the PPP unit number in the interface name (โppp0โ, โppp1โ, etc.).LCPEchoInterval=andLCPEchoFailure=โ these options override default LCP parameters from/etc/ppp/options.OptionsFile=โ a file to read additionalpppd(8)options from.
and the following advanced options are understood too, bestie, don't skip these:
PPPoEService=โ the PPPoE service name.PPPoEAC=โ the PPPoE access concentrator name.PPPoESession=โ an existing session to attach to. This option is of the form โsessid:macaddrโ.PPPoEMAC=โ a MAC address to restrict the connection to.PPPoEIP6=โ whether or not to enable IPv6CP and IPv6 protocols. When set to โnoโ, IPv6CP negotiation and IPv6 communication is explicitly disabled.
๐ฆ OPTIONS FOR โMOBILE_PPPโ CONNECTIONS ๐ฆ
the name of the USB serial device goes in Interface=. Here's what โmobile_pppโ connections understand:
User=andPassword=โ the username and password to connect with. These are unset by default, because they're often not required. nice.AccessPointName=โ the access point name (APN) to present to the carrier. This one's specific to your ISP, so yeah, you gotta know it.Pin=โ if your modem requires a PIN to unlock, set it here. ๐ขPhoneNumberโ the number to dial. Defaults to โ*99#โ.Mode=โ the connection mode. Can be one of โ3Gprefโ, โ3Gonlyโ, โGPRSprefโ, โGPRSonlyโ, โNoneโ, or a customAT^SYSCFG=...line specified as โSYSCFG=...โ. This generates AT commands specific to certain Huawei modems โ all other devices should leave this option unset or set to โNoneโ. don't be out here setting Huawei stuff on your not-Huawei modem, bestie, that's a whole vibe check fail ๐Init=โ an initialization string sent to the modem before dialing. This string gets sent after sending โATZโ. Defaults to โATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0โ.ChatScript=โ path to a chat file. If you specify one, no chat script will be generated and all of the options above exceptUser=andPassword=get ignored.MaxFail=โ the number of consecutive failed connection attempts to tolerate. A value of0means no limit. Defaults to โ5โ.DefaultRoute=โ whether or not to use the default route provided by the peer. Defaults to โyesโ.UsePeerDNS=โ whether or not to use the DNS servers provided by the peer. Defaults to โyesโ.PPPUnit=โ the PPP unit number in the interface name (โppp0โ, โppp1โ, etc.).OptionsFile=โ a file to read additionalpppd(8)options from.RFKill=โ the name of an rfkill device. When specified, the device gets used to block/unblock the interface when appropriate. You can find names in/sys/class/rfkill/rfkillX/name. (no โautoโ here, just so you know โ that was the wireless one ๐ซถ)
โญ OPTIONS FOR โOPENVSWITCHโ CONNECTIONS โญ
the interfaces in BindsToInterfaces= take part in the bridge named by Interface=. Only the ip options are understood for connections of the โopenvswitchโ type. short and sweet โจ
๐ธ OPTIONS FOR โTUNNELโ CONNECTIONS ๐ธ
the name of the tunnel interface goes in Interface=. Next to the ip options, โtunnelโ connections understand:
Mode=โ the tunnel type (e.g. โsitโ). Seeip-tunnel(8)for the available modes.Local=โ the address of the local end of the tunnel.Remote=โ the address of the remote end of the tunnel.Key=[requiresMode=gre] โ a key identifying an individual traffic flow within a tunnel.
๐ OPTIONS FOR โTUNTAPโ CONNECTIONS ๐
the name of the tuntap interface goes in Interface=. Next to the ip options, โtuntapโ connections understand:
Mode=โ either โtunโ, or โtapโ.User=โ the owning user of the tun/tap interface.Group=โ the owning group of the tun/tap interface.
๐ OPTIONS FOR โVLANโ CONNECTIONS ๐
the name of the vlan interface goes in Interface=. The underlying physical interface goes in BindsToInterfaces=. So for vlan profiles, BindsToInterfaces= holds the name of a single network interface โ just one, no plural shenanigans.
All the options for connections of the โethernetโ type are understood for connections of the โvlanโ type. On top of that, โvlanโ connections must set a vlan identifier using VLANID=. See ip(8) for details. mandatory, fr fr ๐
๐ง OPTIONS FOR โMACVLANโ CONNECTIONS ๐ง
the name of the macvlan interface goes in Interface=. The underlying physical interface goes in BindsToInterfaces=. So for macvlan profiles, BindsToInterfaces= holds the name of a single network interface, same deal as vlan.
All the options for connections of the โethernetโ type are understood for connections of the โmacvlanโ type. And next to the ip options, โmacvlanโ connections also understand:
Mode=โ either โbridgeโ, โvepaโ, โprivateโ, or โpassthruโ. Seeip(8)for details.
๐ซ OPTIONS FOR โWIREGUARDโ CONNECTIONS ๐ซ
the name of the WireGuard interface goes in Interface=. Next to the ip options, โwireguardโ connections understand one iconic little thing:
WGConfigFile=โ path to a WireGuard configuration file. Defaults to/etc/wireguard/$Interface.conf.
and that's where this part wrapsโฆ except it doesn't, because there's more coming ๐
โจ SPECIAL QUOTING RULES โจ
okay bestie, buckle up because this is the โจweirdโจ part. wpa_supplicant config files use non-standard quoting โ like, they did NOT follow the normal rules, they chose chaos ๐ โ and because we're out here generating those files for you, netctl has to have its own lil quoting rules too. These apply to some variables for connections of the โwirelessโ type. Specifically? These two, bestie:
ESSID=Key=
so yeah, just those. ๐
Here's the tea on how wpa_supplicant itself thinks about this:
- A variable counts as quoted by
wpa_supplicantif it's enclosed in double quotes ("). ๐ - A variable counts as non-quoted by
wpa_supplicantif it does โจnotโจ start with a double quote. - Hexadecimal values are specified non-quoted in config files of
wpa_supplicant.
But netctl does it differently by default: in netctl, variables are written to wpa_supplicant configuration files quoted by default. And so, when special quoting rules apply, it is possible to specify an unquoted (hexadecimal) value using a special syntax. iconic, honestly ๐ซถ
So what ARE netctl's special quoting rules? say it with me:
- A string that starts with a literal double quote is considered non-quoted.
- Any other string is considered quoted. periodt.
And yeah, you can specify quoted strings that start with a double quote โ you just have to quote manually, bestie. โจ
The most unhinged example, the extreme one: specifying a quoted double quote:
X='""""'
๐ญ she's a menace. And on the total opposite end of the spectrum, there's the non-quoted backslash:
X=\"\\
Further examples of quoted strings โ all equivalent, no cap:
X=string
X="string"
X='""string"'
Further examples of non-quoted strings โ also all equivalent:
X=\"string
X="\"string"
X='"string'
And here's the mnemonic to remember all of this ๐ง: think of the prefix โ\"โ as saying โnonโ-โquoteโ. that's it. that's the trick. iykyk ๐
๐ SEE ALSO ๐
and that's the whole page bestie, you made it to the end ๐ฅณ this one's from the netctl.profile(5) era, dated 01/26/2026 โ go forth and configure your little heart out, you absolute main character ๐๐
๐ฆ where this page comes from
- ubuntu resolute: netctl 1.29-1build1 ยท GPL-3.0-only
- ubuntu stonking: netctl 1.29-1build1 ยท GPL-3.0-only
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms