에 나는 d-feet
유틸리티를 조금 봤는데.
'시스템 버스'에는 /org/freedesktop/NetworkManager
에 DeviceAdded
신호가 있습니다.
/org/freedesktop/NetworkManager/Devices/1
가지가 있습니다
Interface
문자열 신호 org.freedesktop.NetworkManager.Device.Wired
에서, org.freedesktop.NetworkManager.Device.Bridge
, org.freedesktop.NetworkManager.Device.Adsl
부울
Carrier
org.freedesktop.NetworkManager.Device
과 PropertiesChanged
... 그래서
의 네트워크 매니저 객체를 가져 듣고 장치 목록을 수정하려면 현재 장치의 PropertiesChanged
에 가입하십시오. 장치가 나타나면 Carrier
속성을 살펴보십시오.
인터페이스가 작동 중이지만 IP가 할당되지 않았거나 다른 중간 상태에 있다는 것을 감지하려면 다른 속성을 살펴보십시오.
당신이 우분투의 서버 버전을 사용하고 있다면 (그렇지 않다면) 나는 NetworkManager를 사용하지 않는다고 생각합니다. 따라서 다소 덜 사용 가능한 D-Bus 인터페이스 인 org.freedesktop.network1
을 가지고 있습니다. DeviceAdded/DeviceRemoved의
셸 예 :
$ dbus-monitor --system "type='signal',interface='org.freedesktop.NetworkManager'"
와이파이 USB 키에 연결되어있는 경우 :
signal time=1509615532.227067 sender=:1.8 -> destination=(null destination) serial=2051 path=/org/freedesktop/NetworkManager; interface=org.freedesktop.NetworkManager; member=DeviceAdded
object path "/org/freedesktop/NetworkManager/Devices/10"
signal time=1509615532.228150 sender=:1.8 -> destination=(null destination) serial=2056 path=/org/freedesktop/NetworkManager; interface=org.freedesktop.NetworkManager; member=PropertiesChanged
array [
dict entry(
string "AllDevices"
variant array [
object path "/org/freedesktop/NetworkManager/Devices/0"
object path "/org/freedesktop/NetworkManager/Devices/1"
object path "/org/freedesktop/NetworkManager/Devices/2"
object path "/org/freedesktop/NetworkManager/Devices/3"
object path "/org/freedesktop/NetworkManager/Devices/4"
object path "/org/freedesktop/NetworkManager/Devices/5"
object path "/org/freedesktop/NetworkManager/Devices/6"
object path "/org/freedesktop/NetworkManager/Devices/8"
object path "/org/freedesktop/NetworkManager/Devices/10"
]
)
dict entry(
string "Devices"
variant array [
object path "/org/freedesktop/NetworkManager/Devices/0"
object path "/org/freedesktop/NetworkManager/Devices/1"
object path "/org/freedesktop/NetworkManager/Devices/2"
object path "/org/freedesktop/NetworkManager/Devices/3"
object path "/org/freedesktop/NetworkManager/Devices/4"
object path "/org/freedesktop/NetworkManager/Devices/5"
object path "/org/freedesktop/NetworkManager/Devices/6"
object path "/org/freedesktop/NetworkManager/Devices/8"
object path "/org/freedesktop/NetworkManager/Devices/10"
]
)
]
signal time=1509615533.253596 sender=:1.8 -> destination=(null destination) serial=2072 path=/org/freedesktop/NetworkManager; interface=org.freedesktop.NetworkManager; member=PropertiesChanged
array [
dict entry(
string "WirelessEnabled"
variant boolean false
)
]
signal time=1509615533.287235 sender=:1.8 -> destination=(null destination) serial=2080 path=/org/freedesktop/NetworkManager; interface=org.freedesktop.NetworkManager; member=PropertiesChanged
array [
dict entry(
string "ActiveConnections"
variant array [
object path "/org/freedesktop/NetworkManager/ActiveConnection/3"
object path "/org/freedesktop/NetworkManager/ActiveConnection/2"
object path "/org/freedesktop/NetworkManager/ActiveConnection/1"
object path "/org/freedesktop/NetworkManager/ActiveConnection/0"
]
)
]
여러 신호를 발사한다. 따라서 DeviceAdded
또는 PropertiesChanged
에 가입 한 경우 장치 # 10도 시청해야한다고 추측 할 수 있습니다.이 제거 된
:
signal time=1509615612.892305 sender=:1.8 -> destination=(null destination) serial=2086 path=/org/freedesktop/NetworkManager; interface=org.freedesktop.NetworkManager; member=DeviceRemoved
object path "/org/freedesktop/NetworkManager/Devices/10"
signal time=1509615612.893697 sender=:1.8 -> destination=(null destination) serial=2089 path=/org/freedesktop/NetworkManager; interface=org.freedesktop.NetworkManager; member=PropertiesChanged
array [
dict entry(
string "ActiveConnections"
variant array [
object path "/org/freedesktop/NetworkManager/ActiveConnection/3"
object path "/org/freedesktop/NetworkManager/ActiveConnection/2"
object path "/org/freedesktop/NetworkManager/ActiveConnection/1"
object path "/org/freedesktop/NetworkManager/ActiveConnection/0"
]
)
dict entry(
string "AllDevices"
variant array [
object path "/org/freedesktop/NetworkManager/Devices/0"
object path "/org/freedesktop/NetworkManager/Devices/1"
object path "/org/freedesktop/NetworkManager/Devices/2"
object path "/org/freedesktop/NetworkManager/Devices/3"
object path "/org/freedesktop/NetworkManager/Devices/4"
object path "/org/freedesktop/NetworkManager/Devices/5"
object path "/org/freedesktop/NetworkManager/Devices/6"
object path "/org/freedesktop/NetworkManager/Devices/8"
]
)
dict entry(
string "Devices"
variant array [
object path "/org/freedesktop/NetworkManager/Devices/0"
object path "/org/freedesktop/NetworkManager/Devices/1"
object path "/org/freedesktop/NetworkManager/Devices/2"
object path "/org/freedesktop/NetworkManager/Devices/3"
object path "/org/freedesktop/NetworkManager/Devices/4"
object path "/org/freedesktop/NetworkManager/Devices/5"
object path "/org/freedesktop/NetworkManager/Devices/6"
object path "/org/freedesktop/NetworkManager/Devices/8"
]
)
]
signal time=1509615612.910829 sender=:1.8 -> destination=(null destination) serial=2095 path=/org/freedesktop/NetworkManager; interface=org.freedesktop.NetworkManager; member=PropertiesChanged
array [
dict entry(
string "WirelessEnabled"
variant boolean true
)
]
같은 신호 : # 10은 사라졌다. DeviceAdded
및 DeviceRemoved
에
또는 가입은 그들을 점점 수 : 작업 코드 샘플을 원하는
$ dbus-monitor --system type=signal,interface=org.freedesktop.NetworkManager,member=Device{Added,Removed}
Velkan 고맙습니다. 이것은 많은 도움이됩니다. –
나는 리눅스에서 초보자이며이를위한 코드 샘플을 얻는 데 어려움을 겪고있다. 내가 공유 한 코드 아래에서 인터페이스 위/아래 이벤트 변경 사항 중 하나를들을 수있었습니다. 그러나 위에서 언급 한 내용에 관심이 있습니다 (예 : 모든 기기 속성 변경 신호 수신). 이 샘플 코드를 공유해 주시겠습니까? –
사용중인 D-Bus GLib 바인딩에서'g_dbus_connection_signal_subscribe()'함수가 가장 확실합니다. 나는 어떤 코드 예제도 즉시 볼 수 없다. 이 함수는 함수에 대한 포인터를 사용하므로 꽤 일반적인 C 스타일 콜백 설치 프로그램입니다. – Velkan