cascadium / wsl-windows-toolbar-launcher

Adds linux GUI application menu to a windows toolbar
MIT License
1.21k stars 50 forks source link

Cannot launch through task menu #4

Closed shelper closed 4 years ago

shelper commented 4 years ago

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

C:\WINDOWS\system32\wscript.exe C:\Users\username.config\wsl-windows-toolbar-launcher\metadata\WSL\silent-launcher.vbs "C:\Windows\System32\wsl.exe -d Ubuntu -u username -- source ~/.bashrc ; xfce4-about" when i click it (or run in cmd.exe), nothing happens, but if i enter wsl bash and run xfce4-about, it works.

fquinner commented 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
shelper commented 4 years ago

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.

fquinner commented 4 years ago

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.

shelper commented 4 years ago

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
fquinner commented 4 years ago

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.

shelper commented 4 years ago

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. Snipaste_2020-04-16_17-00-22

and my default is set to bash by chsh

fquinner commented 4 years ago

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"
shelper commented 4 years ago

humm. it suddenly seems to work .... i have no idea what happened......

fquinner commented 4 years ago

Yay? As in the shortcuts launch now or as in DISPLAY is printed properly now with those two (slightly different) commands?

shelper commented 4 years ago

the shortcuts launch works .... the print DISPLAY also works... i have no idea what happened ...:-p

fquinner commented 4 years ago

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!

shelper commented 4 years ago

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....

fquinner commented 4 years ago

Glad you got sorted anyway - enjoy!