自动连接到无线网络 (Ångström Linux)

自动连接到无线网络 (Ångström Linux)

我在用Linux 上BeagleBoard-xM。我已经安装了一个RTL8188SU USB Wi-Fi 适配器并正确配置它。但即使我已将接口标记为文件auto中的接口,它也不会自动连接。/etc/network/interfaces我的/etc/network/interfaces文件如下所示(仅wlan0粘贴设置):

auto wlan0
iface wlan0 inet static
    address 192.168.2.50
    netmask 255.255.255.0
    gateway 192.168.2.1
    wireless_mode managed
    wireless_essid MY NETWORK ESSID
    wireless_key   MY_PASS

ifconfig这是系统启动后命令的输出:

root@beagleboard:~# ifconfig
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:24 errors:0 dropped:0 overruns:0 frame:0
          TX packets:24 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1632 (1.5 KiB)  TX bytes:1632 (1.5 KiB)

wlan0     Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX
          inet6 addr: fe80::2e0:4cff:fe03:cbb1/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:241 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

可以看到,inet接口上没有连接wlan0。当我连续键入ifdown wlan0ifup wlan0时,根据界面设置可以成功建立无线连接。ifconfig重启后的输出wlan0如下所示:

wlan0     Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX
          inet addr:192.168.2.50  Bcast:192.168.2.255  Mask:255.255.255.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:974 errors:0 dropped:0 overruns:0 frame:0
          TX packets:22 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

我希望在系统启动时自动建立无线连接(最好是在重新插入 Wi-Fi 适配器后)。我有什么想念的吗?

编辑:

我跟踪启动日志并看到一条抱怨设置 ESSID 的消息:

Error for wireless request "Set ESSID" (8B1A) :
    SET failed on device wlan0 ; Operation not permitted.

然而,我还没有意识到问题的根源。系统启动后,我可以通过重新启动网络来建立连接。

答案1

或者从我自己的笔记中更好......

  1. 禁用连接器:

    # systemctl disable connman.service
    
  2. $ cat > /etc/network/interfaces <<EOF
    auto lo
    iface lo inet loopback
    
    auto eth0
    iface eth0 inet static
    address 192.168.0.99
    netmask 255.255.255.0
    gateway 192.168.0.1
    dns-nameservers 192.168.0.1
    
    iface usb0 inet static
    address 192.168.7.2
    netmask 255.255.255.0
    gateway 192.168.7.1
    dns-nameservers 192.168.7.1
    
    iface wlan0 inet static
    address 192.168.0.98
    netmask 255.255.255.0
    gateway 192.168.0.1
    dns-nameservers 192.168.0.1
    wireless_mode managed
    wireless_essid “VM275247-2G”
    wpa-driver wext
    wpa-conf /etc/wpa_supplicant.conf
    pre-up wpa_supplicant -B -Dwext -iwlan0 -c/etc/wpa_supplicant.conf
    post-down killall -q wpa_supplicant
    EOF
    
  3. 创造resolv.conf

    $ cat >/etc/resolv.conf <<EOF
    search local
    nameserver 192.168.0.1
    EOF
    
  4. wpa_supplicant.conf使用密码创建

    $ cat >/etc/wpa_supplicant.conf <<EOF
    ap_scan=2
    
    network={
    ssid="VM275247-2G"
    proto=WPA RSN
    key_mgmt=WPA-PSK
    pairwise=CCMP TKIP
    group=CCMP TKIP
    psk=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx1
    }
    EOF
    
  5. 创建 Wi-Fi 服务

    $ cat >/etc/systemd/system/net.service <<EOF
    [Unit]
    Description=Network interfaces
    Wants=network.target
    Before=network.target
    BindsTo=sys-subsystem-net-devices-wlan0.device
    After=sys-subsystem-net-devices-wlan0.device
    
    [Service]
    Type=oneshot
    RemainAfterExit=yes
    ExecStart=/bin/sh -c "sleep 5;ifup wlan0"
    ExecStop=/bin/sh -c "ifdown wlan0"
    
    [Install]
    WantedBy=multi-user.target
    EOF
    
  6. 使能够systemctl

    # systemctl enable net.service
    

答案2

像这样?感觉像是在开玩笑,但是嘿嘿

我喜欢使用以太网静态 IP 设置任何嵌入式项目,这样我就可以轻松地通过 ssh 进入它。 WiFI 优于有线,因此我可以使我的项目移动。这样做的最大好处是 BBB 不需要驱动程序即可与我拥有的 Edimax USB WiFi 模块配合使用。这与 Raspberry Pi 经常使用的相同。 Angstrom 值得称赞的是(有时是不利的),他们非常善于跟上软件包和驱动程序的最新修订。

我首先尝试通过 Angstrom 附带的网络管理器 Connman。 Connman 能够为 DHCP 设置 WiFi,没有问题。它的缺点是它似乎无法在启动时启动接口,也无法使用静态 IP 配置它。我尝试通过 GUI 以及为无线接口编写 Connman 配置文件来实现此目的。所以我放弃了康曼。黄金时段还没有准备好。有些人会认为 Ubuntu 采用它证明了它的准备就绪。但我们这些多年来在 Ubuntu 上经历过糟糕网络管理的人知道最好不要接受这一点。但更重要的是,BBB 是一个嵌入式系统,而不是笔记本电脑。它不应该关心 GUI 界面,让用户在旅途中经常重新配置无线接口。我计划将其构建成某种东西,并且我希望界面每次都能以相同的方式可靠地出现。

所以我决定回到基础。首先,我需要康曼让开。您可以像这样禁用它:

$ systemctl disable connman.service

接下来,我需要编写一个接口文件来配置有线和无线接口。

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.0.xxx
netmask 255.255.255.0
gateway 192.168.0.1
dns-nameservers 192.168.0.xxx,8.8.8.8

iface usb0 inet static
address 192.168.10.xxx
netmask 255.255.255.0
gateway 192.168.10.1
dns-nameservers 192.168.10.1,8.8.8.8

auto wlan0
iface wlan0 inet static
address 192.168.0.xx
netmask 255.255.255.0
gateway 192.168.0.xxx
dns-nameservers 192.168.0.1,8.8.8.8
wireless_mode managed
wireless_essid NAME_OF_AP
wpa-driver wext
wpa-conf /etc/wpa_supplicant.conf
pre-up wpa_supplicant -B -Dwext -iwlan0 -c/etc/wpa_supplicant.conf
post-down killall -q wpa_supplicant

如果您在无线网络上使用加密(并且应该),那么您将需要一个 wpa_supplicant 文件来帮助您连接。您需要该文件的密钥。您可以像这样为您的网络获取该信息:

$ wpa_passphrase

只需将输出复制并粘贴到您的 wpa_supplicant 文件 ( /etc/wpa_supplicant.conf) 中。它应该看起来像这样:

ap_scan=2

network={
ssid=
proto=WPA RSN
key_mgmt=WPA-PSK
pairwise=CCMP TKIP
group=CCMP TKIP
psk=Big long string of hex number
}

最后,Angstrom 不使用 init.d,因此我们需要的不仅仅是接口文件中的 auto wlan0 来在启动时启动接口。 Angstrom 在 init 上使用 systemd。我读到为了向后兼容,systemd 将在 init.d 文件夹中运行脚本,但情况似乎并非如此。无论如何,采用新的 systemd 方式似乎是有意义的。因此,我编写了一个快速服务配置来在启动时调出接口。它住在/etc/systemd/system/net.service

这是服务文件的内容:

[Unit]
Description=Network interfaces
Wants=network.target
Before=network.target
BindsTo=sys-subsystem-net-devices-wlan0.device
After=sys-subsystem-net-devices-wlan0.device

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/sh -c "sleep 5;ifup wlan0"
ExecStop=/bin/sh -c "ifdown wlan0"

[Install]
WantedBy=multi-user.target

这会在驱动程序加载之后但在网络目标(大多数会使用网络的任何东西)之前启动 WiFi。

要使其在启动时运行,只需执行以下操作:

$ systemctl enable net.service

就可以了。 WiFi 在启动时会提供静态 IP。我可以通过 ssh 登录 BBB 并远程安装驱动器。

相关内容