Biont / sway-launcher-desktop

TUI Application launcher with Desktop Entry support. Made for SwayWM, but runs anywhere
GNU General Public License v3.0
613 stars 29 forks source link

Env vars in .desktop files are not handled properly #2

Closed Biont closed 5 years ago

Biont commented 5 years ago

I will just copy/paste the report of @nstickney here

PROBLEM: Some *.desktop files include not just the command, but also environment variables, in the Exec line, i.e. "Exec=env GDK_BACKEND=x11 /opt/minecraft-launcher/minecraft-launcher". This is apparently a standard pattern, but swaymsg -t command "$command" leads to Error: Unknown/invalid command 'env'. I tried changing the Exec line to /usr/bin/env, but I get a similar message: Error: Unknown/invalid command '/usr/bin/env'.

SOLUTION: I changed the way the $command variable is formatted by removing the line break and replacing it with a space. Then, when running the command, I cut out env using bash string substitution.

EDIT: Note, I also changed the ordering of the $DIRS hoping to make the ~/.local entry override the others, but I don't believe it has any effect.


Personal note: I believe part of the problem is that awk will see additional columns in an Exec= line like this: Exec=env GDK_BACKEND=x11 /opt/minecraft-launcher/minecraft-launcher since there is one more equals sign in there which we are using as a delimiter

joefiorini commented 5 years ago

@nstickney You can also fix the newline by using printf instead of print as I'm doing in #1.

Biont commented 5 years ago

@nstickney From what I can tell, this looks good now after the changes made by @joefiorini. The minecraft-launcher.desktop file now produces the following command: cd /opt/minecraft-launcher/ && env GDK_BACKEND=x11 /opt/minecraft-launcher/minecraft-launcher

I added a test case for this specific issue and you can debug things more easily using ./sway-launcher-desktop.sh generate-command /path/to/application.desktop

nstickney commented 5 years ago

@Biont the command as you wrote it actually fails for me:

[bash 5.0.11] $ swaymsg -t command "cd /opt/minecraft-launcher/ && env GDK_BACKEND=x11 /opt/minecraft-launcher/minecraft-launcher"
Error: Unknown/invalid command 'cd'

Is no one else seeing this behavior? swaymsg -t command doesn't seem to allow shell built-ins for me.

nstickney commented 5 years ago

swaymsg exec seems to fix it. This issue can be closed.

Biont commented 5 years ago

Great. Thanks for your input @nstickney