我在用埃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 wlan0
和ifup 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
或者从我自己的笔记中更好......
禁用连接器:
# systemctl disable connman.service
$ 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
创造
resolv.conf
$ cat >/etc/resolv.conf <<EOF search local nameserver 192.168.0.1 EOF
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
创建 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
使能够
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 并远程安装驱动器。