diff --git a/src/com/sheepit/client/os/Linux.java b/src/com/sheepit/client/os/Linux.java index c19c0cb..e07baae 100644 --- a/src/com/sheepit/client/os/Linux.java +++ b/src/com/sheepit/client/os/Linux.java @@ -167,6 +167,19 @@ public class Linux extends OS { return builder.start(); } + @Override + public boolean getSupportHighPriority() { + // only the root user can create process with high (negative nice) value + String logname = System.getenv("LOGNAME"); + String user = System.getenv("USER"); + + if ((logname != null && logname.equals("root")) || (user != null && user.equals("root"))) { + return true; + } + + return false; + } + protected void checkNiceAvailability() { ProcessBuilder builder = new ProcessBuilder(); builder.command(NICE_BINARY_PATH); diff --git a/src/com/sheepit/client/os/OS.java b/src/com/sheepit/client/os/OS.java index d1dfe04..7041458 100644 --- a/src/com/sheepit/client/os/OS.java +++ b/src/com/sheepit/client/os/OS.java @@ -37,6 +37,10 @@ public abstract class OS { return null; } + public boolean getSupportHighPriority() { + return true; + } + public Process exec(List command, Map env) throws IOException { ProcessBuilder builder = new ProcessBuilder(command); builder.redirectErrorStream(true); diff --git a/src/com/sheepit/client/standalone/swing/activity/Settings.java b/src/com/sheepit/client/standalone/swing/activity/Settings.java index 4afab30..684ff32 100644 --- a/src/com/sheepit/client/standalone/swing/activity/Settings.java +++ b/src/com/sheepit/client/standalone/swing/activity/Settings.java @@ -51,6 +51,7 @@ import com.sheepit.client.hardware.cpu.CPU; import com.sheepit.client.hardware.gpu.GPU; import com.sheepit.client.hardware.gpu.GPUDevice; import com.sheepit.client.network.Proxy; +import com.sheepit.client.os.OS; import com.sheepit.client.standalone.GuiSwing; public class Settings implements Activity { @@ -240,13 +241,15 @@ public class Settings implements Activity { } // priority - priority = new JSlider(-19, 19); - priority.setMajorTickSpacing(5); + OS os = OS.getOS(); + boolean high_priority_support = os.getSupportHighPriority(); + priority = new JSlider(high_priority_support ? -19 : 0, 19); + priority.setMajorTickSpacing(19); priority.setMinorTickSpacing(1); priority.setPaintTicks(true); priority.setPaintLabels(true); priority.setValue(config.getPriority()); - JLabel priorityLabel = new JLabel("Priority (High <-> Low):"); + JLabel priorityLabel = new JLabel(high_priority_support ? "Priority (High <-> Low):" : "Priority (Normal <-> Low):" ); compute_devices_constraints.weightx = 1.0 / gpus.size(); compute_devices_constraints.gridx = 0;