diff --git a/neofetch b/neofetch index 764a8415..f53cd9b8 100755 --- a/neofetch +++ b/neofetch @@ -1821,35 +1821,43 @@ get_wm() { *) ps_flags=(-e) ;; esac - if [[ $WAYLAND_DISPLAY ]]; then - wm=$(ps "${ps_flags[@]}" | grep -m 1 -o -F \ - -e arcan \ - -e asc \ - -e clayland \ - -e dwc \ - -e fireplace \ - -e gnome-shell \ - -e greenfield \ - -e grefsen \ - -e kwin \ - -e lipstick \ - -e maynard \ - -e mazecompositor \ - -e motorcar \ - -e orbital \ - -e orbment \ - -e perceptia \ - -e rustland \ - -e sway \ - -e ulubis \ - -e velox \ - -e wavy \ - -e way-cooler \ - -e wayfire \ - -e wayhouse \ - -e westeros \ - -e westford \ - -e weston) + if [[ -O "${XDG_RUNTIME_DIR}/${WAYLAND_DISPLAY:-wayland-0}" ]]; then + if tmp_pid="$(lsof -t "${XDG_RUNTIME_DIR}/${WAYLAND_DISPLAY:-wayland-0}" 2>&1)" || + tmp_pid="$(fuser "${XDG_RUNTIME_DIR}/${WAYLAND_DISPLAY:-wayland-0}" 2>&1)"; then + wm="$(ps -p "${tmp_pid}" -ho comm=)" + else + # lsof may not exist, or may need root on some systems. Similarly fuser. + # On those systems we search for a list of known window managers, this can mistakenly + # match processes for another user or session and will miss unlisted window managers. + wm=$(ps "${ps_flags[@]}" | grep -m 1 -o -F \ + -e arcan \ + -e asc \ + -e clayland \ + -e dwc \ + -e fireplace \ + -e gnome-shell \ + -e greenfield \ + -e grefsen \ + -e kwin \ + -e lipstick \ + -e maynard \ + -e mazecompositor \ + -e motorcar \ + -e orbital \ + -e orbment \ + -e perceptia \ + -e rustland \ + -e sway \ + -e ulubis \ + -e velox \ + -e wavy \ + -e way-cooler \ + -e wayfire \ + -e wayhouse \ + -e westeros \ + -e westford \ + -e weston) + fi elif [[ $DISPLAY && $os != "Mac OS X" && $os != "macOS" && $os != FreeMiNT ]]; then type -p xprop &>/dev/null && {