Solution
Execute the following as a normal user
xhost +si:localuser:root; sudo ./clion.sh;
Background Story and More Information
Recently we needed to start CLion
as root on Fedora
to allow the application we were developing to bind the DHCP
service of the system.
When we tried to start CLion
as root
we got the following error:
java.awt.AWTError: Can't connect to X11 window server using ':0' as the value of the DISPLAY variable.
Specifically, the whole error log was as follows:
[george@bytefreaks bin]$ sudo ./clion.sh [sudo] password for george: No protocol specified Start Failed: Failed to initialize graphics environment java.awt.AWTError: Can't connect to X11 window server using ':0' as the value of the DISPLAY variable. at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method) at sun.awt.X11GraphicsEnvironment.access$200(X11GraphicsEnvironment.java:65) at sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:115) at java.security.AccessController.doPrivileged(Native Method) at sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:74) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:264) at java.awt.GraphicsEnvironment.createGE(GraphicsEnvironment.java:103) at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:82) at sun.awt.X11.XToolkit.<clinit>(XToolkit.java:126) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:264) at java.awt.Toolkit$2.run(Toolkit.java:860) at java.awt.Toolkit$2.run(Toolkit.java:855) at java.security.AccessController.doPrivileged(Native Method) at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:854) at java.awt.Toolkit.getEventQueue(Toolkit.java:1734) at java.awt.EventQueue.isDispatchThread(EventQueue.java:1043) at javax.swing.SwingUtilities.isEventDispatchThread(SwingUtilities.java:1361) at javax.swing.text.StyleContext.reclaim(StyleContext.java:454) at javax.swing.text.StyleContext.addAttribute(StyleContext.java:311) at javax.swing.text.html.StyleSheet.addAttribute(StyleSheet.java:578) at javax.swing.text.StyleContext$NamedStyle.addAttribute(StyleContext.java:1501) at javax.swing.text.StyleContext$NamedStyle.setName(StyleContext.java:1312) at javax.swing.text.StyleContext$NamedStyle.<init>(StyleContext.java:1259) at javax.swing.text.StyleContext.addStyle(StyleContext.java:107) at javax.swing.text.StyleContext.<init>(StyleContext.java:87) at javax.swing.text.html.StyleSheet.<init>(StyleSheet.java:166) at javax.swing.text.html.HTMLEditorKit.getStyleSheet(HTMLEditorKit.java:391) at com.intellij.util.ui.UIUtil.<clinit>(UIUtil.java:102) at com.intellij.ide.plugins.PluginManager.start(PluginManager.java:73) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.intellij.ide.Bootstrap.main(Bootstrap.java:39) at com.intellij.idea.Main.main(Main.java:81)
This error occurred because the default configuration of the X server
permissions did not allow the root
to connect to it.
To verify this, we used xhost
X server access control program to check the permissions.
Executing xhost
with no command line arguments gave us a message indicating whether or not access control was currently enabled, followed by the list of those users allowed to connect.
For example in our case the output was as follows:
[george@bytefreaks bin]$ xhost access control enabled, only authorized clients can connect SI:localuser:george
To add root
to the list of users that was allowed to start an X
application we executed the following command:
[george@bytefreaks bin]$ xhost +si:localuser:root localuser:root being added to access control list
Executing xhost
again, we got the updated list which included the root
[george@bytefreaks bin]$ xhost access control enabled, only authorized clients can connect SI:localuser:root SI:localuser:george
After this, we were able to start CLion
using sudo
with no problems.
[george@bytefreaks bin]$ sudo ./clion.sh
Note: This patch is not permanent, we actually execute it once at every restart of the machine.
This post is also available in: Greek
Same applies for other applications like wireshark:
[george@bytefreaks ~]$ sudo wireshark
[sudo] password for george:
No protocol specified
QXcbConnection: Could not connect to display :0
Aborted
[george@bytefreaks ~]$ xhost +si:localuser:root
localuser:root being added to access control list
[george@bytefreaks ~]$ sudo wireshark