package com.sessonad.oscommands.detector;
/**
*
* @author SessonaD
*/
public class OSDetector {
public static OperatingSystem detectOS(){
String osName = System.getProperty("os.name").toLowerCase();
if(osName.contains("windows")){
return OperatingSystem.WINDOWS;
}else if(osName.contains("mac os")){
return OperatingSystem.MAC_OS;
}else if (osName.contains("linux")){
return detectLinuxGUI();
}else{
return OperatingSystem.UNKNOWN;
}
}
private static OperatingSystem detectLinuxGUI() {
try {
if (checkProcessNames("gnome-session", "gnome-session-binary")) {
return OperatingSystem.LINUX_GNOME;
}else if (checkProcessNames("ksmserver", "kdeinit4")) {
return OperatingSystem.LINUX_KDE;
}else if (checkProcessNames("xfce4-session", "xfce-mcs-manage")) {
return OperatingSystem.LINUX_XFCE;
}else if (checkProcessNames("lxsession")) {
return OperatingSystem.LINUX_LXDE;
}else{
return OperatingSystem.LINUX_UNKNOWN;
}
} catch (Exception e) {
return OperatingSystem.LINUX_UNKNOWN;
}
}
private static boolean checkProcessNames(String... processNames) throws Exception {
for (String processName : processNames) {
if (executePidOfCommand(processName)) return true;
}
return false;
}
private static boolean executePidOfCommand(String processName) throws Exception {
Process process = Runtime.getRuntime().exec(new String[]{"pidof", processName});
return process.waitFor() == 0;
}
}