mirror of
https://github.com/cyberarm/w3d_hub_linux_launcher.git
synced 2026-03-21 19:56:14 +00:00
Update hardware survey to be able to collect the same data as on windows, mostly.
This commit is contained in:
@@ -2,7 +2,7 @@ class W3DHub
|
|||||||
class HardwareSurvey
|
class HardwareSurvey
|
||||||
attr_reader :data
|
attr_reader :data
|
||||||
|
|
||||||
def initialize
|
def initialize(displays_only: false)
|
||||||
@data = {
|
@data = {
|
||||||
displays: [],
|
displays: [],
|
||||||
system: {
|
system: {
|
||||||
@@ -26,8 +26,6 @@ class W3DHub
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Hardware survey only works on Windows atm
|
|
||||||
|
|
||||||
if Gem::win_platform?
|
if Gem::win_platform?
|
||||||
lib_dir = File.dirname($LOADED_FEATURES.find { |file| file.include?("gosu.so") })
|
lib_dir = File.dirname($LOADED_FEATURES.find { |file| file.include?("gosu.so") })
|
||||||
SDL.load_lib("#{lib_dir}64/SDL2.dll")
|
SDL.load_lib("#{lib_dir}64/SDL2.dll")
|
||||||
@@ -36,11 +34,13 @@ class W3DHub
|
|||||||
end
|
end
|
||||||
|
|
||||||
query_displays
|
query_displays
|
||||||
|
unless displays_only
|
||||||
query_motherboard
|
query_motherboard
|
||||||
query_operating_system
|
query_operating_system
|
||||||
query_cpus
|
query_cpus
|
||||||
query_ram
|
query_ram
|
||||||
query_gpus
|
query_gpus
|
||||||
|
end
|
||||||
|
|
||||||
@data.freeze
|
@data.freeze
|
||||||
end
|
end
|
||||||
@@ -68,8 +68,8 @@ class W3DHub
|
|||||||
end
|
end
|
||||||
|
|
||||||
def query_motherboard
|
def query_motherboard
|
||||||
return unless Gem::win_platform?
|
if Gem::win_platform?
|
||||||
|
begin
|
||||||
Win32::Registry::HKEY_LOCAL_MACHINE.open("HARDWARE\\DESCRIPTION\\System\\BIOS", Win32::Registry::KEY_READ) do |reg|
|
Win32::Registry::HKEY_LOCAL_MACHINE.open("HARDWARE\\DESCRIPTION\\System\\BIOS", Win32::Registry::KEY_READ) do |reg|
|
||||||
@data[:system][:motherboard][:manufacturer] = safe_reg(reg, "SystemManufacturer")
|
@data[:system][:motherboard][:manufacturer] = safe_reg(reg, "SystemManufacturer")
|
||||||
@data[:system][:motherboard][:model] = safe_reg(reg, "SystemProductName")
|
@data[:system][:motherboard][:model] = safe_reg(reg, "SystemProductName")
|
||||||
@@ -84,10 +84,16 @@ class W3DHub
|
|||||||
@data[:system][:motherboard][:bios_release_date] = "Unknown"
|
@data[:system][:motherboard][:bios_release_date] = "Unknown"
|
||||||
@data[:system][:motherboard][:bios_version] = "Unknown"
|
@data[:system][:motherboard][:bios_version] = "Unknown"
|
||||||
end
|
end
|
||||||
|
else # unix
|
||||||
|
@data[:system][:motherboard][:manufacturer] = safe_file("/sys/devices/virtual/dmi/id/board_vendor")
|
||||||
|
@data[:system][:motherboard][:model] = safe_file("/sys/devices/virtual/dmi/id/board_name")
|
||||||
|
@data[:system][:motherboard][:bios_version] = safe_file("/sys/devices/virtual/dmi/id/board_version")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def query_operating_system
|
def query_operating_system
|
||||||
return unless Gem::win_platform?
|
if Gem::win_platform?
|
||||||
|
begin
|
||||||
Win32::Registry::HKEY_LOCAL_MACHINE.open("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", Win32::Registry::KEY_READ) do |reg|
|
Win32::Registry::HKEY_LOCAL_MACHINE.open("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", Win32::Registry::KEY_READ) do |reg|
|
||||||
@data[:system][:operating_system][:name] = safe_reg(reg, "ProductName")
|
@data[:system][:operating_system][:name] = safe_reg(reg, "ProductName")
|
||||||
@data[:system][:operating_system][:build] = safe_reg(reg, "CurrentBuild")
|
@data[:system][:operating_system][:build] = safe_reg(reg, "CurrentBuild")
|
||||||
@@ -100,6 +106,14 @@ class W3DHub
|
|||||||
@data[:system][:operating_system][:version] = "Unknown"
|
@data[:system][:operating_system][:version] = "Unknown"
|
||||||
@data[:system][:operating_system][:edition] = "Unknown"
|
@data[:system][:operating_system][:edition] = "Unknown"
|
||||||
end
|
end
|
||||||
|
else # unix
|
||||||
|
release_info = query_release_info
|
||||||
|
@data[:system][:operating_system][:name] = release_info["pretty_name"] || release_info["name"] || "Unknown"
|
||||||
|
@data[:system][:operating_system][:build] = release_info["version_codename"] || release_info["build_id"] || "Unknown"
|
||||||
|
@data[:system][:operating_system][:version] = release_info["version_id"] || release_info["build_id"] || "Unknown"
|
||||||
|
@data[:system][:operating_system][:edition] = release_info["id"] || release_info["id_like"] || "Unknown"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def query_cpus
|
def query_cpus
|
||||||
if Gem::win_platform?
|
if Gem::win_platform?
|
||||||
@@ -122,6 +136,16 @@ class W3DHub
|
|||||||
end
|
end
|
||||||
rescue Win32::Registry::Error
|
rescue Win32::Registry::Error
|
||||||
end
|
end
|
||||||
|
else
|
||||||
|
cpu_info = query_cpu_info
|
||||||
|
cpu_info.each do |cpu|
|
||||||
|
@data[:system][:cpus] << {
|
||||||
|
manufacturer: cpu["manufacturer"] || "Unknown",
|
||||||
|
model: cpu["model"] || "Unknown",
|
||||||
|
mhz: cpu["mhz"] || "Unknown",
|
||||||
|
family: cpu["family"] || "Unknown"
|
||||||
|
}
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
instruction_sets = %w[ HasRDTSC HasAltiVec HasMMX Has3DNow HasSSE HasSSE2 HasSSE3 HasSSE41 HasSSE42 HasAVX HasAVX2 HasAVX512F HasARMSIMD HasNEON ] # HasLSX HasLASX # These cause a crash atm
|
instruction_sets = %w[ HasRDTSC HasAltiVec HasMMX Has3DNow HasSSE HasSSE2 HasSSE3 HasSSE41 HasSSE42 HasAVX HasAVX2 HasAVX512F HasARMSIMD HasNEON ] # HasLSX HasLASX # These cause a crash atm
|
||||||
@@ -140,8 +164,8 @@ class W3DHub
|
|||||||
end
|
end
|
||||||
|
|
||||||
def query_gpus
|
def query_gpus
|
||||||
return unless Gem::win_platform?
|
if Gem::win_platform?
|
||||||
|
begin
|
||||||
Win32::Registry::HKEY_LOCAL_MACHINE.open("SYSTEM\\ControlSet001\\Control\\Class\\{4d36e968-e325-11ce-bfc1-08002be10318}", Win32::Registry::KEY_READ) do |reg|
|
Win32::Registry::HKEY_LOCAL_MACHINE.open("SYSTEM\\ControlSet001\\Control\\Class\\{4d36e968-e325-11ce-bfc1-08002be10318}", Win32::Registry::KEY_READ) do |reg|
|
||||||
i = 0
|
i = 0
|
||||||
|
|
||||||
@@ -179,11 +203,149 @@ class W3DHub
|
|||||||
end
|
end
|
||||||
rescue Win32::Registry::Error
|
rescue Win32::Registry::Error
|
||||||
end
|
end
|
||||||
|
else # unix
|
||||||
|
gpu_info = query_glx_info
|
||||||
|
gpu_info.each do |gpu|
|
||||||
|
@data[:system][:gpus] << {
|
||||||
|
manufacturer: gpu["manufacturer"] || "Unknown",
|
||||||
|
model: gpu["model"] || "Unknown",
|
||||||
|
vram: gpu["vram"].to_i,
|
||||||
|
driver_date: gpu["driver_date"] || "Unknown",
|
||||||
|
driver_version: gpu["driver_version"] || "Unknown"
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def safe_reg(reg, key, default_value = "Unknown")
|
def safe_reg(reg, key, default_value = "Unknown")
|
||||||
reg[key]
|
reg[key]
|
||||||
rescue Win32::Registry::Error
|
rescue Win32::Registry::Error
|
||||||
default_value
|
default_value
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def safe_file(path, default_value = "Unknown")
|
||||||
|
value = File.read(path).to_s.strip
|
||||||
|
return default_value if value.downcase == "default string"
|
||||||
|
|
||||||
|
value
|
||||||
|
rescue
|
||||||
|
default_value
|
||||||
|
end
|
||||||
|
|
||||||
|
def query_release_info
|
||||||
|
hash = {}
|
||||||
|
|
||||||
|
File.open("/etc/os-release") do |f|
|
||||||
|
f.each_line do |line|
|
||||||
|
line = line.strip
|
||||||
|
|
||||||
|
key, value = line.split("=", 2)
|
||||||
|
value.gsub!('"', "")
|
||||||
|
|
||||||
|
hash[key.downcase] = value
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
hash
|
||||||
|
rescue
|
||||||
|
hash
|
||||||
|
end
|
||||||
|
|
||||||
|
def query_cpu_info
|
||||||
|
cpus = []
|
||||||
|
|
||||||
|
cpu = {}
|
||||||
|
File.open("/proc/cpuinfo") do |f|
|
||||||
|
f.each_line do |line|
|
||||||
|
line = line.strip
|
||||||
|
|
||||||
|
if line.empty?
|
||||||
|
cpu["family"] = format(
|
||||||
|
"%s Family %s Model %s Stepping %s",
|
||||||
|
cpu["manufacturer"] || "Unknown",
|
||||||
|
cpu["_family"] || "Unknown",
|
||||||
|
cpu["_model"] || "Unknown",
|
||||||
|
cpu["_stepping"] || "Unknown",
|
||||||
|
)
|
||||||
|
|
||||||
|
cpus << cpu
|
||||||
|
cpu = {}
|
||||||
|
|
||||||
|
next
|
||||||
|
end
|
||||||
|
|
||||||
|
key, value = line.split(":", 2).map(&:strip)
|
||||||
|
|
||||||
|
case key.downcase
|
||||||
|
when "vendor_id"
|
||||||
|
cpu["manufacturer"] = value
|
||||||
|
when "model name"
|
||||||
|
cpu["model"] = value
|
||||||
|
when "cpu mhz"
|
||||||
|
cpu["mhz"] = value
|
||||||
|
|
||||||
|
when "cpu family"
|
||||||
|
cpu["_family"] = value
|
||||||
|
when "model"
|
||||||
|
cpu["_model"] = value
|
||||||
|
when "stepping"
|
||||||
|
cpu["_stepping"] = value
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
cpus
|
||||||
|
rescue
|
||||||
|
cpus
|
||||||
|
end
|
||||||
|
|
||||||
|
def query_glx_info
|
||||||
|
gpus = []
|
||||||
|
glxinfo = `glxinfo`
|
||||||
|
|
||||||
|
return gpus if glxinfo.empty?
|
||||||
|
|
||||||
|
gpu = {}
|
||||||
|
glxinfo.lines do |line|
|
||||||
|
line = line.strip
|
||||||
|
|
||||||
|
next if line.empty?
|
||||||
|
|
||||||
|
key, value = line.split(":", 2).map(&:strip)
|
||||||
|
|
||||||
|
mesa_info = false
|
||||||
|
gpu_memory_info = false
|
||||||
|
case key.downcase
|
||||||
|
when "opengl vendor string"
|
||||||
|
if mesa_info
|
||||||
|
gpus << gpu
|
||||||
|
gpu = {}
|
||||||
|
|
||||||
|
break
|
||||||
|
end
|
||||||
|
when /extended renderer info \(GLX_MESA_query_renderer\)/i
|
||||||
|
# Joy and happiness
|
||||||
|
mesa_info = true
|
||||||
|
when /Memory info \(GL_NVX_gpu_memory_info\)/i
|
||||||
|
# Happiness and joy
|
||||||
|
gpu_memory_info = true
|
||||||
|
when "vendor", "opengl vendor string"
|
||||||
|
gpu["manufacturer"] = value
|
||||||
|
when "device", "opengl renderer string"
|
||||||
|
gpu["model"] = value
|
||||||
|
when "version"
|
||||||
|
gpu["driver_version"] = value
|
||||||
|
when "video memory", "dedicated video memory"
|
||||||
|
gpu["vram"] = value.gsub(/[\D]+/, "")
|
||||||
|
when "opengl version string"
|
||||||
|
gpus << gpu
|
||||||
|
gpu = {}
|
||||||
|
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
gpus
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user