<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Linux on Notebook</title><link>https://blog.cmac4603.dev/categories/linux/</link><description>Recent content in Linux on Notebook</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 17 Aug 2026 21:37:22 +0100</lastBuildDate><atom:link href="https://blog.cmac4603.dev/categories/linux/index.xml" rel="self" type="application/rss+xml"/><item><title>Adding Environment Variables to Linux GUI Apps</title><link>https://blog.cmac4603.dev/posts/adding-environment-variables-to-linux-gui-apps/</link><pubDate>Mon, 17 Aug 2026 21:37:22 +0100</pubDate><guid>https://blog.cmac4603.dev/posts/adding-environment-variables-to-linux-gui-apps/</guid><description>&lt;p&gt;Find the app your looking for:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo find / -type f -iname &lt;span style="color:#e6db74"&gt;&amp;#34;*myapp*&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Edit the file:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;nvim /usr/share/applications/org.myapp.MyApp.desktop
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You&amp;rsquo;ll want to look for the &lt;code&gt;Exec&lt;/code&gt; key, and prepend the env vars to the app command:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Exec=env MY_ENV_VAR=hello my-app-cmd %U
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>Hyprctl Moving Workspace Between Monitors</title><link>https://blog.cmac4603.dev/posts/hyprctl-moving-workspace-between-monitors/</link><pubDate>Thu, 25 Jun 2026 09:48:06 +0100</pubDate><guid>https://blog.cmac4603.dev/posts/hyprctl-moving-workspace-between-monitors/</guid><description>&lt;p&gt;Hyprland recently migrated to lua, and this changed the inputs &lt;code&gt;hyprctl&lt;/code&gt; required, so this is just a quick note about how to move workspaces between monitors if you have more than one.&lt;/p&gt;
&lt;p&gt;The old command:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;hyprctl dispatch moveworkspacetomonitor &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;New:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;hyprctl dispatch &lt;span style="color:#e6db74"&gt;&amp;#39;hl.dsp.workspace.move({ workspace = 2, monitor = 1 })&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="https://wiki.hypr.land/Configuring/Basics/Dispatchers/"&gt;Dispatcher documentation&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Serial Console in the Terminal</title><link>https://blog.cmac4603.dev/posts/serial-console-in-the-terminal/</link><pubDate>Thu, 11 Jun 2026 10:42:43 +0100</pubDate><guid>https://blog.cmac4603.dev/posts/serial-console-in-the-terminal/</guid><description>&lt;p&gt;Instructions on how to connect to a device over serial USB port in the terminal on Arch with either &lt;code&gt;minicom&lt;/code&gt; or &lt;code&gt;tio&lt;/code&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Beforehand, ensure your user is in these groups (if adding, reboot machine).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# adding your user to these groups&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo usermod -aG dialout tty uucp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="with-minicom"&gt;With minicom&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Install the &lt;a href="https://archlinux.org/packages/extra/x86_64/minicom/"&gt;&lt;code&gt;minicom&lt;/code&gt;&lt;/a&gt; serial communication program.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo pacman -Sy minicom
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Connect to device over serial comms (here it is at &lt;code&gt;/dev/ttyUSB0&lt;/code&gt;).&lt;/p&gt;</description></item><item><title>OpenVPN on Arch</title><link>https://blog.cmac4603.dev/posts/openvpn-on-arch/</link><pubDate>Tue, 09 Jun 2026 12:26:29 +0100</pubDate><guid>https://blog.cmac4603.dev/posts/openvpn-on-arch/</guid><description>&lt;h2 id="import-using-systemctl"&gt;Import using systemctl&lt;/h2&gt;
&lt;p&gt;Copy OpenVPN client file to &lt;code&gt;/etc&lt;/code&gt; directory:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo cp client.ovpn /etc/openvpn/client/myvpnconf.conf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Systemctl&amp;rsquo;s &lt;code&gt;enable&lt;/code&gt; command turns on the service on boot, the &lt;code&gt;--now&lt;/code&gt; flag also starts the service immediately:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# note the filename after @&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;systemctl enable --now openvpn-client@myvpnconf.service
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This will start the VPN service with that configuration on boot, but this won&amp;rsquo;t integrate with networkmanager.&lt;/p&gt;
&lt;h2 id="integrating-vpn-connections--with-networkmanager"&gt;Integrating VPN connections with networkmanager&lt;/h2&gt;
&lt;h3 id="disable-the-original-systemctl-service-if-added-previously"&gt;Disable the original systemctl service (if added previously)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;systemctl disable --now openvpn-client@myvpnconf.service
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="import-openvpn-connection"&gt;Import OpenVPN connection&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;nmcli connection import type openvpn file myvpnconf.ovpn
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="edit-the-connection-to-add-username--password"&gt;Edit the connection to add username &amp;amp; password&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;nmcli connection modify myvpnconf &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; +vpn.data &lt;span style="color:#e6db74"&gt;&amp;#34;connection-type=password-tls, username=&lt;/span&gt;$USERNAME&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; vpn.user-name $USERNAME &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; +vpn.secrets &lt;span style="color:#e6db74"&gt;&amp;#34;password=&lt;/span&gt;$PASSWORD&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="automatically-connect-to-vpn"&gt;Automatically connect to VPN&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;List connections&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;nmcli connection
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;NAME UUID TYPE DEVICE
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;zrh-003 d46e4a92-778e-4792-b085-e1f638ecb8e3 vpn enp1s0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;enp1s0 1715b889-3c47-3e21-a86f-94ce207297a9 ethernet enp1s0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tun0 7405f329-255d-4b50-b98d-c2e865a443a4 tun tun0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Edit connection by adding the VPN UUID&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# note if device name doesn&amp;#39;t work use the UUID of the connection (not the VPN)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;nmcli c edit enp1s0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;nmcli&amp;gt; set connection.secondaries d46e4a92-778e-4792-b085-e1f638ecb8e3
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;nmcli&amp;gt; save persistent
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Connection &lt;span style="color:#e6db74"&gt;&amp;#39;enp1s0&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;1715b889-3c47-3e21-a86f-94ce207297a9&lt;span style="color:#f92672"&gt;)&lt;/span&gt; successfully updated.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Serial Port Access on Arch</title><link>https://blog.cmac4603.dev/posts/serial-port-access-on-arch/</link><pubDate>Sat, 30 May 2026 09:35:24 +0100</pubDate><guid>https://blog.cmac4603.dev/posts/serial-port-access-on-arch/</guid><description>&lt;p&gt;For access to microcontrollers, such as the ESP32, permissions are required to enable flashing devices etc. If having issues, but seeing the port connected, check the port first (in my example the port was &lt;code&gt;/dev/ttyACM0&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ls -l /dev/ttyACM0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;crw-rw---- &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; root uucp 166, &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; May &lt;span style="color:#ae81ff"&gt;27&lt;/span&gt; 21:05 /dev/ttyACM0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Notice the group &lt;code&gt;uucp&lt;/code&gt; has access, we just need to add ourselves to it.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo usermod -aG uucp $USER
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A restart may be required for this to take effect.&lt;/p&gt;</description></item></channel></rss>