Closed shelper closed 4 years ago
Hi there!
Assuming that "username" is replaced by your usernames in windows and wsl respectively in the actual command, this sounds like an issue with DISPLAY
not being set if you're not in an interactive terminal. When I tested with Ubuntu 16, it had something like this at the top of the .bashrc
before I touched anything:
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
Which meant anything near the bottom to set up DISPLAY
etc didn't get parsed. You can work around this by moving your DISPLAY
exporting logic to above that line in your .bashrc
:
# Set up the X11 forwarding parameters
export DISPLAY=localhost:0
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
You can test if this is the case by running this from cmd.exe
and checking the output of:
wsl.exe -d Ubuntu -- source ~/.bashrc; echo DISPLAY=$DISPLAY
humm., it does not work, even after i put the export command to the first line of ".bashrc" but in interactive mode, it does work... the $DISPLAY is empty yeah, the username is replaced by my username.
If you echo $DISPLAY when in interactive mode, I take it it's fine?
Is this WSL 1? Which distro? Can you share your .bashrc? I'll see if I can see what you're seeing.
i mean in interactive mode $DISPLAY is correctly set, but it is empty when i run wsl.exe -d Ubuntu -- source ~/.bashrc; echo DISPLAY=$DISPLAY
btw, i am using xfce4
## WSL xwindow to use host display
export DISPLAY=$(grep -m 1 nameserver /etc/resolv.conf | awk '{print $2}'):0.0
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
# If not running interactively, don't do anything
#case $- in
# *i*) ;;
# *) return;;
#esac
# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth
# append to the history file, don't overwrite it
shopt -s histappend
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000
# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize
# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar
# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
debian_chroot=$(cat /etc/debian_chroot)
fi
# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
xterm-color|*-256color) color_prompt=yes;;
esac
# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes
if [ -n "$force_color_prompt" ]; then
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
# We have color support; assume it's compliant with Ecma-48
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
# a case would tend to support setf rather than setaf.)
color_prompt=yes
else
color_prompt=
fi
fi
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt
# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
;;
*)
;;
esac
# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias ls='ls --color=auto'
#alias dir='dir --color=auto'
#alias vdir='vdir --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
fi
# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
# Add an "alert" alias for long running commands. Use like so:
# sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\'
's/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
[ -f ~/.fzf.bash ] && source ~/.fzf.bash
Erm, is your user's shell on the system set to bash (check /etc/passwd
and check which shell is associated with your user)?
I just noticed that if it's set to /bin/sh
, you'll get this behaviour.
Failing that, you can add something like:
export DISPLAY=$(grep -m 1 nameserver /etc/resolv.conf | awk '{print $2}'):0.0
echo BASHRC_DISPLAY=$DISPLAY
To your .bashrc
to make absolutely sure the right variable is getting set to the right value there and then.
So i added the line to my .bashrc and it seems the $DISPLAY is get exported.
However, the second command still shows the $DISPLAY is empty
seems my .bashrc
not get sourced for non-interactive mode.
and my default is set to bash by chsh
If you run this, is DISPLAY
printed correctly?
wsl -d Ubuntu -- bash -c "source ~/.bashrc; echo DISPLAY=\$DISPLAY"
And this?
wsl -d Ubuntu -- bash --login -c "source ~/.bashrc; echo DISPLAY=\$DISPLAY"
humm. it suddenly seems to work .... i have no idea what happened......
Yay? As in the shortcuts launch now or as in DISPLAY is printed properly now with those two (slightly different) commands?
the shortcuts launch works .... the print DISPLAY also works... i have no idea what happened ...:-p
Lol yeah have seen some weird caching stuff with WSL before could have been an issue. Maybe try a reboot and make sure it still works! At a guess, maybe changing the shell (if it wasn't bash before) fixed it (because that definitely does break it as I found during testing there). Hopefully you're up and running now at least!
yeah, reboot also works i wonder if the WSL is running some scheduled updates insider and for a while afterward, some environment context got updated and it then works....
Glad you got sorted anyway - enjoy!
I was able to launch gui within WSL shell, but cannot launch it through the task menu, e.g., i found the shortcut in the menu a
.lnk
file with target