FreeBSD-11, Mate, Terminal, Gvim

Polytropon freebsd at edvax.de
Tue Jul 25 19:54:17 UTC 2017


On Tue, 25 Jul 2017 19:45:18 +0000, Manish Jain wrote:
> 
> 
> On 07/26/17 00:36, Polytropon wrote:
> > On Tue, 25 Jul 2017 10:39:29 -0400, James B. Byrne via freebsd-questions wrote:
> >> When setting up new hosts I usually open an especially coloured
> >> terminal instance and use 'su -l' to become root.  I also typically
> >> edit using gvim.  However, this combination does not work for me on
> >> FreeBSD with Mate as it did for me under CentOD-6 and Gnome2.  When
> >> inside a terminal window as root instead of opening an Xwindow editor
> >> when running gvim I get a 'E233: cannot open display' error.
> > 
> > This is to be expected.
> > 
> > With "su -l", a full login is simulated, so all environmental
> > variables will be reset - but $DISPLAY is needed for X. There
> > are basically two solutions:
> > 
> > 1. Set $DISPLAY accordingly, for example to :0.0. Refer to the
> >     documentation of your shell on how to do it, for example in
> >     C shell "setenv DISPLAY :0.0", in sh/bash "export DISPLAY=:0.0".
> > 
> > 2. Use "su -m" instead, which will preserve the environment of
> >     your user, and $DISPLAY will be kept set.
> > 
> > See "man su" for details.
> 
> Hi Poly,
> 
> I found this relevant too. Under Linux. it appears that root is somehow 
> able to connect to the X server of the current user. But under FreeBSD, 
> this does not work and occasionally I need to run X applications as root.
> 
> Your steps should in theory work. But apparently, they don't on my box.
> 
> export DISPLAY=:0.0
> su -m my_normal_user_name -c gvim
> 
> I get :
> 
> No protocol specified
> E233: cannot open display
> Press ENTER or type command to continue

Use "su -m" from your user's account, not from the root account.
This should work - you can test if $DISPLAY is still set.

Example:

	% su -l
	Password:
	# echo $DISPLAY
	DISPLAY: Undefined variable.
	# xlogo
	Error: Can't open display: 
	# exit

	% su -m
	Password:
	# echo $DISPLAY
	:0.0
	# xlogo
	(X logo is being shown)
	^C
	# exit
	% _

This is C shell "decoration": % for user, # for root. :-)



> Actually, xhost itself is unable to access the display :
> 
> /root <<: xhost +local:
> No protocol specified
> xhost:  unable to open display ":0.0"

That is correct. Like "su -m", "xhost" is to be executed from
the (non-root) user that controls the display. But when you're
using the "su -m" approach, it usually isn't even needed.



-- 
Polytropon
Magdeburg, Germany
Happy FreeBSD user since 4.0
Andra moi ennepe, Mousa, ...


More information about the freebsd-questions mailing list