github.com/AlpineAIO/wails/v2@v2.0.0-beta.32.0.20240505041856-1047a8fa5fef/internal/system/operatingsystem/os_linux.go (about) 1 //go:build linux 2 // +build linux 3 4 package operatingsystem 5 6 import ( 7 "fmt" 8 "os" 9 "strings" 10 ) 11 12 // platformInfo is the platform specific method to get system information 13 func platformInfo() (*OS, error) { 14 _, err := os.Stat("/etc/os-release") 15 if os.IsNotExist(err) { 16 return nil, fmt.Errorf("unable to read system information") 17 } 18 19 osRelease, _ := os.ReadFile("/etc/os-release") 20 return parseOsRelease(string(osRelease)), nil 21 } 22 23 func parseOsRelease(osRelease string) *OS { 24 25 // Default value 26 var result OS 27 result.ID = "Unknown" 28 result.Name = "Unknown" 29 result.Version = "Unknown" 30 31 // Split into lines 32 lines := strings.Split(osRelease, "\n") 33 // Iterate lines 34 for _, line := range lines { 35 // Split each line by the equals char 36 splitLine := strings.SplitN(line, "=", 2) 37 // Check we have 38 if len(splitLine) != 2 { 39 continue 40 } 41 switch splitLine[0] { 42 case "ID": 43 result.ID = strings.ToLower(strings.Trim(splitLine[1], "\"")) 44 case "NAME": 45 result.Name = strings.Trim(splitLine[1], "\"") 46 case "VERSION_ID": 47 result.Version = strings.Trim(splitLine[1], "\"") 48 } 49 } 50 return &result 51 }