Sunday, June 18, 2023

Playing Warhammer: Vermintide 2 on Steamdeck

Due to this game using Easy Anti-Cheat (EAC) and EAC having limited support for Linux, the game does not work out-of-the-box on the Steamdeck. Here are the tweaks I had to do to get it to work. Before diving in, make sure to read the note at the very end of this post about preserving settings.

  • Delete Vermintide 2 compatdata directory  (It's here: ~/.local/share/Steam/steamapps/compatdata/552500)
  • Do 'Verify game files' using the Steam client
  • Delete WebView2Loader.dll and MicrosoftEdgeWebview2Setup.exe. ( By default they are both here: ~/.local/share/Steam/steamapps/common/Warhammer Vermintide 2/launcher. But the location is slightly different if you have installed the game on an SD card. You can find the exact location using Browse local files option in the Steam client. See the screenshot below.)
  • Then run the game!

Note: The user settings and game saves are at the following locations. Back them up before deleting the compactdata directory if you don't want to lose them.

  • .../steamapps/compatdata/552500/pfx/drive_c/users/steamuser/AppData/Roaming/Fatshark/Vermintide\ 2/user_settings.config
  • ../steamapps/compatdata/552500/pfx/drive_c/users/steamuser/AppData/Roaming/Fatshark/Vermintide\ 2/save_data.sav
You can find more details on the ProtonDB page of the game here.

Monday, February 20, 2023

Fixing SteamDeck Warframe installation (missing executable) error

When I tried installing Warframe on SteamDeck, I encountered this problem. It appeared to download several GBs of content for some time and run Vulcan shaders. However, when the installation finished, the game didn't launch.

When I checked the game directory (~/.local/share/Steam/steamapps/common/Warframe/) it was empty. When the game was launched in Desktop mode, it complained ~/.local/share/Steam/steamapps/common/Warframe/Tools/launcher.exe was missing. (Of course, because the directory is empty.)

'An error occurred while updating Warframe (missing executable)' Photo courtesy: /u/mylastnameschampion (

Here's how I fixed it and got Warframe to work on SteamDeck:

I added the game to my library on Epic Games Store. Then, downloaded Warframe using the Heroic Games Launcher. But note that I didn't launch it. (I wanted to run the steam version of the game, not Epic version). Heroic had downloaded several MBs and now there was a inside ~/Games/Heroic/Warframe/. I then extracted that zip into ~/.local/share/Steam/steamapps/common/Warframe/. Voila! now there's tools/launcher.exe. When you launch the game on Steam now it will start.

The game is very optimized. It ran smoothly. The only minor annoyance is that I have to log in to Warframe account in the launcher every time.

Tuesday, October 25, 2022

Some Tips and Tricks for the Steam Deck

Steam Deck is a remarkable device. In the last few months, I had a delightful time clearing up the backlog of games I had in my Steam library, Epic Games store, EA, and Ubisoft. There were times when I encountered issues, however, and here are some valuable tools that I used to customize the Steam Deck in various ways. I will keep updating the following list as I come across new ones along the way.

How to play non-steam games

For Epic Games and GOG, I had success using Heroic Games Launcher. I heard some positive reviews about Lutris as well. For EA and Ubisoft games, I use the Origin Launcher and Ubisoft Launcher respectively.

Where to find the Origin installer

Since SteamOS is Linux-based the EA website doesn't allow downloading the Origin client from the web browser on Steam. However, you can directly download the original windows client hosted on EA Origin servers from here: (Don't use the installers hosted on websites not affiliated with EA Origin due to security risks.)

P.S. EA has now introduced a revamped EA app which can be found here and recommends using it instead. 

How to add non-steam game shortcuts to Steam game mode

Heroic Bash Launcher: Works for games that are installed with Heroic Games Launcher. This needs some command-line experience but conveniently takes care of downloading artwork for the shortcuts as well.

BoilR: Supports multiple game platforms (not only Heroic) but requires a little tweaking to get the artwork downloading to work. (i.e. by adding a SteamGridDB API key)

How to add custom artwork for non-steam games

If you didn't get custom artwork automatically added using the above tools, you can use SteamGridDB in conjunction with the SGDBoop tool. If SGDBoop is not working based on their instructions, you may have to run this command: systemctl restart --user xdg-desktop-portal

Other miscellaneous tips and tricks

  • One of the disadvantages of playing non-steam games over steam games is that non-steam games do not automatically download pre-compiled shader caches. However, to prevent non-steam games from lagging too far behind while shader caches are being compiled during games, you can use the DXVK_ASYNC=1 launcher option.
  • If you are concerned about shader caches taking too much space on the Steam Deck (as observed by the growth of the Other section in storage settings) use shader cache killer to selectively delete the cache directories that are no longer needed.
  • Install ProtonUp-Qt to manage multiple versions of Wine and Proton as needed by different games
  • Install Protontricks to further tweak Proton and install additional libraries required by certain games
  • Install Flatseal to manage Flatpak permissions (e.g., for installing non-steam games to the microSD card)
  • Check out the very helpful r/steamdeck subreddit if you need help with other steam deck issues.

Tuesday, May 26, 2020

Rooting Lenovo TAB 2 A7-20F on Linux

Lenovo TAB 2 A7-20F is a nice sturdy tablet that was very handy for me in the past to read the occasional article or ebook. However, it has been gathering up dust on my desk recently because it was slowing down. So I thought of giving it fresh life, removing the bloatware which came pre-installed with it.

In terms of specs, this comes with Android 4.4 (KitKat) and a Mediatek MT8127 chipset. Not stellar specs, but decent enough to get some work done. For rooting this, I was primarily looking for a way to do it using just a Linux laptop and a USB cable. So here are the steps I followed:
  • Do a hard reset of the tablet
    • For this, you need to restart the device to Bootloader by holding Volume up + Power keys when the tablet is starting. Then you'll come to this menu in Chinese.
      Chinese Bootloader menu of Lenovo TAB2 A7-20F
    • Here you need to select the clear eMMC (清除 eMMC) option by navigating to it via volume down key and selecting it via the power key.
  • Download SP Flash Tool for Linux from here
  • Then follow the steps in this XDA thread to install TWRP. (You'll have to run SP Flash Tool with root privileges.)
  • Copy the SuperSU zip to the tablet via USB.
  • Reboot the table to recovery mode by holding Volume up + Volume Down + Power keys when the tablet is starting. This should boot to TWRP.
  • Take a back up of system, data, and boot partitions via TWRP, just in case if you need to restore the stock ROM in the future.
  • While inside TWRP, install SuperSU by going to 'Install' -> 'Install ZIP' and selecting the copied SuperSU zip.
  • Now when you boot into the normal mode, you'll see SuperSU has been installed.
  • You can verify it by opening a terminal and typing su.
Success! Root access in Tab2 A7-20F
After this, I used Titanium Backup to freeze/uninstall the bloatware.

Here are some other threads if you plan on going beyond the new ROM and installing a new one.

Friday, January 26, 2018

Using Office365 Mail and Calendar in Linux

For some reason, if your school or workplace is using Microsoft Office365/Outlook for all communication, you can configure your Linux e-mail client to support most of those features such as e-mail, calendar, and contacts working. Sometime back, support for Microsoft Exchange-based services was very buggy in open-source e-mail clients like Thunderbird and Evolution. But they have come a long way since then. Here are the steps I followed to get my University e-mail working in Evolution.

Step 1: First install the software needed.
sudo apt-get install evolution evolution-ews 

Step 2: (Optional) If you are not using a GNOME-based Desktop Enivronment you need to install following dependencies as well. (For example, I'm using XFCE with i3WM)
sudo apt-get install gnome-online-accounts gnome-control-center

Step 3: Then start the gnome-contol-center. If you're not on GNOME, you might have to trick the Desktop to make it believe you're on GNOME like this:
env XDG_CURRENT_DESKTOP=GNOME gnome-control-center

 Step 4: Click on Online Accounts and add your Microsoft Exchange details. (Here use as the server.)

Step 5: Go to Evolution. Add an identity.

Step 6: In Receiving e-mail section, use as the Host URL. Then when you click the Fetch URL button, OAB URL should be auto-completed.

Step 7: Once you restart, everything should be synced.

Thursday, January 11, 2018

Weather info in i3bar with i3status

Update: now has a new one line format. So some of the below logic for parsing the output is no longer required.

I recently started using i3wm because it is light-weight, keyboard-friendly and uses the screen real-estate efficiently.  I customized i3bar and i3status (which came installed with i3) to show system information and date/time. But there was no out-of-the-box feature to get weather information from i3 status.

I wanted a simple solution that does not require installing an external program like i3blocks, conky, dzen2, xmobar or lemonbar. It had to also preserve colors I had configured for the i3bar output. So I came up with this simple solution.

Step 1: Setup a cron job to retrieve weather information every 5 minutes and store it in a temporary file. (This is because only allows 1000 API calls per day and the weather information is not frequently updated in the server.)

*/5 * * * * curl -s | head -n 7 > ~/.weather.cache

Step 2: Write a shell script to add this information to i3status data.

Step 3: The ~/.config/i3/config file needs to be updated for the status_command to pipe through this script, as follows.

bar {
        status_command .config/i3/
        tray_output primary

Step 4: The ~/.i3status.conf file should also be updated to change the output to the JSON format.

general {
        output_format = "i3bar"
        colors = true
        interval = 5

This is how it looks like in the end.

 You can find more information from the following links.

Tuesday, May 26, 2015

Few tips on tweaking Elementary OS for Crouton

Activating Reverse Scrolling

 If you're a fan of reverse scrolling (or natural scrolling as some people call it) in Mac OS X, you can activate the same in Elementary OS by going to System Settings > Tweaks > General > Miscellaneous, and turn on Natural Scrolling. But I noticed in Elementary OS Luna for crouton, that setting resets to false after restarting. You can fix it by adding the following command as a startup application (System Settings > Startup Applications > Add)
/usr/lib/plugs/pantheon/tweaks/ true

Getting back the minimize button

Method 1: Start dconf-editor and go to org > pantheon > desktop > gala > appearance and change "button layout" to re-order buttons in the window decoration. Eg: "menu:minimize,maximize,close"

Method 2: Run the following command.
gconftool-2 --set /apps/metacity/general/button_layout --type string ":minimize:maximize:close"

Note: To install dconf-editor use the command:
sudo apt-get install dconf-tools

To install elementary-tweaks use the command:
sudo add-apt-repository ppa:mpstark/elementary-tweaks-daily
sudo apt-get update
sudo apt-get install elementary-tweaks