#!/bin/sh ########################################################################### # Output DISPLAY and XAUTHORITY for the current user's X screen. # A root user can then use those to access the user's display. # Usage: export $(get-display) # # Copyright (C) 2012 Alkis Georgopoulos # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # On Debian GNU/Linux systems, the complete text of the GNU General # Public License can be found in `/usr/share/common-licenses/GPL'. ########################################################################### exit_if_found() { # Check if DISPLAY/XAUTHORITY are valid. # XAUTHORITY may even be empty, in which case it must not be exported. test -n "$DISPLAY" || return export DISPLAY XAUTHORITY test -n "$XAUTHORITY" || unset XAUTHORITY if xwininfo -root -size >/dev/null 2>&1; then echo "DISPLAY=$DISPLAY" test -n "$XAUTHORITY" && echo "XAUTHORITY=$XAUTHORITY" exit 0 else unset DISPLAY XAUTHORITY fi } # Plan A: check if the variables are already set exit_if_found # Plan B: check if we can get the info from some running process for p in $(pgrep -x 'ldm|gdmgreeter|kdm_greet|lxdm-greeter-gt|dbus-daemon'); do # The first DISPLAY= is only there to prevent a possible syntax error export DISPLAY="$DISPLAY" $(tr '\0' '\n' 2>/dev/null < /proc/$p/environ | egrep '^DISPLAY=|^XAUTHORITY=') exit_if_found done # Plan B2 (by Canx https://gist.github.com/Canx/db2692a29e399ee7e2c97aebd837f4c0 ): test sddm Xauthority file if not logged in XAUTHORITY="$(/usr/bin/find /var/run/sddm/ -type f)" DISPLAY=":0" exit_if_found # Plan C: try ck-list-sessions while read var equals value; do case "$var" in Session*) unset USER DISPLAY XAUTHORITY ;; unix-user) value=${value%\'} USER=${value#\'} ;; x11-display) value=${value%\'} DISPLAY=${value#\'} if [ -n "$DISPLAY" ]; then XAUTHORITY="$(getent passwd "$USER" | cut -d: -f6)/.Xauthority" exit_if_found fi ;; esac done <&2 echo "DISPLAY= XAUTHORITY=" exit 1