XServer forward from Linux text mode for Headless purposes.

Hello, this post is about XServer forward from Linux text mode, not ssh forward, anything related to VNC or things like that.

Recently I was working on an AdoptOpenJDK tests bug that was preventing AWT and Swing tests to be executed properly in text mode, they need X to draw windows and simulate interactions.

My first assumption was that was necessary to have a whole Desktop or Window manager to make it work properly but no, just the XServer is enough.

Let’s take a look at this Ansible snippet.

- name: Install X11
      apt: name= state=latest update_cache=yes
      with_items:
        - xauth
        - xorg
        - xserver-xorg-legacy 

    - name: Create X11 Wrapper config file
  	  shell: touch /etc/X11/Xwrapper.config

    - blockinfile:
        dest: /etc/X11/Xwrapper.config	
        block: |
          allowed_users=anybody	
          needs_root_rights=yes

    - name: Start X11
      sudo: yes
      sudo_user: jenkins
  	  shell: startx -- :1 &
  	  ignore_errors: True
  	  no_log: True

At the first block “Install X11” we’re installing the necessary packages but in this case xserver-xorg-legacy was the most important one, this package enable you to give permission to any user start an XServer, this is important because jenkins user is the one who kicks off  the tests what makes mandatory to him start the XServer as well to avoid permissions problems when tests try to forward anything to the XServer.

Another alternative was giving him sudo powers but I think it would be more intrusive.

With xserver-xorg-legacy in place, we need to configure the Xwrapper.config file. Here the important part to mind is the following line.

allowed_users=anybody

It says that anyone has permissions to start an XServer.

Now “Start X11”, here you can see that we’re starting the XServer passing a parameter “:1 this is the address that we’re going to use to get connected to XServer.

Just in case you’re wondering what are the lines below doing, they are suppressing any output, is sort of annoying but when XServer starts it outputs some messages that in this case, prevents ansible to go forward so, we’re ignoring it.

With everything configured and XServer started, the only thing that we need is pointing to that address, eg:

make test DISPLAY=:1

I couldn’t find anything related to this scenario, most of the content that I’ve found was related to SSH or VNC stuff so, enjoy.

Allan de Queiroz

Allan de Queiroz
London based software engineer

MASM for x64 Platform on Visual Studio 2013

Today let’s see how to build a solution using MASM and x64 Platform on Visual Studio 2013.I’m not that familiar with Microsoft world and ...… Continue reading