2

I have no idea how to set the display. I keep getting the following error error

xterm: xt error can't open display xterm display is not set

I have searched online but haven't found any solution. Please can anyone help me out ?

3 Answers 3

0

This is likely due to either a misconfiguration issue or you have multiple displays. As can be seen in the xterm manpage (man xterm) you can set the display using the -display flag:

   -display display
           This option specifies the X server to contact; see X(7).

If you then look in X(7) where it specifies to look (man X) you will see what you need to put after the flag:

DISPLAY NAMES
       From  the  user's perspective, every X server has a display name of the
       form:

              hostname:displaynumber.screennumber

       This information is used by the application to determine how it  should
       connect  to  the  server  and which screen it should use by default (on
       displays with multiple monitors):

       hostname
               The hostname specifies the name of the  machine  to  which  the
               display is physically connected.  If the hostname is not given,
               the most efficient way of communicating to a server on the same
               machine will be used.

       displaynumber
               The  phrase  "display" is usually used to refer to a collection
               of monitors that share a common set of input devices (keyboard,
               mouse,  tablet, etc.).  Most workstations tend to only have one
               display.  Larger, multi-user systems, however, frequently  have
               several  displays  so  that  more  than one person can be doing
               graphics work at once.  To avoid confusion, each display  on  a
               machine  is assigned a display number (beginning at 0) when the
               X server for that display is started.  The display number  must
               always be given in a display name.

       screennumber
               Some displays share their input devices among two or more moni‐
               tors.  These may be configured  as  a  single  logical  screen,
               which  allows  windows to move across screens, or as individual
               screens, each with their own set  of  windows.   If  configured
               such  that each monitor has its own set of windows, each screen
               is assigned a screen number (beginning at 0) when the X  server
               for  that  display  is  started.   If  the screen number is not
               given, screen 0 will be used.

       On POSIX systems, the default display name is stored  in  your  DISPLAY
       environment  variable.  This variable is set automatically by the xterm
       terminal emulator.  However, when you log into  another  machine  on  a
       network,  you may need to set DISPLAY by hand to point to your display.
       For example,

           % setenv DISPLAY myws:0
           $ DISPLAY=myws:0; export DISPLAY

       The ssh program can be used to start an X program on a remote  machine;
       it automatically sets the DISPLAY variable correctly.

       Finally,  most X programs accept a command line option of -display dis‐
       playname to temporarily override the contents of DISPLAY.  This is most
       commonly used to pop windows on another person's screen or as part of a
       "remote shell" command to start an xterm pointing back to your display.
       For example,

           % xeyes -display joesws:0 -geometry 1000x1000+0+0
           % rsh big xterm -display myws:0 -ls </dev/null &

       X  servers  listen for connections on a variety of different communica‐
       tions channels (network byte  streams,  shared  memory,  etc.).   Since
       there  can be more than one way of contacting a given server, The host‐
       name part of the display name is used to determine the type of  channel
       (also  called  a transport layer) to be used.  X servers generally sup‐
       port the following types of connections:

       local
               The hostname part of the  display  name  should  be  the  empty
               string.   For  example:   :0, :1, and :0.1.  The most efficient
               local transport will be chosen.

       TCPIP
               The hostname part of the display  name  should  be  the  server
               machine's  hostname or IP address.  Full Internet names, abbre‐
               viated names,  IPv4  addresses,  and  IPv6  addresses  are  all
               allowed.     For    example:    x.org:0,    expo:0,    [::1]:0,
               198.112.45.11:0, bigmachine:1, and hydra:0.1.

To get the value of your display you should just be able to run:

echo $DISPLAY
4
  • This is not working for me, do you have any other suggestions please ?
    – Oyinade
    May 29, 2016 at 22:19
  • @Oyinade: So what is the output of echo $DISPLAY and what is the output of when you put that output after xterm -display ?
    – user364819
    May 29, 2016 at 22:24
  • 'echo $DISPLAY' gives a blank result while 'xterm -display' gives xterm: Xt error : Can't open display: xterm : DISPLAY is not set
    – Oyinade
    May 29, 2016 at 22:51
  • Do you know what your hostname is? Your display number? And your screen number? Or at least your hostname because you could try running the commands setenv DISPLAY hostname:0 and DISPLAY=hostname:0; export DISPLAY (replacing hostname with your actual host name).
    – user364819
    May 30, 2016 at 14:14
0

In a bash script one way to find the display associated with a user is to run the command who. The useful bits in this case would be the login name and X display.

On a single user system you can usually safely assume that there will only be one user logged on. For a multi user server some logic may need to be applied to choose the correct display.

# process who for a unique list of users with their display as an array
USERLIST=($(/usr/bin/who | /bin/sed -e 's/[)(]//g' -e 's/ \+/ /g' | /usr/bin/cut -d ' ' -f1,5 | /usr/bin/sort -u | /usr/bin/tr -d '\n'))
# ${USERLIST[1]:-":0.0"} includes a default guess to be used if the array value is null.
xterm -display "${USERLIST[1]:-":0.0"}"
0

I found the solution if your using SSH, on the host machine use the command:echo $DISPLAYfollowed up on the SSH client: DISPLAY=echoedDisplay:0; export DISPLAY(echoeddisplay being the display the host machine echoed)

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .