<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>DesktopApp on NakuRei's Notes</title><link>https://notes.nakurei.com/en/tags/desktopapp/</link><description>Recent content in DesktopApp on NakuRei's Notes</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>NakuRei</copyright><lastBuildDate>Sun, 13 Sep 2026 16:49:27 +0000</lastBuildDate><atom:link href="https://notes.nakurei.com/en/tags/desktopapp/index.xml" rel="self" type="application/rss+xml"/><item><title>Testing a Linux Tauri App on a Hyper-V Ubuntu VM</title><link>https://notes.nakurei.com/en/post/tauri-deb-test-on-hyperv-ubuntu/</link><pubDate>Sun, 13 Sep 2026 22:43:26 +0900</pubDate><guid>https://notes.nakurei.com/en/post/tauri-deb-test-on-hyperv-ubuntu/</guid><description>&lt;img src="https://notes.nakurei.com/post/tauri-deb-test-on-hyperv-ubuntu/image.webp" alt="Featured image of post Testing a Linux Tauri App on a Hyper-V Ubuntu VM" /&gt;&lt;h2 id="what-is-this"&gt;&#10; What is this&lt;a href="#what-is-this"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Notes on the steps I follow to try out a Tauri app built on a Windows host machine on an Ubuntu virtual machine (VM) running on Hyper-V.&lt;/p&gt;&#10;&lt;h2 id="environment"&gt;&#10; Environment&lt;a href="#environment"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Windows 11 Pro&lt;/li&gt;&#10;&lt;li&gt;Ubuntu VM on Hyper-V: Ubuntu 26.04 LTS&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="preparation"&gt;&#10; Preparation&lt;a href="#preparation"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;h3 id="on-the-windows-host"&gt;&#10; On the Windows host&lt;a href="#on-the-windows-host"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h3&gt;&#10;&lt;p&gt;Build for Linux ahead of time. I use Docker for the build.&#10;As long as you end up with a &lt;code&gt;.deb&lt;/code&gt; file, you are good to go.&lt;/p&gt;&#10;&lt;h3 id="on-the-ubuntu-vm"&gt;&#10; On the Ubuntu VM&lt;a href="#on-the-ubuntu-vm"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h3&gt;&#10;&lt;p&gt;Install an SSH server on the Ubuntu VM.&lt;/p&gt;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt update&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install openssh-server&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; --now ssh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Check the IP address of the Ubuntu VM.&lt;/p&gt;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ip addr&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;The address like &lt;code&gt;172.XX.XX.XX&lt;/code&gt; shown under &lt;code&gt;inet&lt;/code&gt; for &lt;code&gt;eth0&lt;/code&gt; is the VM&amp;rsquo;s IP.&lt;/p&gt;&#10;&lt;h2 id="installing-on-the-vm"&gt;&#10; Installing on the VM&lt;a href="#installing-on-the-vm"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Copy the &lt;code&gt;.deb&lt;/code&gt; file from the Windows host to the Ubuntu VM. The easiest way is to run &lt;code&gt;scp&lt;/code&gt; from the directory that contains the &lt;code&gt;.deb&lt;/code&gt; file.&#10;Replace &lt;code&gt;your-app.deb&lt;/code&gt; with the name of the &lt;code&gt;.deb&lt;/code&gt; file you are copying, &lt;code&gt;username&lt;/code&gt; with the user name on the Ubuntu VM, and &lt;code&gt;172.XX.XX.XX&lt;/code&gt; with the IP address of the Ubuntu VM.&lt;/p&gt;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-filename"&gt;Run on the Windows host&lt;/div&gt;&#10; &#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;scp your-app.deb username@172.XX.XX.XX:/tmp/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;If &lt;code&gt;scp&lt;/code&gt; asks &lt;code&gt;Are you sure you want to continue connecting (yes/no/[fingerprint])?&lt;/code&gt;, answer &lt;code&gt;yes&lt;/code&gt;.&#10;It then prompts for a password, so enter the login password of the Ubuntu VM.&lt;/p&gt;&#10;&lt;p&gt;Once the copy succeeds, you can confirm it with the &lt;code&gt;ls&lt;/code&gt; command.&lt;/p&gt;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-filename"&gt;Run on the Ubuntu VM&lt;/div&gt;&#10; &#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ls /tmp/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;With the file in place, install it.&lt;/p&gt;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-filename"&gt;Run on the Ubuntu VM&lt;/div&gt;&#10; &#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install /tmp/your-app.deb&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;If the installation succeeds, you can launch the app and check that it works.&lt;/p&gt;&#10;&lt;h2 id="uninstalling-on-the-vm"&gt;&#10; Uninstalling on the VM&lt;a href="#uninstalling-on-the-vm"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;To uninstall the app you installed, run the following command.&#10;Replace &lt;code&gt;your-app&lt;/code&gt; with the name of the app you installed.&lt;/p&gt;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-filename"&gt;Run on the Ubuntu VM&lt;/div&gt;&#10; &#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt remove your-app&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;If you also want to remove the configuration files, use &lt;code&gt;purge&lt;/code&gt; instead.&lt;/p&gt;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-filename"&gt;Run on the Ubuntu VM&lt;/div&gt;&#10; &#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt purge your-app&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;After that, run the following command to remove dependency packages that are no longer needed.&lt;/p&gt;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-filename"&gt;Run on the Ubuntu VM&lt;/div&gt;&#10; &#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt autoremove&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;The installer can be deleted with &lt;code&gt;rm&lt;/code&gt;.&lt;/p&gt;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-filename"&gt;Run on the Ubuntu VM&lt;/div&gt;&#10; &#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rm /tmp/your-app.deb&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;</description></item></channel></rss>