USBフラッシュドライブが接続されている場合にのみネットワークインターフェイスを有効にするにはどうすればよいですか?

USBフラッシュドライブが接続されている場合にのみネットワークインターフェイスを有効にするにはどうすればよいですか?

起動時にネットワーク設定を開始してブリッジを開くパッチボード設定があります。これで、外部デバイスを接続するときにのみWLANが起動する設定が必要です。好ましくは、USBスティックが接続されている場合は表示し、そうでない場合はWLANを無効にしておく必要があります。 (足もあります)。確認は開始時にのみ実行する必要があり、後で確認する必要はありません。

USBデバイスが接続されている場合は、wlanインターフェイスの辞書ステートメントに行を追加し、そのデバイスが存在する必要があるディレクトリが存在することを確認する方法も検討しました。しかし、これを行うと結果が出ません。以下のコードに示されている行を参照してください。

この問題を解決する方法についてのアイデアはありますか?

よろしくお願いします。

レナルト

➜  ~ 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/fstabUUIDに更新して常に特定の場所にマウントすることです。

# /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

関連情報