ch11ng/xelb

xelb running on thin clients

map7 opened this issue · 7 comments

map7 commented

We are using thin clients under Debian 7 and would like to use the great 'exwm'. When I start exwm I get a xelb error

My environment is

  • Debian 7
  • Emacs 25.0.50.2
  • LTSP 5.2

let*: make client process failed: No such file or directory, :name, XELB, :remote, /tmp/.X11-unix/X7

The problem is I've the X7 directory only exists on the thin client and we are running the xelb source code as part of emacs configuration on the server. The thin client we use is called Linux Terminal Server Project.

I've configured my .xsession with the following


#!/usr/bin/env bash
#
# This is a sample file for the ~/.xinitrc file.
#

# Disable access control
xhost +SI:localuser:$USER

# Fallback cursor
xsetroot -cursor_name left_ptr

# Keyboard repeat rate
#xset r rate 180 40

export VISUAL=emacsclient
export EDITOR="$VISUAL"
#export DISPLAY=:0
#export DISPLAY=192.168.200.198:7

xset b off &
xhost +

exec dbus-launch --exit-with-session emacs

On the server in the /tmp/.X11-unix directory I only have X0 and on the client in that directory I only have X7.

I've been using XFCE on these machines without a problem and I don't have to install XFCE on the client it is ran from the server itself. If I uncomment either of those DISPLAY lines above emacs doesn't even start on the client. Without those lines at least emacs starts but exwm does't start.

I have no experience with LSTP but it seems it basically gets the client run an X server instance and X programs are run on the server but displayed on the client through SSH X11 forwarding. Am I right? If this is the case then we cannot create the connection via a socket. Could you verify if (xcb:connect ":7") can succeed?

map7 commented

I just pasted that command into the scratch buffer and ran it, but it might not be correct as I get the following error;

Debugger entered--Lisp error: (void-function xcb:connect)
  (xcb:connect ":7")
  eval((xcb:connect ":7") nil)
  elisp--eval-last-sexp(t)
  eval-last-sexp(t)
  eval-print-last-sexp(nil)
  funcall-interactively(eval-print-last-sexp nil)
  call-interactively(eval-print-last-sexp nil nil)
  command-execute(eval-print-last-sexp)

I just pasted that command into the scratch buffer and ran it, but it might not be correct as I get the following error;

Debugger entered--Lisp error: (void-function xcb:connect)
  (xcb:connect ":7")
  eval((xcb:connect ":7") nil)
  elisp--eval-last-sexp(t)
  eval-last-sexp(t)
  eval-print-last-sexp(nil)
  funcall-interactively(eval-print-last-sexp nil)
  call-interactively(eval-print-last-sexp nil nil)
  command-execute(eval-print-last-sexp)

It seems the XELB library is not loaded correctly.

You may as well change the xcb:connect-to-socket in this line to xcb:connect and see if EXWM would start correctly.

map7 commented

I get a different error

error in process filter: let: [XELB] Connection failed: No protocol specified

I get a different error

error in process filter: let: [XELB] Connection failed: No protocol specified

This is probably an access control problem. Could you please double check the xhost setting (by running xhost with no argument)?

Also there's another authentication issue but strangely you did not encountered it. When I tried to use XELB to make an X connection through an ssh session (which set $DISPLAY as localhost:10.0) I got the following error:

X11 connection rejected because of wrong authentication.

Clearly we need to setup the authentication info according to the $HOME/.Xauthority file when making a connection, but this functionality is not implemented in XELB yet. And it seems xhost + has no effect here. Maybe the environment LTSP sets up is quite different. What is the value of $DISPLAY in your case?

I've just pushed ddca322 and ch11ng/exwm@2dcb26c to fix the aforementioned authentication problem. Please update your local repo to make further tests.

map7 commented

Thank you that works on the thin clients now (even dual screen works on the thin clients).