부팅 시 네트워크 구성을 시작하고 브리지를 여는 패치보드 설정이 있습니다. 이제 외부 장치를 연결할 때만 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/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