GUdevライブラリでGNU/Linuxシステム上のデバイス情報を取得する(ページ3/3)
「GUdevライブラリでGNU/Linuxシステム上のデバイス情報を取得する(ページ2/3)」の続き。
例2
1つ目の例ではデバイスファイルを指定してその情報を表示したが、今回の例ではコマンド行引数に指定した名前のサブシステム(例:block,net,soundなど)に属する全てのデバイスの情報を取得し、表示する。引数を付けないで実行すると全てのサブシステムの全てのデバイスの情報を取得・表示する。
前回と同様、コードのコンパイルにはGUdevライブラリの開発パッケージも必要。
[任意]ファイル名: gudevtest2.vala
/* * GUdevのテスト2 * システム上の全てのデバイスの情報を表示する * コマンド行引数でサブシステム名による絞り込みが可能 * * valac --pkg posix --pkg gudev-1.0 gudevtest2.vala -o gudevtest2 */ using Posix; using GUdev; namespace GUdevTest2 { int main (string[] args) { // デバイス情報を問い合わせるクライアント(GUdev.Clientクラス) var c = new GUdev.Client (null); // 全ての情報(GUdev.Deviceクラスのリスト)を得る GLib.List<GUdev.Device> devs; if (args.length < 2) devs = c.query_by_subsystem (null); else devs = c.query_by_subsystem (args[1]); // 特定のサブシステムの項目のみを得る if (devs.length () == 0) { printerr ("No devices found in subsystem \"%s\"\n", args[1]); return EXIT_FAILURE; } foreach (GUdev.Device d in devs) { // 種類や名前はメンバ関数で取り出すことができる if (d.get_devtype () == null) print ("----- %s : %s -----\n", d.get_name (), d.get_subsystem ()); else print ("----- %s (%s) : %s -----\n", d.get_name (), d.get_devtype (), d.get_subsystem ()); // 全ての項目名(キー)を得て各項目ごとに処理する foreach (string? key in d.get_property_keys ()) { // それぞれの情報(値)を取り出す // 種類や名前の情報もこの中に含まれる if (key != null) print ("%s: %s\n", key, d.get_property (key)); } } return EXIT_SUCCESS; } }
下は実行結果例。今回もVirtualBox上のGNU/Linuxの中で実行した結果から貼り付ける。例1と同様、環境によって出力内容は変わる。コマンド行引数を付けない場合の出力は非常に長くなるため、一部のみを貼り付ける。
(「net」を指定した例) $ ./gudevtest2 net ----- eth0 : net ----- UDEV_LOG: 3 DEVPATH: /devices/pci0000:00/0000:00:03.0/net/eth0 INTERFACE: eth0 IFINDEX: 2 SUBSYSTEM: net ID_VENDOR_FROM_DATABASE: Intel Corporation ID_MODEL_FROM_DATABASE: 82540EM Gigabit Ethernet Controller ID_BUS: pci ID_VENDOR_ID: 0x8086 ID_MODEL_ID: 0x100e ----- lo : net ----- UDEV_LOG: 3 DEVPATH: /devices/virtual/net/lo INTERFACE: lo IFINDEX: 1 SUBSYSTEM: net (無指定の例) $ ./gudevtest2 ----- LNXSYSTM:00 : acpi ----- UDEV_LOG: 3 DEVPATH: /devices/LNXSYSTM:00 MODALIAS: acpi:LNXSYSTM: SUBSYSTEM: acpi ----- LNXPWRBN:00 : acpi ----- UDEV_LOG: 3 DEVPATH: /devices/LNXSYSTM:00/LNXPWRBN:00 DRIVER: button MODALIAS: acpi:LNXPWRBN: SUBSYSTEM: acpi ----- input0 : input ----- UDEV_LOG: 3 DEVPATH: /devices/LNXSYSTM:00/LNXPWRBN:00/input/input0 PRODUCT: 19/0/1/0 NAME: "Power Button" PHYS: "LNXPWRBN/button/input0" EV: =3 KEY: =100000 0 0 0 MODALIAS: input:b0019v0000p0001e0000-e0,1,k74,ramlsfw SUBSYSTEM: input ----- event0 : input ----- UDEV_LOG: 3 DEVPATH: /devices/LNXSYSTM:00/LNXPWRBN:00/input/input0/event0 MAJOR: 13 MINOR: 64 DEVNAME: /dev/input/event0 SUBSYSTEM: input ID_INPUT: 1 ID_INPUT_KEY: 1 XKBMODEL: pc105 XKBLAYOUT: jp DEVLINKS: /dev/char/13:64 DMI_VENDOR: innotek GmbH ----- LNXSLPBN:00 : acpi ----- UDEV_LOG: 3 DEVPATH: /devices/LNXSYSTM:00/LNXSLPBN:00 DRIVER: button MODALIAS: acpi:LNXSLPBN: SUBSYSTEM: acpi ----- input1 : input ----- UDEV_LOG: 3 DEVPATH: /devices/LNXSYSTM:00/LNXSLPBN:00/input/input1 PRODUCT: 19/0/3/0 NAME: "Sleep Button" PHYS: "LNXSLPBN/button/input0" EV: =3 KEY: =4000 0 0 0 0 MODALIAS: input:b0019v0000p0003e0000-e0,1,k8E,ramlsfw SUBSYSTEM: input ----- event1 : input ----- UDEV_LOG: 3 DEVPATH: /devices/LNXSYSTM:00/LNXSLPBN:00/input/input1/event1 MAJOR: 13 MINOR: 65 DEVNAME: /dev/input/event1 SUBSYSTEM: input ID_INPUT: 1 ID_INPUT_KEY: 1 XKBMODEL: pc105 XKBLAYOUT: jp DEVLINKS: /dev/char/13:65 DMI_VENDOR: innotek GmbH (中略) ----- sda (disk) : block ----- (中略) ----- sda1 (partition) : block ----- UDEV_LOG: 3 DEVPATH: /devices/pci0000:00/0000:00:01.1/host0/target0:0:0/0:0:0:0/block/sda/sda1 MAJOR: 8 MINOR: 1 DEVNAME: /dev/sda1 DEVTYPE: partition SUBSYSTEM: block ID_ATA: 1 ID_TYPE: disk ID_BUS: ata ID_MODEL: VBOX_HARDDISK ID_MODEL_ENC: VBOX\x20HARDDISK\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20 ID_REVISION: 1.0 ID_SERIAL: VBOX_HARDDISK_VBa43f2b61-9e54e516 ID_SERIAL_SHORT: VBa43f2b61-9e54e516 ID_ATA_WRITE_CACHE: 1 ID_ATA_WRITE_CACHE_ENABLED: 1 ID_ATA_FEATURE_SET_PM: 1 ID_ATA_FEATURE_SET_PM_ENABLED: 1 ID_SCSI_COMPAT: SATA_VBOX_HARDDISK_VBa43f2b61-9e54e516 ID_PATH: pci-0000:00:01.1-scsi-0:0:0:0 ID_PART_TABLE_TYPE: dos UDISKS_PRESENTATION_NOPOLICY: 0 UDISKS_PARTITION: 1 UDISKS_PARTITION_SCHEME: mbr UDISKS_PARTITION_NUMBER: 1 UDISKS_PARTITION_TYPE: 0x05 UDISKS_PARTITION_SIZE: 3647932416 UDISKS_PARTITION_FLAGS: boot UDISKS_PARTITION_SLAVE: /sys/devices/pci0000:00/0000:00:01.1/host0/target0:0:0/0:0:0:0/block/sda UDISKS_PARTITION_OFFSET: 63488 UDISKS_PARTITION_ALIGNMENT_OFFSET: 0 DEVLINKS: /dev/block/8:1 /dev/disk/by-id/ata-VBOX_HARDDISK_VBa43f2b61-9e54e516-part1 /dev/disk/by-id/scsi-SATA_VBOX_HARDDISK_VBa43f2b61-9e54e516-part1 /dev/disk/by-path/pci-0000:00:01.1-scsi-0:0:0:0-part1 ----- sda2 (partition) : block ----- UDEV_LOG: 3 DEVPATH: /devices/pci0000:00/0000:00:01.1/host0/target0:0:0/0:0:0:0/block/sda/sda2 MAJOR: 8 MINOR: 2 DEVNAME: /dev/sda2 DEVTYPE: partition SUBSYSTEM: block ID_ATA: 1 ID_TYPE: disk ID_BUS: ata ID_MODEL: VBOX_HARDDISK ID_MODEL_ENC: VBOX\x20HARDDISK\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20 ID_REVISION: 1.0 ID_SERIAL: VBOX_HARDDISK_VBa43f2b61-9e54e516 ID_SERIAL_SHORT: VBa43f2b61-9e54e516 ID_ATA_WRITE_CACHE: 1 ID_ATA_WRITE_CACHE_ENABLED: 1 ID_ATA_FEATURE_SET_PM: 1 ID_ATA_FEATURE_SET_PM_ENABLED: 1 ID_SCSI_COMPAT: SATA_VBOX_HARDDISK_VBa43f2b61-9e54e516 ID_PATH: pci-0000:00:01.1-scsi-0:0:0:0 ID_PART_TABLE_TYPE: dos ID_FS_UUID: 1130b63a-5297-4913-b8f8-d5e8b2c7e73e ID_FS_UUID_ENC: 1130b63a-5297-4913-b8f8-d5e8b2c7e73e ID_FS_VERSION: 1.0 ID_FS_TYPE: ext4 ID_FS_USAGE: filesystem UDISKS_PRESENTATION_NOPOLICY: 0 UDISKS_PARTITION: 1 UDISKS_PARTITION_SCHEME: mbr UDISKS_PARTITION_NUMBER: 2 UDISKS_PARTITION_TYPE: 0x83 UDISKS_PARTITION_SIZE: 645922816 UDISKS_PARTITION_SLAVE: /sys/devices/pci0000:00/0000:00:01.1/host0/target0:0:0/0:0:0:0/block/sda UDISKS_PARTITION_OFFSET: 3647995904 UDISKS_PARTITION_ALIGNMENT_OFFSET: 0 DEVLINKS: /dev/block/8:2 /dev/disk/by-id/ata-VBOX_HARDDISK_VBa43f2b61-9e54e516-part2 /dev/disk/by-id/scsi-SATA_VBOX_HARDDISK_VBa43f2b61-9e54e516-part2 /dev/disk/by-path/pci-0000:00:01.1-scsi-0:0:0:0-part2 /dev/disk/by-uuid/1130b63a-5297-4913-b8f8-d5e8b2c7e73e ----- sda5 (partition) : block ----- UDEV_LOG: 3 DEVPATH: /devices/pci0000:00/0000:00:01.1/host0/target0:0:0/0:0:0:0/block/sda/sda5 MAJOR: 8 MINOR: 5 DEVNAME: /dev/sda5 DEVTYPE: partition SUBSYSTEM: block ID_ATA: 1 ID_TYPE: disk ID_BUS: ata ID_MODEL: VBOX_HARDDISK ID_MODEL_ENC: VBOX\x20HARDDISK\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20 ID_REVISION: 1.0 ID_SERIAL: VBOX_HARDDISK_VBa43f2b61-9e54e516 ID_SERIAL_SHORT: VBa43f2b61-9e54e516 ID_ATA_WRITE_CACHE: 1 ID_ATA_WRITE_CACHE_ENABLED: 1 ID_ATA_FEATURE_SET_PM: 1 ID_ATA_FEATURE_SET_PM_ENABLED: 1 ID_SCSI_COMPAT: SATA_VBOX_HARDDISK_VBa43f2b61-9e54e516 ID_PATH: pci-0000:00:01.1-scsi-0:0:0:0 ID_PART_TABLE_TYPE: dos ID_FS_UUID: 8d43ae5f-6d02-4836-a1ce-e5564430f126 ID_FS_UUID_ENC: 8d43ae5f-6d02-4836-a1ce-e5564430f126 ID_FS_VERSION: 1.0 ID_FS_TYPE: ext2 ID_FS_USAGE: filesystem UDISKS_PRESENTATION_NOPOLICY: 0 UDISKS_PARTITION: 1 UDISKS_PARTITION_SCHEME: mbr UDISKS_PARTITION_NUMBER: 5 UDISKS_PARTITION_TYPE: 0x83 UDISKS_PARTITION_SIZE: 65737728 UDISKS_PARTITION_SLAVE: /sys/devices/pci0000:00/0000:00:01.1/host0/target0:0:0/0:0:0:0/block/sda UDISKS_PARTITION_OFFSET: 64512 UDISKS_PARTITION_ALIGNMENT_OFFSET: 0 DEVLINKS: /dev/block/8:5 /dev/disk/by-id/ata-VBOX_HARDDISK_VBa43f2b61-9e54e516-part5 /dev/disk/by-id/scsi-SATA_VBOX_HARDDISK_VBa43f2b61-9e54e516-part5 /dev/disk/by-path/pci-0000:00:01.1-scsi-0:0:0:0-part5 /dev/disk/by-uuid/8d43ae5f-6d02-4836-a1ce-e5564430f126 (中略) ----- card0 : sound ----- UDEV_LOG: 3 DEVPATH: /devices/pci0000:00/0000:00:05.0/sound/card0 SUBSYSTEM: sound SOUND_INITIALIZED: 1 ID_VENDOR_FROM_DATABASE: Intel Corporation ID_MODEL_FROM_DATABASE: 82801AA AC'97 Audio Controller ID_BUS: pci ID_VENDOR_ID: 0x8086 ID_MODEL_ID: 0x2415 ID_PATH: pci-0000:00:05.0 SOUND_FORM_FACTOR: internal (中略) ----- vcsa7 : vc ----- UDEV_LOG: 3 DEVPATH: /devices/virtual/vc/vcsa7 MAJOR: 7 MINOR: 135 DEVNAME: /dev/vcsa7 SUBSYSTEM: vc DEVLINKS: /dev/char/7:135 ----- vtcon0 : vtconsole ----- UDEV_LOG: 3 DEVPATH: /devices/virtual/vtconsole/vtcon0 SUBSYSTEM: vtconsole ----- vtcon1 : vtconsole ----- UDEV_LOG: 3 DEVPATH: /devices/virtual/vtconsole/vtcon1 SUBSYSTEM: vtconsole
sda1に関する情報にID_FS_TYPE(ファイルシステム名)やID_FS_UUID(ファイルシステムのUUID)などの項目がないが、これは実行した環境においてsda1のパーティションが拡張領域の全体を構成するパーティションであるためで、この中の個別のsda5やsda6などのパーティションには存在する。
ネットワークカードの情報については、virtio-netを用いていると
----- eth0 : net ----- UDEV_LOG: 3 DEVPATH: /devices/virtio-pci/virtio0/net/eth0 INTERFACE: eth0 IFINDEX: 2 SUBSYSTEM: net
のようになり、ベンダやモデルの情報はない。
なお、無効なサブシステム名を指定すると
$ ./gudevtest2 foo No devices found in subsystem "foo"
エラーメッセージを出力してプロセスの戻り値がEXIT_FAILUREとなる。
関連記事:
- GUdevライブラリでGNU/Linuxシステム上のデバイス情報を取得する(ページ1/3)
- GUdevライブラリでGNU/Linuxシステム上のデバイス情報を取得する(ページ2/3)
- システム上の全ディスク(disk)の各パーティションにあるファイルシステムのUUIDをGUI上で確認・クリップボードにコピーできるツールを作成
使用したバージョン:
- Vala 0.9.8
- GUdev 151