441

I just installed the latest Kali Linux on my laptop which was based on Debian 7 (oldstable). I then dist-upgrad-ed the whole thing to Debian 8.

I've always wanted Wayland instead of X11, so I installed the necessary packages. Then created a minimal ~./config/weston.ini configuration. Now, from the Gnome login screen:

Login Screen

I can boot to Gnome on Wayland or LXDE (among others). The previous with very limited success and the latter (LXDE) almost perfectly, though the panel needs setting up (I have to look up freedesktop).

Anyways, in LXDE, the GUI is more responsive than it was on the oldstable and possibly as fast when it was running Windows 7. I was pleased.

But I want to know if this is because of all the library/module upgrades from Debian 7 to 8 or from using Wayland (if I really am using Wayland at all). I skimmed through htop and found a /usr/bin/Xorg running and no process named "wayland". So which one am I currently running?

Dehbop
  • 4,639
  • 1
    run xprop, this tool will work on xapplications running under emulation but not wayland or gnome-shell on wayland. – Mike Mestnik Aug 10 '15 at 01:40
  • 9
    I guess I'm the only one to notice that while the OP said he was operating on debian, the screenshot he presented is clearly fedora... – user1404316 Mar 22 '18 at 13:28
  • 3
    Classical SE: An incorrect/incomplete, complicated answer gets 294 upvotes, and the simpler, correct, and complete one gets only 2. Getting the best answer at the top sure is a hard problem to solve. – JoL Oct 28 '20 at 19:01

14 Answers14

543

Obtain the session ID to pass in by issuing:

loginctl

That will show you something like:

SESSION  UID USER          SEAT  TTY
     c2 1000 yourusername  seat0

1 sessions listed.

In that example, c2 is the session ID.

Then:

loginctl show-session <SESSION_ID> -p Type

If you want all this on a single command:

loginctl show-session $(awk '/tty/ {print $1}' <(loginctl)) -p Type | awk -F= '{print $2}'

Use the one corresponding to your user name.

Refer to: https://fedoraproject.org/wiki/How_to_debug_Wayland_problems

So, for me it is:

$ loginctl show-session 2 -p Type                                                  
Type=wayland
Andreas
  • 5,547
  • 1
  • 13
  • 5
  • 6
    Thanks for the great answer. Please add that OP should run loginctl first to see the sessions. – Ho1 Nov 25 '16 at 10:33
  • 12
    loginctl show-session `loginctl|grep <YOUR_USER_NAME>|awk '{print $1}'` -p Type – solsTiCe Dec 07 '17 at 07:06
  • I think this detects whether the session you've logged into is wayland but it doesn't tell a script that's running in an x11 terminal that it's not in wayland. – thebunnyrules Mar 02 '18 at 10:33
  • 10
    According to Fedora 28 docs you can also use echo $WAYLAND_DISPLAY which prints nothing if wayland is not used. – robsch Jun 25 '18 at 09:14
  • 9
    @DSJustice your backticks have been markdown'd. One can copy this: loginctl show-session $(loginctl|grep $(whoami) |awk '{print $1}') -p Type – Andreas Nov 06 '18 at 07:30
  • If one prefers verbose commands, the relevant command is loginctl show-session 2 --property=Type. Also worth taking a look at the Fedora 29 documentation (that @robsch mentioned) which introduces the xlsclients (X11 Legacy Server Clients) command. – Patrick Dark Apr 18 '19 at 22:20
  • 22
    If you don’t use a display manger, this outputs tty no matter whether you use x11 or wayland. – Devon Mar 12 '20 at 13:19
  • 4
    @Devon And the same is true for echo $XDG_SESSION_TYPE. So probably this answer is most fail-safe. – Maximko Oct 29 '20 at 04:52
  • 2
    In more recent versions of systemd, you can also use loginctl show-session self -p Type. – sedrubal Apr 12 '22 at 07:04
  • 1
    loginctl show-session $(loginctl | awk '/'"$USER"'/{print $1}') -p Type – DigiBat Sep 17 '22 at 14:58
  • Since the release of sddm 2.0, it may cause the command in this answer to be erroneous. The following modified command will filter out ssdm from the session list: loginctl show-session $(awk '/tty/ {print $1}' <(loginctl|grep -v sddm)) -p Type | awk -F= '{print $2}' 2>/dev/null – Xenhat Jun 29 '23 at 20:52
431

How to know whether Wayland or X11 is being used?

on X11 systems:

$ echo $XDG_SESSION_TYPE
x11

on some wayland system:

$ echo $XDG_SESSION_TYPE
wayland

edit: This doesn't seem to work in some cases. See comments & use antismap's answer instead

Ayush
  • 4,867
97

This works on Fedora and Ubuntu 18.04.5 LTS:

loginctl show-session $(loginctl | grep $(whoami) | awk '{print $1}') -p Type
Adam Zalcman
  • 4,331
antismap
  • 1,071
  • 2
    Power of pipes and unix philosophy. Nice. – Talespin_Kit Sep 10 '18 at 13:07
  • 15
    /me mumbles something about grep ... | awk, but hey, that's fine. – rahmu Nov 12 '18 at 14:58
  • 11
    A minor variation: loginctl show-session $(loginctl show-user $(whoami) -p Display --value) -p Type --value I guess this assumes a singe session id per user: I'm not sure whether there can be multiple ids. – NickD Sep 01 '20 at 14:50
33

I like Ayush's answer the best, but thought I'd say that Andreas's answer can be done in one line:

loginctl show-session "$XDG_SESSION_ID" -p Type

You can additionally pass --value to drop the Type= prefix.

  • 4
    For me this failed with an error message: Failed to get session path: Caller does not belong to any known session. Apparently $XDG_SESSION_ID is not set on my wayland session. – Calimo Aug 29 '20 at 14:52
  • XDG_SESSION_ID is not set for me, although other XDG_ vars are. (I am running wayland, on Ubuntu gutsy 20.10) – Jonathan Hartley Nov 20 '20 at 15:46
32

The simplest thing to do is to check whether WAYLAND_DISPLAY variable is set or not.

  • 10
    Right, and then if that fails, check DISPLAY to see if X11 is being used. – JoL May 11 '20 at 19:28
  • 1
    This works even if you don't use a desktop manager. Other answers produce "tty". This reliable simple answer has a long way to go before it gains its rightful pole position. – Paul Mar 01 '23 at 16:33
  • 1
    @JoL A fresh install of Ubuntu 23.10 runs Wayland, but it sets DISPLAY=:0 – Andrew Nov 17 '23 at 05:28
  • 1
    @Andrew That's probably XWayland, which is why I wrote "then if that fails". – JoL Nov 17 '23 at 09:44
11

Give the command

ps aux | grep gnome-shell

It will give the output

/usr/bin/gnome-shell --wayland --display-server

If Wayland is active.

11

Tell which session type with POSIX-shell grammar and no sub-shell:

printf 'Session is: %s\n' "${DISPLAY:+X11}${WAYLAND_DISPLAY:+WAYLAND}"

Alternative handling all 4 states:

case $((0${DISPLAY:+1} | 0${WAYLAND_DISPLAY:+2})) in
1) session=X11 ;;
2) session=WAYLAND ;;
3) session='both X11 and WAYLAND' ;;
*) session='neither X11 nor WAYLAND' ;;
esac

printf 'Session is: %s\n' "$session"

Léa Gris
  • 477
10

If you're running Gnome, run the command r in the Alt+F2 menu. It will restart the environment (gnome-shell) in Xorg (without losing windows and processes) but in Wayland it will give the message "Restart is not available in Wayland".

AdminBee
  • 22,803
owen
  • 139
  • 1
  • 5
  • Via Alt+F2 my Kubuntu 19.10 starts Robo3t, and via terminal i get "Command 'r' not found, but can be installed with:

    sudo apt install r-cran-littler".

    – Cees Timmerman Feb 03 '20 at 14:27
5

You could run the xdpyinfo command. It gives information about your current X11 server (and display). It would fail if you don't have one (e.g. in a pure Wayland setting).

5

The simple easy way to find out if you have Wayland or X11 is to open Settings, scroll down to About, and then scroll down to Windowing System, and it will tell you there.

In my own search for the answer to this question, after reading some of these "Answers," and finally finding out which I have through various Terminal commands, I found this much simpler way on my own. I'm brand new to Linux and I've been going through a lot of trouble shooting issues, and this kind of problem often comes up. It is extremely frustrating. Why does everyone offer such convoluted answers instead of the simpler more obvious solution?

  • 3
    People sometimes prefer command-line solutions because you can script them. – G-Man Says 'Reinstate Monica' Sep 15 '22 at 02:06
  • 2
    When you get used to the terminal you will start to appreciate it. Apart from what G-Man wrote, you can also copy paste the commands from a website. You cannot copy paste a sequence of clicks. – klutt Jan 10 '23 at 07:04
2

Open xeyes via alf+f2 of via pseudo terminal.

Roll the mouse over the screen, if it follows your cursor, you are using Xorg, if it's just moves when you are onto the eyes, then you use wayland.

warning this doesn't work with conky.

  • nice idea, but this fails when using conky. as soon as your cursor is above the conky "window", they also follow it. especially when using big transparent conky "windows" without window decoration this can lead to wrong assumptions. – DJCrashdummy May 05 '23 at 07:07
1

if you want a visual hint, I wrote a simple GNOME Shell extension that shows an icon that tells you whether you are running Wayland or Xorg

http://www.fepede.net/blog/2017/04/gnome_shell_extension_xorwayland/

0

No, I've noticed a pid called Wayland in htop, when I've switched to Wayland for giggles. Unless it's changed that's what one should see. Update: Here is a screengrab showing Wayland process.

enter image description here

  • 7
    I don't see a wayland process in your screengrab; the line you've highlighted is a dbus-launch process, starting a session called gnome-wayland. – Stephen Kitt May 16 '15 at 21:30
0

Well you could also just check if applications are running in their wayland native form:

cd /usr/bin
ldd $application_name | grep wayland

Furthermore, to check which binaries have wayland support you could try:

cd /usr/bin
find . | xargs ldd | grep wayland -B 55

The above is not really very clean but it works. You can further pipe it to a file and then use vim to navigate.

cd /usr/bin
find . | xargs ldd | grep wayland -B 55 >> candidates
vim candidates
# Use vi movement

The -B flag stands for before and helps to print the binary name.

You could check this for more details. This answer adapted from this question.

HaoZeke
  • 161