diff --git a/src/java/org/lwjgl/opengl/XRandR.java b/src/java/org/lwjgl/opengl/XRandR.java
index d9876b9a..825b99ed 100644
--- a/src/java/org/lwjgl/opengl/XRandR.java
+++ b/src/java/org/lwjgl/opengl/XRandR.java
@@ -119,11 +119,20 @@ public class XRandR {
* @param screens
* The desired screen set, may not be null
*/
- public static void setConfiguration(Screen[]/* ... */screens) {
+ public static void setConfiguration(final Screen[]/* ... */screens) {
if (screens.length == 0) {
throw new IllegalArgumentException("Must specify at least one screen");
}
-
+
+ AccessController.doPrivileged(new PrivilegedAction() {
+ public Object run() {
+ setScreen(screens);
+ return null;
+ }
+ });
+ }
+
+ private static void setScreen(Screen[] screens) {
List/* */cmd = new ArrayList/* */();
cmd.add("xrandr");
@@ -164,7 +173,6 @@ public class XRandR {
} catch (IOException e) {
e.printStackTrace();
}
-
}
/**
@@ -172,7 +180,13 @@ public class XRandR {
* xrandr is not supported
*/
public static String[] getScreenNames() {
- populate();
+ AccessController.doPrivileged(new PrivilegedAction() {
+ public Object run() {
+ populate();
+ return null;
+ }
+ });
+
return (String[]) screens.keySet().toArray(new String[screens.size()]);
}
@@ -182,7 +196,13 @@ public class XRandR {
* null if there is no such screen
*/
public static Screen[] getResolutions(String name) {
- populate();
+ AccessController.doPrivileged(new PrivilegedAction() {
+ public Object run() {
+ populate();
+ return null;
+ }
+ });
+
// clone the array to prevent held copies being altered
return (Screen[]) ((Screen[]) screens.get(name)).clone();
}