に私は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
...だから
、NetworkManagerのオブジェクトを取得し、聞きますデバイスリストの変更には、現在のデバイスのPropertiesChanged
に申し込んでください表示されるデバイスと、Carrier
プロパティを監視します。
インターフェイスが起動しているが、IPが割り当てられていない(または他の中間状態になっている)可能性があることを検出する場合は、他のプロパティを調べます。
サーバ版のUbuntuを使用している場合は、NetworkManagerを使用していないと思われます。そのため、D-Busインターフェイスの使用率は若干低くなります(org.freedesktop.network1
)。
DeviceAdded/DeviceRemovedのシェルの例:いくつかの信号が発射される
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"
]
)
]
:
$ dbus-monitor --system "type='signal',interface='org.freedesktop.NetworkManager'"
にのWi-Fi USBキーが差し込まれています。したがって、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}
ありがとうございました。これは大いに役立ちます。 –
私はLinuxの初心者で、このためのコードサンプルを入手するのが難しいと感じています。私は、下のコードから私が共有しているインターフェイスのアップ/ダウンイベントの変更を聞くことができました。しかし、私はあなたが上記で言及したものに興味を持っています(つまり、すべてのデバイスのプロパティが変更されたシグナルを聞きます)。これに利用できるサンプルコードを私に教えてください。 –
あなたが使用しているD-Bus GLibバインディングでは、 'g_dbus_connection_signal_subscribe()'関数が最も確実です。私はすぐにコード例を見ることができません。この関数は関数へのポインタを取るので、かなり普通のCスタイルのコールバックインストーラです。 – Velkan