如何在启动时启用 wpa_supplicant?

Thi*_*Not 5 wpa-supplicant fedora systemd

我正在尝试在 Fedora 20 中启动时启用 wpa_supplicant。我创建/etc/wpa_supplicant/wpa_supplicant.conf并能够通过运行手动连接到我的无线网络

wpa_supplicant -B -i wlan0 -Dwext -c /etc/wpa_supplicant/wpa_supplicant.conf
Run Code Online (Sandbox Code Playgroud)

(我可以通过运行确认我已连接iwconfig

我是 systemd 的新手,无法弄清楚如何在启动时发生这种情况。我发现其他使用 systemd 的发行版的指南说你需要做的就是

systemctl enable wpa_supplicant@wlan0
Run Code Online (Sandbox Code Playgroud)

但是当我运行该命令时,我得到

Failed to issue method call: No such file or directory
Run Code Online (Sandbox Code Playgroud)

注意:在官方 Fedora 支持论坛上交叉发布,但尚未收到任何答复。

Thi*_*Not 6

Braiam在评论中建议,如果不存在,我可能需要自己创建它,并且还向我指出了Arch Linux wiki中描述如何创建它的wpa_supplicant@wlan0页面。我必须对 Fedora 稍作调整,但以下内容对我有用:

  1. 创建一个 systemd 单元/etc/systemd/system/network-wireless@.service

    [Unit]
    Description=Wireless network connectivity (%i)
    Wants=network.target
    Before=network.target
    BindsTo=sys-subsystem-net-devices-%i.device
    After=sys-subsystem-net-devices-%i.device
    
    [Service]
    Type=oneshot
    RemainAfterExit=yes
    
    ExecStart=/usr/sbin/ip link set dev %i up
    ExecStart=/usr/sbin/wpa_supplicant -B -i %i -c /etc/wpa_supplicant/wpa_supplicant.conf
    #ExecStart=/usr/sbin/dhclient %i
    
    ExecStop=/usr/sbin/ip link set dev %i down
    
    [Install]
    WantedBy=multi-user.target
    
    Run Code Online (Sandbox Code Playgroud)

    请注意,我必须更改系统的往返ip路径。我也改成了,因为我没有安装。wpa_supplicant/usr/bin//usr/sbin/dhcpcddhclientdhcpcd

  2. 在以下位置创建符号链接/etc/systemd/system/multi-user.target.wants/

    ln -s /etc/systemd/system/network-wireless@.service \
      /etc/systemd/system/multi-user.target.wants/network-wireless@wlan0.service
    
    Run Code Online (Sandbox Code Playgroud)

    我必须这样做,因为跑步

    systemctl enable network-wireless@wlan0.service
    
    Run Code Online (Sandbox Code Playgroud)

    如 Arch Linux wiki 中所述失败

    Failed to issue method call: No such file or directory
    
    Run Code Online (Sandbox Code Playgroud)
  3. 启动服务:

    systemctl daemon-reload
    systemctl start network-wireless@wlan0.service
    
    Run Code Online (Sandbox Code Playgroud)

现在我可以在启动时连接到我的无线网络。我还没有弄清楚如何正确配置 DHCP(因此该dhclient行在我的 systemd 单元中被注释掉),但这是一个不同的问题。