<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>blog.masoko.net</title>
    <description>My Blog and Notes</description>
    <link>https://blog.masoko.net/</link>
    <atom:link href="https://blog.masoko.net/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Tue, 07 Jul 2026 17:43:57 +0000</pubDate>
    <lastBuildDate>Tue, 07 Jul 2026 17:43:57 +0000</lastBuildDate>
    <generator>Jekyll v3.10.0</generator>
      <item>
        <title>Setting Up WireGuard VPN on MikroTik (Multi-Platform Remote Access Guide)</title>
        <description>&lt;p&gt;Remote access is a cornerstone of any robust home lab or small business network. While there are many VPN flavors out there, WireGuard has quickly become the gold standard due to its incredible speed, lightweight footprint, and cryptographic security.&lt;/p&gt;

&lt;p&gt;If you run a MikroTik router (RouterOS v7+), you have a powerful enterprise-grade WireGuard server sitting right in your living room. In this article, we’ll walk through setting up WireGuard on your MikroTik router and configuring clients for both Android and Windows 11.&lt;/p&gt;

&lt;h2 id=&quot;why-wireguard-on-mikrotik&quot;&gt;Why WireGuard on MikroTik?&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Kernel-Level Speed:&lt;/strong&gt; Unlike OpenVPN, which can bottleneck weaker router CPUs, WireGuard runs directly in the RouterOS kernel, maximizing your throughput.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Silence is Golden:&lt;/strong&gt; WireGuard does not respond to unauthenticated packets. To a port scanner on the internet, your VPN port looks completely closed.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Roaming Support:&lt;/strong&gt; If your phone switches from Wi-Fi to 4G/5G, the WireGuard connection transitions instantly without dropping your session.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;phase-1-configuring-the-mikrotik-server&quot;&gt;Phase 1: Configuring the MikroTik Server&lt;/h2&gt;

&lt;p&gt;Every WireGuard topology relies on a public/private key exchange. Think of it this way: your router and your phone will each generate their own unique key pair, and then they will swap public keys to trust one another.&lt;/p&gt;

&lt;h3 id=&quot;1-create-the-wireguard-interface&quot;&gt;1. Create the WireGuard Interface&lt;/h3&gt;
&lt;p&gt;Open Winbox and navigate to &lt;strong&gt;WireGuard&lt;/strong&gt; from the left menu. Click the &lt;strong&gt;+&lt;/strong&gt; (Add) button.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Name:&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;wireguard1&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Listen Port:&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;13231&lt;/code&gt; (Default)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Click &lt;strong&gt;Apply&lt;/strong&gt;. RouterOS will instantly generate your unique Private Key and Public Key. Copy the Public Key somewhere safe; you will need it for the clients.&lt;/p&gt;

&lt;h3 id=&quot;2-assign-an-ip-subnet-to-the-vpn&quot;&gt;2. Assign an IP Subnet to the VPN&lt;/h3&gt;
&lt;p&gt;Go to &lt;strong&gt;IP -&amp;gt; Addresses -&amp;gt; + (Add)&lt;/strong&gt;. We need a dedicated internal subnet for our VPN clients.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Address:&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;10.0.0.1/24&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Network:&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;10.0.0.0&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Interface:&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;wireguard1&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;3-open-the-firewall-port&quot;&gt;3. Open the Firewall Port&lt;/h3&gt;
&lt;p&gt;Go to &lt;strong&gt;IP -&amp;gt; Firewall -&amp;gt; Filter Rules -&amp;gt; + (Add)&lt;/strong&gt;. WireGuard uses UDP, so we must allow incoming traffic on our listening port.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Chain:&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;input&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Protocol:&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;udp&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Dst. Port:&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;13231&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Action:&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;accept&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Crucial:&lt;/strong&gt; Drag this rule to the very top of your Firewall input list so the traffic isn’t dropped by default drop rules.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;phase-2-connecting-an-android-device&quot;&gt;Phase 2: Connecting an Android Device&lt;/h2&gt;

&lt;p&gt;On mobile devices, configuration is a breeze thanks to visual key exchanges.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Download the official &lt;strong&gt;WireGuard&lt;/strong&gt; app from the Google Play Store.&lt;/li&gt;
  &lt;li&gt;Tap the blue &lt;strong&gt;+&lt;/strong&gt; (Plus) icon and select &lt;strong&gt;Create from scratch&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;Under the &lt;strong&gt;Interface&lt;/strong&gt; section, give it a name (e.g., &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HomeVPN&lt;/code&gt;). You will see a pre-generated Public key. &lt;em&gt;Copy this key—you need to add it to MikroTik.&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;Fill in the Interface details:
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Addresses:&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;10.0.0.2/24&lt;/code&gt; (This is your phone’s fixed VPN IP).&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;DNS Servers:&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;192.168.88.1&lt;/code&gt; (Your MikroTik’s local IP).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Tap &lt;strong&gt;Add Peer&lt;/strong&gt; at the bottom:
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Public Key:&lt;/strong&gt; Paste the MikroTik’s Public Key here.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Endpoint:&lt;/strong&gt; Your public home IP address or MikroTik DDNS, followed by the port (e.g., &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;yourhome.sn.mynetname.net:13231&lt;/code&gt;).&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Allowed IPs:&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.0.0.0/0&lt;/code&gt; (Redirects all mobile internet traffic securely through your home) OR &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;192.168.88.0/24&lt;/code&gt; (Only routes traffic intended for home lab devices).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Back on MikroTik:&lt;/strong&gt; Go to the &lt;strong&gt;Peers&lt;/strong&gt; tab -&amp;gt; &lt;strong&gt;+&lt;/strong&gt;. Select &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;wireguard1&lt;/code&gt;, paste your Phone’s Public Key, and set Allowed Address to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;10.0.0.2/32&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Save both sides, toggle the switch on your phone, and you are connected!&lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;phase-3-connecting-a-windows-11-pc&quot;&gt;Phase 3: Connecting a Windows 11 PC&lt;/h2&gt;

&lt;p&gt;Since you can’t easily scan QR codes on a desktop, Windows configuration is done via a simple text configuration file (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.conf&lt;/code&gt;).&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Download and install WireGuard for Windows from &lt;a href=&quot;https://www.wireguard.com&quot;&gt;wireguard.com&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Click the arrow next to &lt;strong&gt;Add Tunnel&lt;/strong&gt; and choose &lt;strong&gt;Add empty tunnel…&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;A window will pop up showing a fresh Public Key. Copy this key and register it in &lt;strong&gt;MikroTik -&amp;gt; Peers&lt;/strong&gt; with the IP &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;10.0.0.3/32&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Overwrite the text box in the Windows client with the following blueprint configuration:&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-ini highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nn&quot;&gt;[Interface]&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;PrivateKey&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;[YOUR_WINDOWS_PRIVATE_KEY_DO_NOT_TOUCH]&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;Address&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;10.0.0.3/24&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;DNS&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;192.168.88.1&lt;/span&gt;

&lt;span class=&quot;nn&quot;&gt;[Peer]&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;PublicKey&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;[PASTE_YOUR_MIKROTIK_PUBLIC_KEY_HERE]&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;Endpoint&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;[YOUR_PUBLIC_IP_OR_DDNS]:13231&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;AllowedIPs&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;192.168.88.0/24&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;PersistentKeepalive&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;25&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;pro-tip-split-tunneling-vs-full-tunneling-on-windows&quot;&gt;Pro-Tip: Split Tunneling vs. Full Tunneling on Windows&lt;/h3&gt;
&lt;p&gt;For desktops and laptops, it is usually best to use &lt;strong&gt;Split Tunneling&lt;/strong&gt; by setting &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AllowedIPs = 192.168.88.0/24&lt;/code&gt;. This means your regular PC gaming, web surfing, and video streaming happen over your local network, while &lt;em&gt;only&lt;/em&gt; requests destined for your home lab servers get routed through the VPN tunnel.&lt;/p&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PersistentKeepalive = 25&lt;/code&gt; line ensures that your PC sends a tiny blank packet every 25 seconds, preventing aggressive cellular or public Wi-Fi firewalls from closing your idle connection.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;troubleshooting-why-am-i-getting-0-b-received&quot;&gt;Troubleshooting: Why am I getting 0 B Received?&lt;/h2&gt;

&lt;p&gt;If your client says “Active” but the Transfer: Received counter sits stubbornly at &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0 B&lt;/code&gt;, your tunnel is failing its cryptographic handshake. Check these three things:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Key Swap Mishap:&lt;/strong&gt; Double-check that you didn’t accidentally paste the router’s key into the router’s peer settings. The router must hold the client’s key, and the client must hold the router’s key.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;IP Subnet Mismatch:&lt;/strong&gt; Ensure the client IP (e.g., &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;10.0.0.3&lt;/code&gt;) matches the specific &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/32&lt;/code&gt; allowed address you assigned to that peer inside MikroTik.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;CGNAT / Dynamic IP:&lt;/strong&gt; If your ISP hides your router behind a CGNAT (Carrier-Grade NAT), a direct WireGuard handshake won’t work without a middleman server. Use MikroTik’s built-in Cloud DDNS (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/ip/cloud&lt;/code&gt;) to track dynamic IPs effortlessly.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;wrap-up&quot;&gt;Wrap Up&lt;/h2&gt;

&lt;p&gt;Once implemented, WireGuard provides a seamless, “always-on” feel. You can map network drives, access your Home Assistant dashboards, or SSH into your Linux hosts from anywhere in the world, knowing your perimeter remains completely secure.&lt;/p&gt;
</description>
        <pubDate>Thu, 25 Jun 2026 00:00:00 +0000</pubDate>
        <link>https://blog.masoko.net/linux/Setting-Up-WireGuard-VPN-on-MikroTik/</link>
        <guid isPermaLink="true">https://blog.masoko.net/linux/Setting-Up-WireGuard-VPN-on-MikroTik/</guid>
        <category>linux</category>
      </item>
      <item>
        <title>Squeezelite Service Not Mixing with Browser Audio (PipeWire/PulseAudio Fix)</title>
        <description>&lt;p&gt;The Squeezelite audio player is a wonderful headless solution, but getting it to run as a reliable, shareable background service on modern Linux distributions (like Ubuntu, Debian, or Fedora, especially those using PipeWire) can be a nightmare.&lt;/p&gt;

&lt;p&gt;This post documents a common, frustrating error and the simple fix that allows Squeezelite to play music alongside other applications, like your browser (YouTube, Spotify Web, etc.).&lt;/p&gt;

&lt;h2 id=&quot;the-problem-the-audio-host-is-down-loop&quot;&gt;The Problem: The Audio “Host is Down” Loop&lt;/h2&gt;

&lt;p&gt;When setting up Squeezelite as a persistent &lt;strong&gt;systemd service&lt;/strong&gt; (often running as a low-privilege user like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;daemon&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;squeezelite&lt;/code&gt;), the service either failed to start or immediately grabbed the sound card exclusively.&lt;/p&gt;

&lt;h3 id=&quot;the-error-message&quot;&gt;The Error Message&lt;/h3&gt;

&lt;p&gt;The core issue was demonstrated by this error log, which repeats when using devices like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;default&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pulse&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;[16:04:06.843393] test_open:281 playback open error: Host is down
[16:04:06.843416] output_init_common:401 unable to open output device: default
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;why-this-happens&quot;&gt;Why This Happens&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Exclusive Access:&lt;/strong&gt; When running Squeezelite with a raw hardware device (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-o hw:CARD=PCH,DEV=0&lt;/code&gt;), the application takes &lt;strong&gt;exclusive control&lt;/strong&gt; of the sound card, blocking the browser.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Environment Conflict:&lt;/strong&gt; When attempting to use the mixing devices (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-o default&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-o pulse&lt;/code&gt;), the service fails. This is because &lt;strong&gt;System Services&lt;/strong&gt; run in a minimal environment and &lt;strong&gt;cannot reliably connect&lt;/strong&gt; to the &lt;strong&gt;User Session PipeWire/PulseAudio server&lt;/strong&gt; that manages all desktop audio (including your browser). It’s a fundamental conflict between a system process and a user-level audio mixer. The “Host is down” error simply means the connection to the mixer server was refused or the socket was not found.&lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;-the-easy-fix-switch-to-a-user-autostart-application&quot;&gt;✅ The Easy Fix: Switch to a User Autostart Application&lt;/h2&gt;

&lt;p&gt;The solution is to stop treating Squeezelite as a low-level “system” component and instead run it as a normal “user” application that starts &lt;strong&gt;after&lt;/strong&gt; your graphical session (and PipeWire) is fully loaded. This is the only way to guarantee it connects to the active audio mixer.&lt;/p&gt;

&lt;p&gt;This method uses a standard &lt;strong&gt;Desktop Entry (.desktop) file&lt;/strong&gt;, which works on most Linux desktop environments (GNOME, KDE, XFCE, Cinnamon, etc.).&lt;/p&gt;

&lt;h3 id=&quot;step-1-disable-the-broken-system-service&quot;&gt;Step 1: Disable the Broken System Service&lt;/h3&gt;

&lt;p&gt;Stop and permanently disable the old service file to prevent conflicts.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# Stop the running service:&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;systemctl stop squeezelite.service

&lt;span class=&quot;c&quot;&gt;# Disable the service so it doesn&apos;t try to start on the next reboot:&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;systemctl disable squeezelite.service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;step-2-create-the-autostart-file&quot;&gt;Step 2: Create the Autostart File&lt;/h3&gt;

&lt;p&gt;We create a configuration file that tells your desktop environment to launch Squeezelite with the correct, shareable device name when you log in.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Create the directory&lt;/strong&gt; (if needed):&lt;/p&gt;

    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;mkdir&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-p&lt;/span&gt; ~/.config/autostart
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Create the autostart file&lt;/strong&gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;squeezelite.desktop&lt;/code&gt;):&lt;/p&gt;

    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;nano ~/.config/autostart/squeezelite.desktop
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Paste and save this content:&lt;/strong&gt;&lt;/p&gt;

    &lt;div class=&quot;language-ini highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nn&quot;&gt;[Desktop Entry]&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;Squeezelite Player&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;Comment&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;Starts Squeezelite audio player on user login&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# Key Fix: Use the &apos;pipewire&apos; audio output device
&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;Exec&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;/usr/bin/squeezelite -n mini-pc -o pipewire&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;Terminal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;false&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;Type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;Application&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;X-GNOME-Autostart-enabled&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;&lt;em&gt;If &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pipewire&lt;/code&gt; doesn’t work, try &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-o default&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-o pulse&lt;/code&gt; here, as the autostart environment is much more forgiving than the system service environment.&lt;/em&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;step-3-log-in-and-enjoy-simultaneous-audio&quot;&gt;Step 3: Log In and Enjoy Simultaneous Audio&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Log out&lt;/strong&gt; of your desktop session.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Log back in.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Squeezelite will now start automatically in the background as your user, correctly connecting to the &lt;strong&gt;PipeWire&lt;/strong&gt; mixing server. You can now stream music to Squeezelite while simultaneously watching a YouTube video or listening to other audio in your browser!&lt;/p&gt;
</description>
        <pubDate>Sun, 12 Oct 2025 00:00:00 +0000</pubDate>
        <link>https://blog.masoko.net/linux/sqeezelite-wont-mix-with-user-audio-copy/</link>
        <guid isPermaLink="true">https://blog.masoko.net/linux/sqeezelite-wont-mix-with-user-audio-copy/</guid>
        <category>linux</category>
      </item>
      <item>
        <title>How I like my Ubuntu</title>
        <description>&lt;h1&gt;Widgets and Apps I install immediately after Ubuntu&lt;/h1&gt;

&lt;h2&gt;Extentions:&lt;/h2&gt;

&lt;p&gt;Dash to Panel - https://extensions.gnome.org/extension/1160/dash-to-panel/&lt;/p&gt;

&lt;p&gt;Desktop Widgets (Desktop Clock) - https://extensions.gnome.org/extension/5156/desktop-clock/&lt;/p&gt;

&lt;p&gt;ArcMenu - https://extensions.gnome.org/extension/3628/arcmenu/&lt;/p&gt;

&lt;h2&gt;Apps:&lt;/h2&gt;

&lt;p&gt;Variety - Desktop wallpaper downloader and changer&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo apt install variety
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;AppImageLauncher - https://github.com/TheAssassin/AppImageLauncher&lt;/p&gt;
</description>
        <pubDate>Fri, 10 Oct 2025 00:00:00 +0000</pubDate>
        <link>https://blog.masoko.net/linux/how-i-like-my-ubuntu/</link>
        <guid isPermaLink="true">https://blog.masoko.net/linux/how-i-like-my-ubuntu/</guid>
        <category>linux</category>
      </item>
      <item>
        <title>Rename bluetooth device in Ubuntu</title>
        <description>&lt;p&gt;Use bt-device (part of the bluez-tools package).&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo apt install bt-device
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Get a list of paired devices:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;bt-device -l
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;To set the new alias:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;bt-device --set macaddress|name Alias &quot;New Name&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;ie:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;bt-device --set S530 Alias &quot;S530 Blue&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
</description>
        <pubDate>Tue, 18 Oct 2022 00:00:00 +0000</pubDate>
        <link>https://blog.masoko.net/linux/ubuntu-rename-bluetooth-device-copy/</link>
        <guid isPermaLink="true">https://blog.masoko.net/linux/ubuntu-rename-bluetooth-device-copy/</guid>
        <category>linux</category>
      </item>
      <item>
        <title>Set git origin to remember credentials</title>
        <description>&lt;p&gt;Set in your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.bashrc&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.zshrc&lt;/code&gt; file:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;export username=&quot;git-hub-token&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Then run the command below to save your credentials&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;git remote set-url origin https://username:$username@github.com/username/repo-name.git
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
</description>
        <pubDate>Tue, 08 Feb 2022 00:00:00 +0000</pubDate>
        <link>https://blog.masoko.net/linux/set-git-origin/</link>
        <guid isPermaLink="true">https://blog.masoko.net/linux/set-git-origin/</guid>
        <category>linux</category>
      </item>
      <item>
        <title>How to mount Samba share on boot</title>
        <description>&lt;p&gt;To mount a samba share when Ubuntu boots you need to add a line to your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/fstab&lt;/code&gt; file.
You’ll have to update the path to your samba share, local mount folder and your samba credentials.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;//remote/path/to/samba/share /local/mount/folder cifs username=your-user-name-here,password=your-password-here,rw,file_mode=0777,dir_mode=0777       0       0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;After you update your fstab file you need to mount the newly added record, you can do that with the mount command below&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mount -a
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
</description>
        <pubDate>Tue, 08 Feb 2022 00:00:00 +0000</pubDate>
        <link>https://blog.masoko.net/linux/mount-sama-share-fstab/</link>
        <guid isPermaLink="true">https://blog.masoko.net/linux/mount-sama-share-fstab/</guid>
        <category>linux</category>
      </item>
      <item>
        <title>Useful CLI tools</title>
        <description>&lt;h1 id=&quot;github-repos-for-some-usefull-cli-tools&quot;&gt;Github repos for some usefull CLI tools&lt;/h1&gt;
&lt;h2 id=&quot;fd&quot;&gt;fd&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/sharkdp/fd/&quot; target=&quot;_blank&quot;&gt;https://github.com/sharkdp/fd/&lt;/a&gt;
&lt;img src=&quot;/static/img/fd-screenshot.png&quot; alt=&quot;fd screenshot&quot; /&gt;&lt;br /&gt;
fd is a program to find entries in your filesystem. It is a simple, fast and user-friendly alternative to find. While it does not aim to support all of find’s powerful functionality, it provides sensible (opinionated) defaults for a majority of use cases.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;fd-find
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Note that the binary is called &lt;strong&gt;fdfind&lt;/strong&gt; as the binary name fd is already used by another package. It is recommended that after installation, you add a link to fd by executing command &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ln -s $(which fdfind) ~/.local/bin/fd&lt;/code&gt;
***&lt;/p&gt;
&lt;h2 id=&quot;jq&quot;&gt;jq&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/stedolan/jq&quot; target=&quot;_blank&quot;&gt;https://github.com/stedolan/jq&lt;/a&gt;
&lt;img src=&quot;/static/img/jq-screenshot.png&quot; alt=&quot;jq screenshot&quot; /&gt;&lt;br /&gt;
jq is like sed for JSON data - you can use it to slice and filter and map and transform structured data with the same ease that sed, awk, grep and friends let you play with text.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;jq
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;bat&quot;&gt;bat&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/sharkdp/bat&quot; target=&quot;_blank&quot;&gt;https://github.com/sharkdp/bat&lt;/a&gt;
&lt;img src=&quot;/static/img/bat-screenshot.png&quot; alt=&quot;bat screenshot&quot; /&gt;&lt;br /&gt;
bat supports syntax highlighting for a large number of programming and markup languages.&lt;/p&gt;

&lt;p&gt;bat communicates with git to show modifications with respect to the index (see left side bar):&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;bat
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Important: If you install bat this way, please note that the executable may be installed as &lt;strong&gt;batcat&lt;/strong&gt; instead of bat (due to a name clash with another package). You can set up a bat -&amp;gt; batcat symlink or alias to prevent any issues that may come up because of this and to be consistent with other distributions:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;mkdir&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-p&lt;/span&gt; ~/.local/bin
&lt;span class=&quot;nb&quot;&gt;ln&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-s&lt;/span&gt; /usr/bin/batcat ~/.local/bin/bat
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;fff&quot;&gt;fff&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/dylanaraps/fff&quot; target=&quot;_blank&quot;&gt;https://github.com/dylanaraps/fff&lt;/a&gt;
&lt;img src=&quot;/static/img/fff-screenshot.png&quot; alt=&quot;fff screenshot&quot; /&gt;&lt;br /&gt;
A simple file manager written in bash.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;git clone https://github.com/dylanaraps/fff
&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;fff
make &lt;span class=&quot;nb&quot;&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;CD on Exit:&lt;br /&gt;
To enable CD on Exit in Bash or Zsh, add this to your .bashrc, .zshrc or equivalent.&lt;br /&gt;
Run ‘fff’ with ‘f’ or whatever you decide to name the function.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;f&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
fff &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$@&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cat&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;XDG_CACHE_HOME&lt;/span&gt;:&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;HOME&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;/.cache&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/fff/.fff_d&quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;duf&quot;&gt;duf&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/muesli/duf&quot; target=&quot;_blank&quot;&gt;https://github.com/muesli/duf&lt;/a&gt;
&lt;img src=&quot;/static/img/duf-screenshot.png&quot; alt=&quot;duf screenshot&quot; /&gt;&lt;br /&gt;
Disk Usage/Free Utility (Linux, BSD, macOS &amp;amp; Windows)&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;duf
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;exa&quot;&gt;exa&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/ogham/exa&quot; target=&quot;_blank&quot;&gt;https://github.com/ogham/exa&lt;/a&gt;
&lt;img src=&quot;/static/img/exa-screenshot.png&quot; alt=&quot;exa screenshot&quot; /&gt;&lt;br /&gt;
exa is a modern replacement for the venerable file-listing command-line program ls that ships with Unix and Linux operating systems, giving it more features and better defaults. It uses colours to distinguish file types and metadata. It knows about symlinks, extended attributes, and Git. And it’s small, fast, and just one single binary.&lt;/p&gt;

&lt;p&gt;By deliberately making some decisions differently, exa attempts to be a more featureful, more user-friendly version of ls.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;exa
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;ohmyzsh&quot;&gt;ohmyzsh&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/ohmyzsh/ohmyzsh/&quot; target=&quot;_blank&quot;&gt;https://github.com/ohmyzsh/ohmyzsh/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Oh My Zsh is an open source, community-driven framework for managing your zsh configuration.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sh &lt;span class=&quot;nt&quot;&gt;-c&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;curl &lt;span class=&quot;nt&quot;&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Before using ohmyzsh you need to make sure that zsh is installed:&lt;br /&gt;
&lt;a href=&quot;https://github.com/ohmyzsh/ohmyzsh/wiki/Installing-ZSH&quot; target=&quot;_blank&quot;&gt;zsh installation instructions&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;zsh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Plugins for ohmyzsh:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;plugins=(git macos common-aliases dirhistory zsh-autosuggestions zsh-syntax-highlighting)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;All of these plugins come with ohmyzsh and they only need to be included in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.zshrc&lt;/code&gt; except &lt;strong&gt;zsh-syntax-highlighting&lt;/strong&gt; and &lt;strong&gt;zsh-autosuggestions&lt;/strong&gt;, which needs to be installed additionally with the commands below:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;git clone https://github.com/zsh-users/zsh-syntax-highlighting.git &lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;ZSH_CUSTOM&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;:-&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;~/.oh-my-zsh/custom&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;/plugins/zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-autosuggestions &lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;ZSH_CUSTOM&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;:-&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;~/.oh-my-zsh/custom&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;/plugins/zsh-autosuggestions
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;ohmyzsh themes I use:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ZSH_THEME=&quot;gallois&quot;  
ZSH_THEME=&quot;af-magic&quot;  
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;
&lt;h2 id=&quot;btop&quot;&gt;btop&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/aristocratos/btop&quot; target=&quot;_blank&quot;&gt;https://github.com/aristocratos/btop&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/btop-screenshot.png&quot; alt=&quot;btop screenshot&quot; /&gt;&lt;br /&gt;
Resource monitor that shows usage and stats for processor, memory, disks, network and processes.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;snap &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;btop
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;
&lt;h2 id=&quot;httpie&quot;&gt;HTTPie&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/httpie/httpie&quot; target=&quot;_blank&quot;&gt;https://github.com/httpie/httpie&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;HTTPie is a command-line HTTP client. Its goal is to make CLI interaction with web services as human-friendly as possible. HTTPie is designed for testing, debugging, and generally interacting with APIs &amp;amp; HTTP servers. The http &amp;amp; https commands allow for creating and sending arbitrary HTTP requests. They use simple and natural syntax and provide formatted and colorized output.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;httpie
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
</description>
        <pubDate>Wed, 01 Dec 2021 00:00:00 +0000</pubDate>
        <link>https://blog.masoko.net/ubuntu/Useful-cli-tools/</link>
        <guid isPermaLink="true">https://blog.masoko.net/ubuntu/Useful-cli-tools/</guid>
        <category>ubuntu</category>
      </item>
      <item>
        <title>Ubuntu Customizations CLI</title>
        <description>&lt;h1 id=&quot;how-do-i-enable-minimize-on-click-on-ubuntu-dock&quot;&gt;How do I enable ‘minimize on click’ on Ubuntu dock&lt;/h1&gt;

&lt;p&gt;Open Terminal and run&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gsettings set org.gnome.shell.extensions.dash-to-dock click-action &apos;minimize&apos;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;To revert to the default option, simply run&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gsettings reset org.gnome.shell.extensions.dash-to-dock click-action&lt;/code&gt;&lt;/p&gt;

&lt;h1 id=&quot;how-to-make-dock-background-80-transparent-in-ubuntu&quot;&gt;How to make dock background 80% transparent in Ubuntu&lt;/h1&gt;

&lt;p&gt;First enable custom colors:&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gsettings set org.gnome.shell.extensions.dash-to-dock transparency-mode &apos;FIXED&apos;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Then, to set transparency to 80%, issue the command&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gsettings set org.gnome.shell.extensions.dash-to-dock background-opacity 0.2&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Change 0.0 to any number between 0 and 1.&lt;/p&gt;

&lt;p&gt;To reset to the default setting:&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gsettings reset org.gnome.shell.extensions.dash-to-dock background-opacity&lt;/code&gt;&lt;/p&gt;

&lt;h1 id=&quot;make-file-manager-always-show-full-path-not-only-with-ctrl--l&quot;&gt;Make file manager always show full path (not only with ctrl + l)&lt;/h1&gt;
&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gsettings set org.gnome.nautilus.preferences always-use-location-entry true&lt;/code&gt;&lt;/p&gt;

&lt;h1 id=&quot;create-a-wallpaper-slideshow-using-bash-script-and-cron&quot;&gt;Create a wallpaper slideshow using bash script and cron&lt;/h1&gt;
&lt;p&gt;Save this script as a bash file, update the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DIR&lt;/code&gt; variable to point to your photo collection and schedule it with a cronjob.&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#!/usr/bin/env bash

# Update the DIR variable to point to your photos

DIR=&quot;/home/masoko/Pictures/wallpapers/reddit&quot;
PIC=$(ls $DIR/* | shuf -n1)

RUID=$(who | awk &apos;FNR == 1 {print $1}&apos;)
RUSER_UID=$(id -u ${RUID})
sudo -u ${RUID} DBUS_SESSION_BUS_ADDRESS=&quot;unix:path=/run/user/${RUSER_UID}/bus&quot; gsettings set org.gnome.desktop.background picture-uri &quot;file://$PIC&quot;
exit
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
</description>
        <pubDate>Mon, 04 Oct 2021 00:00:00 +0000</pubDate>
        <link>https://blog.masoko.net/ubuntu/Ubuntu-Customizations-CLI/</link>
        <guid isPermaLink="true">https://blog.masoko.net/ubuntu/Ubuntu-Customizations-CLI/</guid>
        <category>ubuntu</category>
      </item>
      <item>
        <title>How to ssh using a certificate (not password)</title>
        <description>&lt;ol&gt;
  &lt;li&gt;Generate the certificate on the machine you are going to login from:
    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ssh-keygen
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Check the certificate to make sure it was generated properly:
    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;cat ~/.ssh/id_rsa.pub
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Copy the certificate to the remote machine:
    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ssh-copy-id user@host
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
    &lt;p&gt;When you execute ssh-copy-id you’ll be asked for the password of the remote host.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Thu, 15 Apr 2021 00:00:00 +0000</pubDate>
        <link>https://blog.masoko.net/linux/ssh-without-password/</link>
        <guid isPermaLink="true">https://blog.masoko.net/linux/ssh-without-password/</guid>
        <category>linux</category>
      </item>
      <item>
        <title>How to Install Mosquitto Broker on Raspberry Pi</title>
        <description>&lt;h1 id=&quot;how-to-install-mosquitto-broker-on-raspberry-pi&quot;&gt;How to Install Mosquitto Broker on Raspberry Pi&lt;/h1&gt;

&lt;ol&gt;
  &lt;li&gt;Install the mosquitto broker with the command below:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;sudo apt install -y mosquitto mosquitto-clients&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Create a password file (you’ll be promted to enter the password).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mosquitto_passwd -c passwordfile user&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;move the password file to /etc/mosquitto&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sudo mv passwordfile /etc/mosquitto/&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Update mosquitto broker config so it uses the created password file.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Create a custom config file in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/mosquitto/conf.d&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sudo nano /etc/mosquitto/conf.d/config.cfg&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Here is the configuration I am using and it works fine with Home Assistant:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;user mosquitto
max_queued_messages 200
listener 1883 0.0.0.0
allow_zero_length_clientid true
allow_duplicate_messages false 
autosave_interval 900
autosave_on_changes false
persistence true
persistence_file mosquitto.db
allow_anonymous false
password_file /etc/mosquitto/passwordfile
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Here is how to check mosquitto logs.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sudo cat /var/log/mosquitto/mosquitto.log&lt;/code&gt;&lt;/p&gt;
</description>
        <pubDate>Mon, 12 Apr 2021 00:00:00 +0000</pubDate>
        <link>https://blog.masoko.net/raspberry-pi/Install-MQTT-Broker/</link>
        <guid isPermaLink="true">https://blog.masoko.net/raspberry-pi/Install-MQTT-Broker/</guid>
        <category>raspberry-pi</category>
      </item>
  </channel>
</rss>
