Skip to content

Instantly share code, notes, and snippets.

@martinlabate
Last active May 4, 2024 15:30
Show Gist options
  • Star 18 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save martinlabate/c4e6f08880a009f88dc1edaa4c6cd87a to your computer and use it in GitHub Desktop.
Save martinlabate/c4e6f08880a009f88dc1edaa4c6cd87a to your computer and use it in GitHub Desktop.
How to run BlishHUD on Steam Deck

Getting BlishHUD to work correctly on the Deck

Intro

This guide will show you how to use BlishHUD while playing GuildWars2 on the Steam Deck, but requires you to launch the game from the Steam Desktop without BigPicture.

Requirements

  • Guild Wars 2 installed via Steam
  • Blish HUD downloaded

Configure the Deck

First, you need to be on the Deck's desktop. To get there press the STEAM key, go to Power, and press Switch to Desktop

Once the desktop loads go to Settings -> Display Configuration -> Compositor

Here we disable the Allow applications to block compositing option and click apply.

Screenshot of the Compositor setting.

This setting makes the composition of windows (the ability to link 2 or more windows) impossible.


Then, back in Settings, go to Windows Management -> Window Rules and click add new. We will create two rules, one for BlishHUD and one for GuildWars2.

The BlishHUD rule should look like this: Screenshot of the BlishHUD Window Rule. Here in the BlishHUD rule, we make the window transparent by reducing its opacity, and we make it unable to get focus so our inputs go directly to Guildwars and are not interrupted by Blish.


And the Guild Wars rule should look like this: Screenshot of the Guildwars Window Rule. In the GuildWars rule, we make it be below other windows so Blish can be shown on top of it.


Now the last config step, we want the taskbar to hide so it does not show on top of our game. To do so, we right-click the taskbar, click Enter Edit Mode, and then in More Options, we select Auto Hide in the Visibility section

Copy BlishHUD to the correct location

Extract BlishHUD and move the extracted folder to the GuildWars2 folder. To find where the game is installed we can follow these steps:

  • Open Steam in desktop
  • Select GuildWars
  • Click the gear icon
  • Select Manage
  • Click Browse local files

Game Properties

To make BlishHUD launch and work properly when we play GuildWars we need to add some launch options.

  • Open Steam in desktop
  • Select GuildWars
  • Click the gear icon
  • Click Properties

General Tab

Here in the General tab, in LAUNCH OPTIONS we want to paste the following:

BHDIR=$(realpath "$(find -iname "Blish.HUD*")"); rm -f BlishHUD; ln -s "$BHDIR" BlishHUD; rm -f BlishHUD/BlishHUD.exe; ln -s "$BHDIR/Blish HUD.exe" BlishHUD/BlishHUD.exe; echo -e "@echo off\nstart Gw2-64.exe -provider Steam -autologin\nping -n 60 127.0.0.1>nul\ncd BlishHUD\nstart BlishHUD.exe\nexit" > gw2.bat; DXVK_ASYNC=1 MANGOHUD=0 eval $(echo %command% | sed "s/Guild Wars 2\/Gw2-64\.exe.*$/\"Guild Wars 2\"\/gw2.bat/")

This bit of code was made by another user, here is the source.

It does the following:

  • Sets the variable BHDIR to the path of the Blish HUD directory using the realpath command and the find command to locate the directory.
  • Removes any existing BlishHUD symbolic link.
  • Creates a new symbolic link named BlishHUD that points to the Blish HUD directory.
  • Removes any existing BlishHUD.exe file in the BlishHUD directory.
  • Creates a new symbolic link named BlishHUD.exe that points to the Blish HUD.exe file in the Blish HUD directory.
  • Creates a new batch file named gw2.bat that contains some commands to run Guild Wars 2 and Blish HUD. The batch file starts Guild Wars 2 with Steam as provider and autologin enabled. Then it waits for 60 seconds before starting Blish HUD. Finally, it exits.
  • Sets two environment variables (DXVK_ASYNC=1 and MANGOHUD=0) and evaluates %command%, which is a placeholder for the command line arguments passed to Guild Wars 2. The result of this evaluation is used as the argument for the sed command, which replaces the original path to Gw2-64.exe with the path to gw2.bat.

The MANGOHUD variable can be changed to 1 to show frame rate and CPU, GPU, and Ram usage in-game.

The -provider Steam part can be changed to -provider Portal if you want to use an Anet Account to log in.

We need Guild Wars to be running before we launch BlishHUD, that's why we wait 60 seconds before launching it. This can be lowered if you feel it is too long.

Compatibility tab

Now in the Compatibility tab, enable Force the use of a specific Steam Play compatibility tool and select the latest GE Proton version. To get GE-Proton you can follow this guide

GuildWars2 Settings

Blish will be shown on top of Guild Wars but with certain transparency, not full, so the game will look darker. To mitigate this we can play with the transparency setting in the BlishHUD window rule and the Gamma config in the Display GuildWars option, I use it like this. Screenshot of the Guildwars Gamma settings.

@Chazay
Copy link

Chazay commented Aug 16, 2023

I followed all of your steps and the game is not launching. Proton 8.03. Is it still functional?

@jimmon89
Copy link

I followed all of your steps and the game is not launching. Proton 8.03. Is it still functional?

I couldn't get the launch options in the OP to work

is the Blish HUD.exe and the other files supposed to end up in the root game folder? or their own subfolder? --EDIT-- a subfolder named BlishHUD, correct? --EDIT-2-- F$@&in' success! it was the launch options for steam that made my whole setup buggered to heck and back i had created a simple Autohotkey script that i compiled to an EXE, then renamed the existing Gw2-64.exe to Gw2.exe and named the compiled AHK script to Gw2-64.exe realistically the script could be refined far further, but this works for me --EDIT-3-- Now the script takes your existing launch options and passes them on to the real guild wars EXE

Run, "%A_ScriptDir%\Gw2.exe" %A_Args%, "%A_ScriptDir%"
Sleep 60000
Run, "%A_ScriptDir%\BlishHUD\Blish HUD.exe", "%A_ScriptDir%\BlishHUD\"

i had to create an EXE from my code block above using AutoHotkey to get blish hud to launch properly

@Chazay
Copy link

Chazay commented Aug 17, 2023

I followed all of your steps and the game is not launching. Proton 8.03. Is it still functional?

I couldn't get the launch options in the OP to work

is the Blish HUD.exe and the other files supposed to end up in the root game folder? or their own subfolder? --EDIT-- a subfolder named BlishHUD, correct? --EDIT-2-- F$@&in' success! it was the launch options for steam that made my whole setup buggered to heck and back i had created a simple Autohotkey script that i compiled to an EXE, then renamed the existing Gw2-64.exe to Gw2.exe and named the compiled AHK script to Gw2-64.exe realistically the script could be refined far further, but this works for me --EDIT-3-- Now the script takes your existing launch options and passes them on to the real guild wars EXE

Run, "%A_ScriptDir%\Gw2.exe" %A_Args%, "%A_ScriptDir%"
Sleep 60000
Run, "%A_ScriptDir%\BlishHUD\Blish HUD.exe", "%A_ScriptDir%\BlishHUD\"

i had to create an EXE from my code block above using AutoHotkey to get blish hud to launch properly

I'm sorry for asking the noob questions but the codeblock reads like the launch options in the steam right? Can you point me in the right direction for "compiling an exe with autohotkey scripts". Or do I have this wrong and the autohotkey script is the codeblock you shared and then I should use OP's script in my launch options?

@jimmon89
Copy link

jimmon89 commented Aug 18, 2023

Autohotkey Documentation
How to compile the script
the easiest way to run autohotkey would be to open a terminal and depending on your particular distro you would install wine and winetricks
then in your terminal run

wintricks autohotkey
cd "~/.wine/drive_c/Program Files/AutoHotkey/Compiler/"
wine ./Ahk2Exe.exe

1
2
3
4
5
6
7

@aviditas-security
Copy link

I got the AHK route to work but the GW2 launcher is prompting for the arenanet login instead of the steam account passthrough. Without a 'sign-in through Steam' button, I can't login with my current account. I am fairly comfortable with AHK, but I am not sure where to place the launch configuration options in that script. "-provider Steam -autologin" I tried a few options and nothing stuck, plus the documentation from AHK is a bit sparce when it comes to unusual OS situations.

I attempted to split that out into a bat file that would then start the AHK for Blish but that was very unsuccessful.

Side note, I wrote and converted the AHK file to an exe on my laptop then downloaded it to my Steam Deck to avoid having to deal with wine/winetricks. That was much easier to do. Once I have this working, I'll link through the file repo for others to use.

@jimmon89
Copy link

jimmon89 commented Aug 19, 2023

I got the AHK route to work but the GW2 launcher is prompting for the arenanet login instead of the steam account passthrough. Without a 'sign-in through Steam' button, I can't login with my current account. I am fairly comfortable with AHK, but I am not sure where to place the launch configuration options in that script. "-provider Steam -autologin" I tried a few options and nothing stuck, plus the documentation from AHK is a bit sparce when it comes to unusual OS situations.

I attempted to split that out into a bat file that would then start the AHK for Blish but that was very unsuccessful.

Side note, I wrote and converted the AHK file to an exe on my laptop then downloaded it to my Steam Deck to avoid having to deal with wine/winetricks. That was much easier to do. Once I have this working, I'll link through the file repo for others to use.

have you set your launch options on steam?
like
-provider Steam -autologin -ignorecoherentgpucrash
image

@jimmon89
Copy link

jimmon89 commented Aug 22, 2023

i created an exe that runs a batch file with the same base name and passes the arguments it's given to the batch file
i included a sample batch file
Gw2-64.exe
like if the exe i gave is named Gw2-64.exe, it looks for a batch file named Gw2-64.bat
--EDIT--
currently trying to get a github action that auto-uploads artifacts as releases working
--EDIT-2--
success!
here it is!
Latest Version

@squiz-git
Copy link

-provider Steam -autologin -ignorecoherentgpucrash

I'm currently facing the same issue. I'm using the Python / .bat jimmon put above however I am just seeing an ArenaNet login page with no steam page. I've set my launch options in steam and tried setting them in the bat file however had no success.

image
image

@jimmon89
Copy link

jimmon89 commented Sep 20, 2023

-provider Steam -autologin -ignorecoherentgpucrash

I'm currently facing the same issue. I'm using the Python / .bat jimmon put above however I am just seeing an ArenaNet login page with no steam page. I've set my launch options in steam and tried setting them in the bat file however had no success.

image image

you have the quotes in the wrong places on the line with START "" ".\Gw2.exe
and if you're going to add the launch options directly to the batch file, then you don't need the %*
it should be START "" ".\Gw2.exe" -provider Steam -autologin -ignorecoherentgpucrash
not START "" ".\Gw2.exe -provider Steam -autologin -ignorecoherentgpucrash" %*
the quotes should be around .\Gw2.exe not .\Gw2.exe -provider Steam -autologin -ignorecoherentgpucrash

@squiz-git
Copy link

START "" ".\Gw2.exe" -provider Steam -autologin -ignorecoherentgpucrash

Thanks, that's working well. I actually just made it start another .bat file and opened in (not that familiar with windows bash files) but this is alot better.

@jimmon89
Copy link

Thanks, that's working well. I actually just made it start another .bat file and opened in (not that familiar with windows bash files) but this is alot better.

all good, glad to hear it's working now
cheers!

@Cathie44
Copy link

Cathie44 commented Oct 21, 2023

Hello!

I tested this method on Nobara linux, i know it is not made for any other linux version except for steam deck, but suprisingly, it got as far as the application actually launching :D, tho, they run in two seperate windows, wich i think is intended, but the background of blishhud is black.

Now i suspect that this is solved using this "window rules" thingy configured earlier int his guide, tho i cannot find it on my OS...

can anybody help me?
Screenshot from 2023-10-21 17-55-16

@fmazur
Copy link

fmazur commented Oct 21, 2023

Hello!

I tested this method on Nobara linux, i know it is not made for any other linux version except for steam deck, but suprisingly, it got as far as the application actually launching :D, tho, they run in two seperate windows, wich i think is intended, but the background of blishhud is black.

Now i suspect that this is solved using this "window rules" thingy configured earlier int his guide, tho i cannot find it on my OS...

can anybody help me? Screenshot from 2023-10-21 17-55-16

Running it is easy but making it pass through input is not. Kwin compositor has an option to force not accepting focus for given application which makes it actually work. The other thing is opacity which you can do.
Find what compositior you are using then tell it for given window to be at specified opacity. You can check window class with xprop.
From what I've seen people only been able to successfully run BlishHUD with kwin compositor only.

@Cathie44
Copy link

Cathie44 commented Oct 21, 2023

Hello!
I tested this method on Nobara linux, i know it is not made for any other linux version except for steam deck, but suprisingly, it got as far as the application actually launching :D, tho, they run in two seperate windows, wich i think is intended, but the background of blishhud is black.
Now i suspect that this is solved using this "window rules" thingy configured earlier int his guide, tho i cannot find it on my OS...
can anybody help me? Screenshot from 2023-10-21 17-55-16

Running it is easy but making it pass through input is not. Kwin compositor has an option to force not accepting focus for given application which makes it actually work. The other thing is opacity which you can do. Find what compositior you are using then tell it for given window to be at specified opacity. You can check window class with xprop. From what I've seen people only been able to successfully run BlishHUD with kwin compositor only.

I'm using gnome-shell v43.2

i've already done some research, but there seems to be nothing comparable in gnome...

@fmazur
Copy link

fmazur commented Oct 21, 2023

@Cathie44
So you need to reproduce what kwin does in gnome-shell.
Mainly speaking Focus Stealing Prevention and Active/Inactive Opacity
image

@Cathie44
Copy link

@fmazur Thanks for the help, i'll try to find a way, now i know what to search for :D

@Cathie44
Copy link

@fmazur so after a lot of trying i'm seeing no option to getting this working in gnome... tho, thanks to my OS, switching desktop enviroments is quite easy, now running KDE and trying to replicate the window settings there...

@Cathie44
Copy link

so now it works! :D With one small but big issue...

the cursor is not captured inside the gamy anymore, meaning that if i grab the camera, the cursor won't stay at it's place when releasing the camera, instead, the cursor travels as i drag the camera and even out of the game window...
I'm using a multi-monitor setup btw

@alexandra-erickson
Copy link

alexandra-erickson commented Oct 25, 2023

Hi! I was able to successfully install and play on the Steam Deck for a couple hours last night, until it decided that it wouldn't pass through keyboard commands. I was able to play for a while with the Steam Deck docked using kbm, and then disconnected and played in controller mode (still in desktop mode). I restarted a few times (game and Steam Deck) and it's still doing it even docked with kbm. It's like Blish is blocking keyboard pass through. Also, if I have the cursor in a text field in another window (ie: web browser), click on GW2 to go back to playing, used WSAD to move, and the text shows up in that text field. However, clicking with the mouse on buttons or windows in GW2 works. The only settings I'd updated were the controller mapping, but even with resetting that it still won't work. Any thoughts? Thanks for the help.

@Angrod
Copy link

Angrod commented Dec 20, 2023

Are there any changes that need to be made to the Launch Options path or should I just be able to paste in front of -provider Portal? Could be that I need to double check some settings but when I added the launch options it would try to launch and exit, without them launches fine.

@jimmon89
Copy link

jimmon89 commented Dec 20, 2023

are you following the General Tab instructions?
the provided bit of launch options in particular.
or are you trying my instructions from further down?

@Angrod
Copy link

Angrod commented Dec 20, 2023

are you following the General Tab instructions? the provided bit of launch options in particular. or are you trying my instructions from further down?

I've only tried the General Tab instructions as of now

@jimmon89
Copy link

i had the same issue with those instructions
that's what lead me to make a proxy exe and an easy to edit batch file to go along with it

@jimmon89
Copy link

jimmon89 commented Dec 20, 2023

it's all open source if you have the know-how to look through the python source and compile it yourself
heck, if you can do it better i invite you to do so XD

@nlfog
Copy link

nlfog commented Dec 20, 2023

I know these instructions are for the Steamdeck Desktop mode, but is there any reason why this wouldn't work for regular linux desktop system?

I'm running KDE Plasma on Arch, and followed all the instructions in this post. I am able to get Blish to run with the game, and even show things like markers, etc. But, as another user here pointed out, when the Blish HUD is overlayed on the game, the game no longer takes keyboard input, so I can't move other than with mouse clicks. If I minimize the HUD, keyboard works again. I've double checked the Window Rules in Plasma, and they're exactly like this post. I feel I'm like 90% of the way there, and just need to get over this last hump.

@Angrod
Copy link

Angrod commented Dec 21, 2023

i had the same issue with those instructions that's what lead me to make a proxy exe and an easy to edit batch file to go along with it

I ended up getting the original launch options to work. I had to rename the BlishHUD folder as "Blish.HUD" and realized I had "HUD" not capitalized in the window rule. I'm using an ANet account so also changed the -provider flag within the command. It launched GW, logged in and I had to login as my character or the opacity wouldnt work properly but I let the .bat file it makes run and that did the trick

@Landrovan
Copy link

Landrovan commented Jan 7, 2024

I think I found a reason for the command line to work or not. Is the $(echo | sed) at the end.
Running steam in a console, when starting a game, the command is shown in the output. I can see that each command start with : "/bin/sh -c ". Then the whole command (with proton and Gw2-64.exe in this case).
So, with the replace of the command line, we end with (really shorten line): "/bin/sh -c $(echo proton Gw2-64.exe | sed ).

So I try to do the same think in a normal command line with a really simpler test. I did "/bin/sh -c $(echo ls -l)". It did NOT work. I only see the output of "ls", NOT "ls -l". So there is a problem withe the $() when used after "sh -c". At least on my computer.
I found that /bin/sh is just a link to bash. OP or those that make it work: what shell do you use (and /bin/sh link to)?

@jabuxas
Copy link

jabuxas commented Mar 18, 2024

by the way, it works on hyprland. here are the rules you need:

windowrulev2=float, title:^(Blish HUD)$
windowrulev2=center, title:^(Blish HUD)$
windowrulev2=nofocus, title:^(Blish HUD)$
windowrulev2=noinitialfocus, title:^(Blish HUD)$
windowrulev2=noborder, title:^(Blish HUD)$
windowrulev2=pin, title:^(Blish HUD)$
windowrulev2=opacity 0.2 0.1, title:^(Blish HUD)$
windowrulev2=workspace 9 silent, title:$(Blish HUD)$

windowrulev2=stayfocused, title:(Guild Wars 2)
windowrulev2=forceinput, title:(Guild Wars 2)

i had to use xembedsniproxy for tray icons because wine systray fucks it all up.

@Sonwon1
Copy link

Sonwon1 commented May 3, 2024

@martinlabate

I noticed there is a difference in the video and the screenshots for the Blish HUD window rules, one has Force stealing prevention and the video has Focus protection.

@Sonwon1
Copy link

Sonwon1 commented May 4, 2024

I have it working with Lutris, Manjaro and KDE.

Edit: Not working, GW2 window grabs the focus away from everything so you are unable to alt tab out to a different window. ;(

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment