0

At the moment I am trying to run Intellij Idea remotely using x11 over ssh, such that I see the widgets on my personal iMac, but the IDE is actually running on my work issued MacPro. This way I can work from home during the Corona outbreak with a decent size monitor without violating company policy concerning work related code on a personal computer. To that effect I enabled X11 forwarding on the SSH daemon running on my work machine, and installed xquartz on both machines. From my home machine I was able to ssh into my work machine and run x11 programs such as xclock and xeyes without any problems. When I try to run Idea, however I get an exception:

/Applications/IntelliJ\ IDEA.app/Contents/MacOS/idea

2020-03-17 20:29:57,056 [   2940]  ERROR - nsions.impl.ExtensionPointImpl - null 
java.awt.HeadlessException
        at java.desktop/java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:208)
        at java.desktop/java.awt.Window.<init>(Window.java:548)
        at java.desktop/java.awt.Frame.<init>(Frame.java:423)
        at java.desktop/java.awt.Frame.<init>(Frame.java:388)
        at java.desktop/javax.swing.JFrame.<init>(JFrame.java:180)
        at com.intellij.openapi.wm.impl.welcomeScreen.FlatWelcomeFrame.<init>(FlatWelcomeFrame.java:93)
        at com.intellij.openapi.wm.impl.welcomeScreen.FlatWelcomeFrameProvider.createFrame(FlatWelcomeFrameProvider.java:27)
        at com.intellij.openapi.wm.impl.welcomeScreen.WelcomeFrame.lambda$createWelcomeFrame$1(WelcomeFrame.java:177)
        at com.intellij.openapi.extensions.impl.ExtensionProcessingHelper.computeSafeIfAny(ExtensionProcessingHelper.java:45)
        at com.intellij.openapi.extensions.ExtensionPointName.computeSafeIfAny(ExtensionPointName.java:60)
        at com.intellij.openapi.wm.impl.welcomeScreen.WelcomeFrame.createWelcomeFrame(WelcomeFrame.java:177)
        at com.intellij.openapi.wm.impl.welcomeScreen.WelcomeFrame.prepareToShow(WelcomeFrame.java:159)
        at com.intellij.idea.IdeStarter.main(ApplicationLoader.kt:510)
        at com.intellij.idea.ApplicationLoader$startApp$8$1.run(ApplicationLoader.kt:240)
        at com.intellij.openapi.application.TransactionGuardImpl.performUserActivity(TransactionGuardImpl.java:193)
        at com.intellij.idea.ApplicationLoader$startApp$8.run(ApplicationLoader.kt:239)
        at java.base/java.util.concurrent.CompletableFuture$UniRun.tryFire(CompletableFuture.java:783)
        at java.base/java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:478)
        at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
        at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:776)
        at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
        at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
        at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:746)
        at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:908)
        at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:781)
        at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:424)
        at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:698)
        at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:423)
        at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
        at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
2020-03-17 20:29:57,058 [   2942]  ERROR - nsions.impl.ExtensionPointImpl - IntelliJ IDEA 2019.3.3  Build #IU-193.6494.35 
2020-03-17 20:29:57,058 [   2942]  ERROR - nsions.impl.ExtensionPointImpl - JDK: 11.0.5; VM: OpenJDK 64-Bit Server VM; Vendor: JetBrains s.r.o 
2020-03-17 20:29:57,058 [   2942]  ERROR - nsions.impl.ExtensionPointImpl - OS: Mac OS X 
2020-03-17 20:29:57,067 [   2951]  ERROR - nsions.impl.ExtensionPointImpl - Last Action:  
2020-03-17 20:29:57,068 [   2952]  ERROR - llij.ide.plugins.PluginManager - java.awt.HeadlessException 
java.util.concurrent.CompletionException: java.awt.HeadlessException
        at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:314)
        at java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:319)
        at java.base/java.util.concurrent.CompletableFuture$UniRun.tryFire(CompletableFuture.java:787)
        at java.base/java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:478)
        at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
        at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:776)
        at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
        at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
        at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:746)
        at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:908)
        at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:781)
        at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:424)
        at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:698)
        at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:423)
        at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
        at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Caused by: java.awt.HeadlessException
        at java.desktop/java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:208)
        at java.desktop/java.awt.Window.<init>(Window.java:548)
        at java.desktop/java.awt.Frame.<init>(Frame.java:423)
        at java.desktop/java.awt.Frame.<init>(Frame.java:388)
        at java.desktop/javax.swing.JFrame.<init>(JFrame.java:180)
        at com.intellij.openapi.wm.impl.welcomeScreen.WelcomeFrame.<init>(WelcomeFrame.java:48)
        at com.intellij.openapi.wm.impl.welcomeScreen.WelcomeFrame.createWelcomeFrame(WelcomeFrame.java:178)
        at com.intellij.openapi.wm.impl.welcomeScreen.WelcomeFrame.prepareToShow(WelcomeFrame.java:159)
        at com.intellij.idea.IdeStarter.main(ApplicationLoader.kt:510)
        at com.intellij.idea.ApplicationLoader$startApp$8$1.run(ApplicationLoader.kt:240)
        at com.intellij.openapi.application.TransactionGuardImpl.performUserActivity(TransactionGuardImpl.java:193)
        at com.intellij.idea.ApplicationLoader$startApp$8.run(ApplicationLoader.kt:239)
        at java.base/java.util.concurrent.CompletableFuture$UniRun.tryFire(CompletableFuture.java:783)
        ... 19 more

I tried setting one of the idea.vmoptions -Djava.awt.headless=false to help it figure out that there is a actually a remote display device, but this did not help matters. Any help welcome. I am sure I am not the only person working from home and hitting this problem.

CrazyCoder
  • 389,263
  • 172
  • 990
  • 904
murungu
  • 2,090
  • 4
  • 21
  • 45
  • You need the X Window server environment and `export DISPLAY=:0` to be able to run GUI apps. Can you run any other Java Swing apps like JEdit or NetBeans? – CrazyCoder Mar 17 '20 at 20:04
  • Like I said other GUI programs namely xclock and xeyes do work. Why shouldn't Idea work too? Jetbrains does support x11 – murungu Mar 17 '20 at 20:11
  • Can you run any other Java Swing apps like JEdit or NetBeans? – CrazyCoder Mar 17 '20 at 20:11
  • IntelliJ IDEA may not see your `DISPLAY` environment variable. Try running from the Terminal: `export DISPLAY=:0` followed by `/Applications/IntelliJ\ IDEA.app/Contents/MacOS/idea`. See https://stackoverflow.com/a/26586170/104891 . Also check if this answer helps: https://stackoverflow.com/a/26224404/104891. – CrazyCoder Mar 17 '20 at 20:15
  • The macos version of intellij may not support X. Macos's own GUI isn't X-based, after all. You might have better luck using screen sharing. – Kenster Mar 17 '20 at 20:31
  • @CrazyCoder I tried both overriding the DISPLAY value to the one you suggested AND exporting AWT_TOOLKIT=CToolkit and regrettably neither approach worked. Same error as before. – murungu Mar 17 '20 at 20:39
  • Consider using VNC, it may be macOS Java limitation. – CrazyCoder Mar 17 '20 at 20:43
  • It appears to be the same issue as this issue here: https://stackoverflow.com/questions/44616348/xclock-works-x11-display-set-but-still-java-awt-headlessexception – murungu Mar 17 '20 at 20:45
  • Indeed, but it has nothing to do with IntelliJ IDEA, just generic Java/macOS problem. – CrazyCoder Mar 17 '20 at 20:45
  • @CrazyCoder As a work-around would it be possible to run the Linux version of Idea inside a docker container on the work machine and connect to it from my home machine with a some port forwarding? – murungu Mar 17 '20 at 21:22
  • Yes, it works fine on Linux host. Note that there is no big benefit running Java apps via X11, protocol mostly sends it as an image, so VNC or remote solutions based on video streams may work better and would be easier to set up. – CrazyCoder Mar 17 '20 at 21:25
  • @CrazyCoder Thanks! – murungu Mar 17 '20 at 21:27

1 Answers1

0

The IntelliJ for Mac does not use X11. The moment you start IntelliJ, it will display on your MacPro. It's a big misunderstood for years that Java Application on MacOS could do X11 Forwarding.

You need to use IntelliJ for Linux, running on Linux (could be Docker Container) to do X11 Forwarding.

Leonel
  • 1