我有一个修补板设置,它在启动时开始其网络配置,并打开一个桥。现在我需要一个设置,当我连接外部设备时,WLAN 仅启动。最好,如果连接了 USB 记忆棒,它应该会出现,否则 WLAN 应保持禁用状态。 (还有桥)。检查应该只在启动时进行,我不需要稍后检查。
我考虑过如果连接了 USB 设备,则在 wlan 接口的 pre-up 语句中添加一行,同时检查它应该所在的目录是否存在。但这不会产生任何结果。请参阅下面代码中标记的行。
有什么想法如何解决这个问题吗?
提前致谢。
伦纳特
➜ ~ cat /etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)
# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d
#### FOR Access Point ####
# localhost
auto lo
iface lo inet loopback
# wireless interface
allow-hotplug wlan0
#pre-up [-d "/sys/block/sda"] <-- Here i wanted to check if the usb is connected
iface wlan0 inet manual
iface wlan0 inet6 manual
# ethernet interface
allow-hotplug eth0
iface eth0 inet manual
iface eth0 inet6 manual
# network bridge with static ip adress
auto br0
iface br0 inet static
pre-up ifup wlan0 eth0
bridge_ports eth0 wlan0
bridge_fd 0
bridge_stp off
address 192.168.1.100
broadcast 192.168.1.255
netmask 255.255.255.0
答案1
我现在能想到的最简单的方法是在 USB 上创建一个具有可读文件系统的分区,并/etc/fstab
使用该分区的 UUID 进行更新,以始终将其安装到特定位置:
# /etc/fstab
...
UUID=12345678-1234-5678-1234-123456789012 /mnt/trigger_usb ext4 noatime 0 1
...
然后在该分区上创建一个文件touch /mnt/trigger_usb/trigger
。
现在最困难的部分取决于您是否使用systemd
某种 RC (OpenRC)。
例如,systemd
您必须在下创建一个单元文件(可能取决于系统)/etc/systemd/system/conditional_wifi.service
[Unit]
Description=Wifi Conditional Startup
DefaultDependencies=no
After=systemd-sysctl.service
Before=sysinit.target
[Service]
Type=oneshot
ExecStart=/path/to/your/start/script.sh
ExecReload=/path/to/your/reload/script.sh
ExecStop=/path/to/your/stop/script.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
并启用它systemctl enable conditional_wifi.service
。
创建一个script.sh
将检查文件是否存在的
#!/bin/bash
if [ -e /mnt/trigger_usb/trigger ]; then
# start your wifi here
fi
检查是否存在连接的 USB 设备而不是触发文件的替代解决方案
#!/bin/bash
usb=$(/dev/disk/by-path/*usb* | grep -v "part" | awk '{print $NF}'| awk -F "/" '{print $NF}' | sort)
if [ -n "$usb" ]; then
# start your wifi here
fi