如何仅在连接 U 盘时启动网络接口?

如何仅在连接 U 盘时启动网络接口?

我有一个修补板设置,它在启动时开始其网络配置,并打开一个桥。现在我需要一个设置,当我连接外部设备时,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

相关内容