Thursday 5 December 2013

Workaround to place XQuartz/X11 apps on second monitor in OS X Mavericks (apps like Inkscape)

Problem:

I've upgraded to OS X Mavericks and I can't place apps such as Inkscape on my second monitor any longer. I don't want to turn off "Displays have separate Spaces."

Before trying this workaround ...

This workaround was written as a reminder for myself. Even if you get it to work, X11 programs will be riddled with bugs because of how Mavericks currently treats Spaces coordinates, gravity, etc., with XQuartz. Thus, I'd recommend not following it for the time being unless you're curious. A better workaround is to simply turn off "Displays have separate Spaces" in: System Preferences ... -> Mission Control

This workaround only works under very specific conditions right now, and there is no guarantee that it will work under other conditions. The following are the conditions under which this workaround worked:

  • The OS X Team nor the XQuartz team have not addressed the issue yet (test this out to make sure that you're not using a workaround when things actually work)
  • OS X version is 10.9
  • XQuartz is installed and works
  • XQuartz version is XQuartz 2.7.4 (xorg-server 1.13.0) or under (haven't tested it with newer versions, and newer versions may fix this problem rendering this workaround pointless)
  • Inkscape and other X11 apps run
  • "Displays have separate Spaces" is checked under: System Preferences -> Mission Control
  • You haven't already dragged the application window out of bounds in one of your spaces (in which case you'll need to figure out how to reset its position first -- can't help there at the moment since each app handles its position in different ways. Advanced: Try resetting or reinstalling the X11 app, or editing its config file?)
  • You know what the following terms mean: "dock", "desktop", "mission control", "spaces", "X11", "XQuartz", "secondary click"

If you're here to try to get Inkscape or other X11 apps to work in Mavericks in the first place, try this post first: http://grammarofdev.blogspot.ca/2013/10/how-to-run-inkscape-in-os-x-109.html

Disclaimer:

This is hardly a permanent solution, nor is it guaranteed to work under all versions of OS X, XQuartz, etc. This workaround is just posted here in case anyone else finds it useful to be able to use X11 apps on their second monitor once again after upgrading to Mavericks, and doesn't mind jumping through a few hoops. Hopefully by the time you read this, someone at Apple or XQuartz would have fixed this issue. (If you're one of said Apple or XQuartz people, please fix this =) lol.)

Also note that because the bug seems to be related to coordinates, weird things can happen with this workaround, such as windows, child-windows, etc., opening out of bounds and therefore off-screen. Hopefully someone out there will be able to debug this problem as this workaround can't work around bugs like that.

Workaround:

  • Launch the X11 app so that XQuartz and the app's icon show up in the OS X dock
  • In the dock, secondary click the XQuartz icon and select: Options -> Assign To: None
  • In the dock, secondary click the app icon and select: Options -> Assign To: None
  • Go to mission control (hit f3 on most Macs, or triple-swipe upwards if that gesture is enabled)
  • Do NOT attempt to drag the app to the space/desktop on the other monitor as you do with native apps, as all this will do is set the window out of bounds on the current space/desktop. (At least, as of XQuartz 2.7.4 (xorg-server 1.13.0) or earlier.)
  • Drag the X11 app window (such as Inkscape's window) to the desktop/space mini-window on top of the other monitor (the one on top with the labelled "Desktop __" with the desktop number in place of __ -- not to the big desktop area below)
  • If all worked out, the app should now actually display on your second monitor
  • (Optional step - if you work for Apple) Program a patch to allow drag-and-drop of X11 apps to spaces residing on second monitor
  • (Optional step - if you work on the XQuartz project) Detect bounds of monitors and imitate native drag-and-drop behaviour (I'd like to help out, but I'm not entirely sure how to right now =/)

More:

As this issue hasn't been solved yet as of the time this post was written, I've decided instead to link to the closest bug report that I could find: https://discussions.apple.com/message/23717540#23717540

If you happen to have a better fix, please feel free to update us all in the comments below! =)

No comments:

Post a Comment