Remote DesktopのSQLiteについて
「Remote Desktop」では、SQLite データベースに収集した情報が保存されます。
データベースについて
「Remote Desktop」では、「systeminformation」というテーブルにシステム情報データが取り込まれます。履歴データは維持されません。データを取り込むときは常に、以前に取り込まれた情報が新しい値で上書きされます。履歴データを保持したい場合は、データを 2 番目のデータベースに取り込むことができます。アプリはデータベース内の値に基づいてコンピュータのレコードにアクセスしたり、コンピュータ固有の設定を同期したりすることができるため、データベース内のデータは macOS の配置にも役立ちます。
実際の用途では、データベースを読み取り専用として扱ってください。データベースの構造は、「Remote Desktop」の新しいバージョンの必要性を満たすために変更されることがあります。状況によっては、「Remote Desktop」により、破損を防ぐためにデータベースが消去されます。
SQLite データベースは「/private/var/db/RemoteManagement/RMDB/rmdb.sqlite3」にあります。RMDB ディレクトリはデーモンユーザに制限されているので、ファイルにアクセスするにはスーパーユーザ(sudo
)アクセスが必要です。sudo
を使用してコマンドを実行するときは、管理者パスワードを求められます。
コマンドラインを使用してデータを取得する
sqlite3 ツールは「/usr/bin/sqlite3」にインストールされます。
sqlite3 ツールでは、Remote Desktop データベースのテーブルとデータにアクセスできます。以下では、「systeminformation」テーブル(レポートデータが保存されているテーブル)の SQL クエリーが送信されます。
sudo sqlite3 /var/db/RemoteManagement/RMDB/rmdb.sqlite3 "select * from systeminformation"
以下は、出力の最初の数行の例です。行は、フォントサイズおよびウインドウサイズに応じて折り返されることがあります。
00:0d:93:9c:0a:e4|Mac_HardDriveElement|DataDate|0|2008-12-11T23:05:58Z|2008-12-11T23:05:58Z
00:0d:93:9c:0a:e4|Mac_HardDriveElement|Model|0|Hitachi HDS722580VLSA80|2008-12-11T23:05:58Z
00:0d:93:9c:0a:e4|Mac_HardDriveElement|VolumeName|0|Server HD|2008-12-11T23:05:58Z
00:0d:93:9c:0a:e4|Mac_HardDriveElement|JournalingIsActive|0|true|2008-12-11T23:05:58Z
00:0d:93:9c:0a:e4|Mac_HardDriveElement|LastBackupDate|0|2008-09-05T18:13:22Z|2008-12-11T23:05:58Z
00:0d:93:9c:0a:e4|Mac_HardDriveElement|LastModificationDate|0|2008-12-11T23:05:57Z|2008-12-11T23:05:58Z
列の間で使用する区切り文字を -separator
スイッチで調整します。このサンプルでは、区切り文字としてカンマが使用されます。
sudo sqlite3 -separator , /var/db/RemoteManagement/RMDB/rmdb.sqlite3 "select * from systeminformation"
その他の便利なスイッチとしては、-html
、-line
、-list
、および -column
があります。詳しくは、sqlite3
のマニュアルページを参照してください。
次のコマンドでは、非常に読みやすい列で出力され、列ヘッダが表示されます。
sudo sqlite3 -header -column /var/db/RemoteManagement/RMDB/rmdb.sqlite3 \
"select * from systeminformation"
ComputerID ObjectName PropertyName ItemSeq Value LastUpdated
----------------- -------------------- ------------ ---------- -------------------- --------------------
00:0d:93:9c:0a:e4 Mac_HardDriveElement DataDate 0 2008-12-11T23:05:58Z 2008-12-11T23:05:58Z
00:0d:93:9c:0a:e4 Mac_HardDriveElement Model 0 Hitachi HDS722580VLS 2008-12-11T23:05:58Z
00:0d:93:9c:0a:e4 Mac_HardDriveElement VolumeName 0 Server HD 2008-12-11T23:05:58Z
00:0d:93:9c:0a:e4 Mac_HardDriveElement JournalingIs 0 true 2008-12-11T23:05:58Z
00:0d:93:9c:0a:e4 Mac_HardDriveElement LastBackupDa 0 2008-09-05T18:13:22Z 2008-12-11T23:05:58Z
00:0d:93:9c:0a:e4 Mac_HardDriveElement LastModifica 0 2008-12-11T23:05:57Z 2008-12-11T23:05:58Z
00:0d:93:9c:0a:e4 Mac_HardDriveElement TotalSize 0 80287128.000000 2008-12-11T23:05:58Z
ComputerID
フィールドは、レポートデータで応答したクライアントの Ethernet MAC アドレスと一致し、SQL クエリーを作成するための一意の値として使用できます。上記の例のSQLを次のように変更すると、すべてのobjectnameタイプを確認できます:
sudo sqlite3 -header -column /var/db/RemoteManagement/RMDB/rmdb.sqlite3 \
"SELECT distinct objectname FROM systeminformation"
出力:
ObjectName
--------------------
Mac_HardDriveElement
Mac_NetworkInterface
Mac_SystemInfoElemen
Mac_RAMSlotElement
Mac_PCIBusElement
Mac_USBDeviceElement
Mac_FireWireDeviceEl
objectnameごとに、多くのpropertyname
の値が対応します。クエリーを次のように変更すると、利用可能なobjectname/propertyname
のペアが表示されます:
sudo sqlite3 -header -column /var/db/RemoteManagement/RMDB/rmdb.sqlite3 \
"SELECT distinct objectname, propertyname FROM systeminformation"
出力:
ObjectName PropertyName
-------------------- ------------
Mac_HardDriveElement DataDate
Mac_HardDriveElement Model
Mac_HardDriveElement VolumeName
Mac_HardDriveElement JournalingIs
Mac_HardDriveElement LastBackupDa
Mac_HardDriveElement LastModifica
これらのプロパティを組み合わせると、特定の値を取得する SQL クエリーを作成できます。たとえば、クライアントのシリアル番号を検索するときは、次のコマンドを使います:
sudo sqlite3 -header -column /var/db/RemoteManagement/RMDB/rmdb.sqlite3 "SELECT distinct computerid, propertyname, value FROM systeminformation WHERE propertyname = 'MachineSerialNumber'"
ComputerID PropertyName Value
----------------- ------------------- -----------
00:0d:93:9c:0a:e4 MachineSerialNumber QP4241FHPMZ
00:16:cb:a2:6d:1b MachineSerialNumber YM6090M9U39
00:16:cb:ca:81:52 MachineSerialNumber W862100NW92
00:17:f2:04:db:24 MachineSerialNumber G86492DVX68
00:14:51:22:28:38 MachineSerialNumber W854503QURC
00:17:f2:2b:b9:59 MachineSerialNumber 4H63861KVMM
Ethernet ID の代わりにコンピュータの名前および値のリストを SQL クエリーで取得します:
sudo sqlite3 -header -column /var/db/RemoteManagement/RMDB/rmdb.sqlite3 "SELECT R1.value, R2.value FROM systeminformation R1, systeminformation R2 WHERE R1.computerid=R2.computerid AND R1.propertyname='ComputerName' AND R2.propertyName='MachineSerialNumber'"
出力:
Value Value
---------- -----------
mini X0XX234XYXYX
mini X01X23X4XXXX
NetBoot001 X01X0101XXX0
Server XX12345XXX6
Server2 PPYWWSSSEEER
Aga O X0XX123XY4XY
sqlite コマンドで「Automator」を使用する
Automatorではシェルコマンドを実行できるので、Automatorを使用してsqlite3
の出力を収集し、それをほかのアプリに送信できます。次の例では、レポートデータを収集して、それを「テキストエディット」に送信しています:
on run {input, parameters}
return do shell script "/usr/bin/sqlite3 -separator " & quote & tab & quote & " /var/db/RemoteManagement/RMDB/rmdb.sqlite3 " & quote & input & quote with administrator privileges
end run
このワークフローでは SQL コマンドが要求されてから、「AppleScript を実行」アクションを使用してシェルコマンドが構築されます。これによって認証ダイアログを表示できます。この例の区切り文字はタブです。
SQLite クエリー項目
SQLiteを使用して以下の項目を照会できます:
Mac_SystemInfoElement
ActiveProcessorCount
AppleTalkIsActive
ATADeviceCount
ARDComputerInfo1
ARDComputerInfo2
ARDComputerInfo3
ARDComputerInfo4
BootROMVersion
BusDataSize
BusSpeed
BusSpeedString
ComputerName
DataDate
En0Address
FileSharingIsEnabled
FireWireDeviceCount
FTPIsEnabled
HasKeyboardConnected
HasLightsOutController
HasMouseConnected
HasVectorProcessingUnit
KernelVersion
Level2CacheSize
MachineClass
MachineModel
MachineSerialNumber
MainMonitorDepth
MainMonitorHeight
MainMonitorType
MainMonitorWidth
ModemCountryInfo
ModemDescription
ModemDriverInfo
ModemInstalled
ModemInterfaceType
OpticalDriveType
PCISlotsUsedCount
PhysicalMemorySize
PrimaryIPAddress
PrimaryNetworkCollisions
PrimaryNetworkFlags
PrimaryNetworkHardwareAddress
PrimaryNetworkInputErrors
PrimaryNetworkInputPackets
PrimaryNetworkOutputErrors
PrimaryNetworkOutputPackets
PrimaryNetworkType
PrinterSharingEnabled
ProcessorCount
ProcessorSpeed
ProcessorSpeedString
ProcessorType
RemoteAppleEventsEnabled
RemoteLoginEnabled
SCSIDeviceCount
SelectedPrinterName
SelectedPrinterPostScriptVersion
SelectedPrinterType
SleepDisplayWhenInactive
SleepWhenInactive
SpinDownHardDrive
SystemVersion
SystemVersionString
TotalFreeHardDriveSpace
TotalHardDriveSpace
TotalRAMSlots
TotalSwapFileSize
TrashSize
UnixHostName
UnusedRAMSlots
USBDeviceCount
UserMemorySize
WakeOnLanEnabled
WebSharingIsEnabled
WindowsFileSharingEnabled
WirelessCardFirmwareVersion
WirelessCardHardwareAddress
WirelessCardIsActive
WirelessCardInstalled
WirelessCardLocale
WirelessCardType
WirelessChannelNumber
WirelessIsComputerToComputer
WirelessNetworkAvailable
WirelessNetworkName
Mac_HardDriveElement
CreationDate
DataDate
FileSystemType
FreeSpace
GroupName
IsBootVolume
IsCasePreserving
IsCaseSensitive
IsDetachable
IsWritable
JournalingIsActive
LastBackupDate
LastConsistencyCheckDate
LastModificationDate
LogicalUnitNumber
製造元
モデル
OwnerName
PermissionModes
PermissionsAreEnabled
プロトコル
RemovableMedia
Revision
SerialNumber
SupportsJournaling
TotalFileCount
TotalFolderCount
TotalSize
UnixMountPoint
VolumeName
Mac_NetworkInterfaceElement
AllDNSServers
AllIPAddresses
ConfigurationName
ConfigurationType
DataDate
DomainName
EthernetAlignmentErrors
EthernetCarrierSenseErrors
EthernetChipSet
EthernetCollisionFrequencies
EthernetDeferredTransmissions
EthernetExcessiveCollisions
EthernetFCSErrors
EthernetFrameTooLongs
EthernetInternalMacRxErrors
EthernetInternalMacTxErrors
EthernetLateCollisions
EthernetMissedFrames
EthernetMultipleCollisionFrames
EthernetRxCollisionErrors
EthernetRxFrameTooShorts
EthernetRxInterrupts
EthernetRxOverruns
EthernetRxPHYTransmissionErrors
EthernetRxResets
EthernetRxResourceErrors
EthernetRxTimeouts
EthernetRxWatchdogTimeouts
EthernetSingleCollisionFrames
EthernetSQETestErrors
EthernetTxInterrupts
EthernetTxJabberEvents
EthernetTxPHYTransmissionErrors
EthernetTxResets
EthernetTxResourceErrors
EthernetTxTimeouts
EthernetTxUnderruns
HardwareAddress
InterfaceFlags
InterfaceName
IsActive
IsPrimary
NetworkCollisions
NetworkInputErrors
NetworkInputPackets
NetworkOutputErrors
NetworkOutputPackets
OutputQueueCapacity
OutputQueueDropCount
OutputQueueOutputCount
OutputQueuePeakSize
OutputQueueRetryCount
OutputQueueSize
OutputQueueStallCount
PrimaryDNSServer
PrimaryIPAddress
RouterAddress
Mac_USBDeviceElement
BusPower
DataDate
DeviceSpeed
ProductID
ProductName
SerialNumber
VendorID
Mac_FireWireDeviceElement
DataDate
DeviceSpeed
製造元
モデル
Mac_RAMSlotElement
DataDate
MemoryModuleSize
MemoryModuleSpeed
MemoryModuleSpeed
MemoryModuleSpeed
Mac_PCIBusElement
CardMemory
CardName
CardRevision
CardType
DataDate
DeviceID
RomRevision
SlotName
VendorID