<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Alexandre Harano</title>
    <description>The latest articles on DEV Community by Alexandre Harano (@ayharano).</description>
    <link>https://dev.to/ayharano</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F16849%2F3007fd91-cf51-4e10-ab22-540ada28d1a2.jpg</url>
      <title>DEV Community: Alexandre Harano</title>
      <link>https://dev.to/ayharano</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ayharano"/>
    <language>en</language>
    <item>
      <title>Solving sound disruption on Fedora 39</title>
      <dc:creator>Alexandre Harano</dc:creator>
      <pubDate>Sun, 10 Mar 2024 06:30:00 +0000</pubDate>
      <link>https://dev.to/ayharano/solving-sound-disruption-on-fedora-39-3j5m</link>
      <guid>https://dev.to/ayharano/solving-sound-disruption-on-fedora-39-3j5m</guid>
      <description>&lt;p&gt;Cover image description: Single track extracted from Audacity where the latter part is totally mute&lt;/p&gt;

&lt;h2&gt;
  
  
  Choosing Fedora
&lt;/h2&gt;

&lt;p&gt;For a few years, I didn't have a personal laptop. After my 2010 MacBook Pro broke, I relied solely on the one provided by my employer. After some research, I decided on a ThinkPad T470. Since then, Fedora has been my Linux distribution of choice, even after switching laptops.&lt;/p&gt;

&lt;p&gt;I've experimented with other distros before, including Ubuntu, Gentoo, and Arch Linux. What drew me to Fedora was its balance of keeping frequently used packages stable while still offering updates. This approach felt better than how Canonical manages package versions for Ubuntu, for me.&lt;/p&gt;

&lt;p&gt;With the ThinkPad T470, I likely started with Fedora 28 or 29. Upgrading versions has been a smooth process, following &lt;a href="https://docs.fedoraproject.org/en-US/quick-docs/upgrading-fedora-offline/"&gt;the official documentation&lt;/a&gt;. As a user, the upgrades have generally been effortless.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sound Disruption
&lt;/h2&gt;

&lt;p&gt;Last week, while using Fedora 39 on my IdeaPad Gaming 3i, I started using a UGREEN &lt;a href="https://en.wikipedia.org/wiki/KVM_switch"&gt;KVM switch&lt;/a&gt; to share a 27" HDMI monitor and some USB peripherals between my personal and work laptops.&lt;/p&gt;

&lt;p&gt;I usually run these commands a few times a day on my laptop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;snap refresh&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;dnf update&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;dnf autoremove&lt;span class="p"&gt;;&lt;/span&gt; omz update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After a recent update (either the KVM switch or a Linux kernel upgrade), I turned on my IdeaPad for a meeting and noticed my usual sound options were missing from the GNOME Sound Output list. Both "HDMI / DisplayPort - Built-in Audio" and "Speakers - Built-in Audio" had disappeared.&lt;/p&gt;

&lt;p&gt;To write this post, I checked my &lt;a href="https://www.mozilla.org/en-US/firefox/channel/desktop/"&gt;Firefox Nightly&lt;/a&gt; search history to list my search prompts, while briefly mentioning some of the involved technologies.&lt;/p&gt;

&lt;h2&gt;
  
  
  Investigation Steps
&lt;/h2&gt;

&lt;p&gt;I started troubleshooting by searching for &lt;code&gt;pipewire troubleshooting&lt;/code&gt;, &lt;code&gt;fedora audio troubleshooting&lt;/code&gt;, &lt;code&gt;fedora pipewire troubleshooting&lt;/code&gt;, and &lt;code&gt;fedora systemctl pipewire&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pipewire.org/"&gt;PipeWire&lt;/a&gt; is a server that manages audio, video, and hardware on Linux systems. It's been included by default &lt;a href="https://en.wikipedia.org/wiki/PipeWire#History"&gt;since Fedora 34&lt;/a&gt;. &lt;a href="https://www.freedesktop.org/software/systemd/man/latest/systemd.html"&gt;&lt;code&gt;systemd&lt;/code&gt;&lt;/a&gt;, managed by &lt;a href="https://www.freedesktop.org/software/systemd/man/latest/systemctl.html"&gt;&lt;code&gt;systemctl&lt;/code&gt;&lt;/a&gt;, is a system and service manager for Linux. In some cases, it can handle audio services, like mine.&lt;/p&gt;

&lt;p&gt;While these initial searches offered some information, they weren't directly relevant to my issue. So, I narrowed my search to the specific audio hardware. I used the term &lt;code&gt;linux tigerlake audio not recognized&lt;/code&gt; which led me to more helpful resources.&lt;/p&gt;

&lt;p&gt;I knew I had Tiger Lake audio because I use a Blue Microphone and Bluetooth headphones with my laptop. Before meetings, I would switch sound devices and see "Tiger Lake" mentioned in the options. The new search results focused more on Linux kernel modules, which seemed relevant to my situation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tiger Lake-related Kernel Module Search
&lt;/h2&gt;

&lt;p&gt;Since the issue might be related to a kernel module, focusing only on Fedora wouldn't be helpful. I looked at results for Manjaro, Ubuntu, Arch Linux, even the &lt;a href="https://thesofproject.github.io/latest/getting_started/intel_debug/introduction.html"&gt;Sound Open Firmware (SOF) project website&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Earlier, I used &lt;a href="https://en.wikipedia.org/wiki/Lspci"&gt;&lt;code&gt;lspci&lt;/code&gt;&lt;/a&gt; and &lt;a href="https://en.wikipedia.org/wiki/Lspci#lsusb"&gt;&lt;code&gt;lsusb&lt;/code&gt;&lt;/a&gt; to check hardware, but everything seemed normal.&lt;/p&gt;

&lt;p&gt;While browsing forums, I remembered checking the boot sequence with &lt;a href="https://en.wikipedia.org/wiki/Dmesg"&gt;&lt;code&gt;dmesg&lt;/code&gt;&lt;/a&gt; and learned about &lt;a href="https://smxi.org/docs/inxi.htm"&gt;&lt;code&gt;inxi&lt;/code&gt;&lt;/a&gt;! I don't have the old output, but running&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dmesg | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-C2&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s1"&gt;'\(audio\|sound\|dsp\)'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;revealed some interesting lines.&lt;/p&gt;

&lt;p&gt;Here's a quick explanation of the commands:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;|&lt;/code&gt; (pipe) sends the output of one command (like &lt;code&gt;dmesg&lt;/code&gt;) to another (like &lt;code&gt;grep&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;sudo&lt;/code&gt; gives superuser access (needed for &lt;code&gt;dmesg&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;grep&lt;/code&gt; uses patterns (&lt;a href="https://en.wikipedia.org/wiki/Regular_expression"&gt;regular expressions - regex&lt;/a&gt;) to filter results.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-C2&lt;/code&gt; shows two lines before and after a match.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-i&lt;/code&gt; ignores case sensitivity.&lt;/li&gt;
&lt;li&gt;We searched for "audio," "sound," and "dsp" (digital signal processing).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One line mentioned: "ASoC: Parent card not yet available, widget card binding deferred." Searching for this led me to discussions about kernel modules.&lt;/p&gt;

&lt;p&gt;The solution involved editing a file. I found instructions in &lt;a href="https://forum.manjaro.org/t/no-sound-on-laptop-with-intel-tiger-lake-hd-audio-audio-hardware-not-detected/84964/18"&gt;a forum post&lt;/a&gt; referencing other resources, like &lt;a href="https://forum.manjaro.org/t/sound-not-working-after-update-to-manjaro-21-1/73773/2"&gt;this one&lt;/a&gt; and &lt;a href="https://askubuntu.com/a/1243370"&gt;another one&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here's what I did:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Edited &lt;code&gt;/etc/default/grub&lt;/code&gt; to replace
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GRUB_CMDLINE_LINUX="&amp;lt;existing options&amp;gt;"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;with&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GRUB_CMDLINE_LINUX="&amp;lt;existing options&amp;gt; snd_intel_dspcfg.dsp_driver=1"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This adds a kernel module option.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Updated GRUB using &lt;code&gt;sudo grub2-mkconfig -o /boot/grub2/grub.cfg&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This step rebuilds the boot configuration file.&lt;/p&gt;

&lt;p&gt;As a Fedora user, I'd never edited kernel configurations before, so this process was new to me and I searched for &lt;code&gt;fedora update grub&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing Thoughts
&lt;/h2&gt;

&lt;p&gt;Adding the specific kernel boot option and updating GRUB fixed my audio detection. While the exact steps might differ for your situation, this guide should help you understand the thought process behind troubleshooting hardware, even at a basic level.&lt;/p&gt;

&lt;p&gt;For this audio issue, I felt using large language models like ChatGPT, Gemini or other &lt;a href="https://en.wikipedia.org/wiki/Large_language_model"&gt;LLM&lt;/a&gt; interfaces wasn't ideal. This was a specific problem requiring accurate information, and I wanted to avoid any potential inaccuracies that could come from &lt;a href="https://en.wikipedia.org/wiki/Hallucination_(artificial_intelligence)"&gt;hallucination&lt;/a&gt; interference.&lt;/p&gt;

&lt;p&gt;By the way, for the meeting where I lost audio, I wasn't a key participant, so I joined using my phone.&lt;/p&gt;

</description>
      <category>linux</category>
      <category>audio</category>
      <category>troubleshooting</category>
    </item>
    <item>
      <title>A bit about a bash script to use macOS' Wi-Fi interface to log another Internet-enabled device into a captive portal</title>
      <dc:creator>Alexandre Harano</dc:creator>
      <pubDate>Sun, 29 Oct 2017 02:37:28 +0000</pubDate>
      <link>https://dev.to/ayharano/a-bit-about-a-bash-script-to-use-macos-wi-fi-interface-to-log-another-internet-enabled-device-into-a-captive-portal-75e</link>
      <guid>https://dev.to/ayharano/a-bit-about-a-bash-script-to-use-macos-wi-fi-interface-to-log-another-internet-enabled-device-into-a-captive-portal-75e</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published in &lt;a href="https://medium.com/@ayharano"&gt;my Medium account&lt;/a&gt; in &lt;a href="https://medium.com/@AYHarano/a-bit-about-a-bash-script-to-use-macos-wi-fi-interface-to-log-another-internet-enabled-device-into-a2f5a511446"&gt;this link&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Hello there.&lt;/p&gt;

&lt;p&gt;As suggested by &lt;a href="https://dev.to/felipebrigatto"&gt;Felipe Brigatto&lt;/a&gt;, I am writing a post to share about a small script which I wrote.&lt;/p&gt;

&lt;p&gt;In corporate environments, mainly in hotels, there is a system which is used to authenticate users and devices before letting them use Internet (usually with restrictions) called &lt;em&gt;&lt;a href="https://en.wikipedia.org/wiki/Captive_portal"&gt;captive portal&lt;/a&gt;&lt;/em&gt;. This system let the device (a smartphone, a tablet, a laptop, an e-book, a gaming console or another Internet-enabled device) get an IP address, but initially the device doesn't have access to Internet until the user register an account and log into the portal using the selected credentials. Unfortunately, not all Internet-enabled devices provides useful interfaces to let the user log into captive portal using only the device itself, such as a &lt;a href="https://store.google.com/product/chromecast_2015"&gt;Chromecast&lt;/a&gt;. So, one way to log such devices into captive portals is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Clone the Internet-enabled device's &lt;a href="https://en.wikipedia.org/wiki/MAC_address"&gt;MAC address&lt;/a&gt; into a working network interface;&lt;/li&gt;
&lt;li&gt;Log into the target captive portal pretending to be the Internet-enabled device using the working network interface;&lt;/li&gt;
&lt;li&gt;Restore the original MAC address to the working network interface; and&lt;/li&gt;
&lt;li&gt;Use the Internet-enabled device in the captive portal network under its restrictions as the device had already being authenticated.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The aforementioned listing is a generic guide to log a device into a captive portal using a working device which doesn’t have any problems logging into the target captive portal.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://gist.github.com/ayharano/3ead655ca67192f8fda5d99deaec1d60"&gt;The script I wrote&lt;/a&gt; is customized to Mac OS X / OS X / macOS as it uses &lt;code&gt;networksetup&lt;/code&gt;. But it should not be hard to adapt it for other &lt;a href="https://en.wikipedia.org/wiki/Operating_system"&gt;OS&lt;/a&gt; as long as the user knows their OS' network binaries to handle Wi-Fi interfaces. I like to write &lt;a href="https://www.gnu.org/software/bash/"&gt;&lt;code&gt;bash&lt;/code&gt;&lt;/a&gt; scripts and for this one I followed some tips from &lt;a href="https://medium.com/@b0rk"&gt;Julia Evans&lt;/a&gt;'s &lt;a href="https://twitter.com/b0rk"&gt;Twitter account&lt;/a&gt; such as wonderful &lt;a href="https://www.shellcheck.net/"&gt;ShellCheck&lt;/a&gt;. Come on! &lt;a href="https://en.wikipedia.org/wiki/Lint_%28software%29"&gt;Linters&lt;/a&gt; are great!&lt;/p&gt;

&lt;p&gt;Use the following commands into the Terminal to download and setup the script as an executable script:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="c"&gt;# Download captive.sh&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;curl https://gist.githubusercontent.com/ayharano/3ead655ca67192f8fda5d99deaec1d60/raw/ &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; ~/captive.sh
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="c"&gt;# Set captive.sh as an executable script&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;chmod&lt;/span&gt; +x ~/captive.sh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Before using the script referred in this post, read the following to check what exactly the script is and how it compares to what was written up to this point.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;p&gt;Sometimes, I am a bit overzealous when treating errors. For this specific script, located at &lt;a href="https://gist.github.com/ayharano/"&gt;my GitHub account's gists&lt;/a&gt;, it only proceeds if every needed binary is found previously and, because of &lt;code&gt;set -eu&lt;/code&gt;, it will exit before its successful completion if either an error occurs or a variable is unset (e.g. empty string).&lt;/p&gt;

&lt;p&gt;Comparing the aforementioned listing with the script,&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;is covered by &lt;code&gt;# Applying MAC address change&lt;/code&gt; section;&lt;/li&gt;
&lt;li&gt;is covered by &lt;code&gt;# Waiting for user to logging into captive portal using requested MAC address&lt;/code&gt; section;&lt;/li&gt;
&lt;li&gt;is covered by &lt;code&gt;# Applying MAC address restore&lt;/code&gt; section;&lt;/li&gt;
&lt;li&gt;is outside the script's scope, given that it is the use of the Internet-enabled device after successfully running the script.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Notice that step 2 requires user's interaction, given that they need to use macOS to provide the captive portal credentials and log into the system.&lt;/p&gt;

&lt;p&gt;If you try to run the script parameter-less, it will yield the following result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="c"&gt;# Run captive.sh without parameters&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;~/captive.sh
usage: /Users/YOUR_USER/captive.sh wifi_interface_name other_mac_address
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;There are two parameters needed to run the script &lt;code&gt;wifi_interface_name&lt;/code&gt;&lt;br&gt;
 and &lt;code&gt;other_mac_address.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;For the first parameter of the script, &lt;code&gt;wifi_interface_name&lt;/code&gt;, an easy approach to retrieve the needed value is to hold down &lt;code&gt;Option&lt;/code&gt; key while left-clicking the Wi-Fi icon located in status bar.&lt;/p&gt;

&lt;p&gt;The following image provides an example: the first line (&lt;code&gt;Interface Name&lt;/code&gt;) in the listing gives the needed value for the script, which is &lt;code&gt;en0&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oTk3k6oM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://ayharano.keybase.pub/dev.to/wifi_interface_name.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oTk3k6oM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://ayharano.keybase.pub/dev.to/wifi_interface_name.png" alt="Example image which shows the listing provided after holding Option key while left-clicking Wi-Fi icon located in macOS' status bar." title="Example image which shows the listing provided after holding Option key while left-clicking Wi-Fi icon located in macOS' status bar."&gt;&lt;/a&gt;&lt;/p&gt;

Example image which shows the listing provided after holding Option key while left-clicking Wi-Fi icon located in macOS' status bar.

&lt;p&gt;For the second parameter of the script, &lt;code&gt;other_mac_address&lt;/code&gt;, I will not provide information in this post about how to retrieve a device’s MAC address nor &lt;a href="https://en.wikipedia.org/wiki/MAC_address"&gt;will explain what it comes to be a MAC address&lt;/a&gt;. &lt;a href="https://duckduckgo.com/"&gt;DuckDuckGo&lt;/a&gt;, &lt;a href="https://www.google.com/"&gt;Google&lt;/a&gt; and other search engines are your friends to find about it. The accepted format for the script is &lt;code&gt;xx:xx:xx:xx:xx:xx&lt;/code&gt;, where &lt;code&gt;x&lt;/code&gt; is a hexadecimal value, which means that it can be one of &lt;code&gt;0&lt;/code&gt;, &lt;code&gt;1&lt;/code&gt;, &lt;code&gt;2&lt;/code&gt;, &lt;code&gt;3&lt;/code&gt;, &lt;code&gt;4&lt;/code&gt;, &lt;code&gt;5&lt;/code&gt;, &lt;code&gt;6&lt;/code&gt;, &lt;code&gt;7&lt;/code&gt;, &lt;code&gt;8&lt;/code&gt;, &lt;code&gt;9&lt;/code&gt;, &lt;code&gt;A&lt;/code&gt;, &lt;code&gt;B&lt;/code&gt;, &lt;code&gt;C&lt;/code&gt;, &lt;code&gt;D&lt;/code&gt;, &lt;code&gt;E&lt;/code&gt;, &lt;code&gt;F&lt;/code&gt;, &lt;code&gt;a&lt;/code&gt;, &lt;code&gt;b&lt;/code&gt;, &lt;code&gt;c&lt;/code&gt;, &lt;code&gt;d&lt;/code&gt;, &lt;code&gt;e&lt;/code&gt; or &lt;code&gt;f&lt;/code&gt;. If the Internet-enabled device has a system menu, usually the MAC address information is in it.&lt;/p&gt;

&lt;p&gt;I recorded an &lt;a href="https://asciinema.org/"&gt;asciinema&lt;/a&gt; using &lt;a href="https://www.iana.org/assignments/ethernet-numbers/ethernet-numbers.xhtml"&gt;IANA's MAC address from documentation block&lt;/a&gt; for example purposes. I used the following parameters in the example (DO NOT USE IT IN YOUR ENVIRONMENT):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="c"&gt;# Run captive.sh with IANA's MAC address from documentation block&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;~/captive.sh en0 90:10:ab:12:34:56
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;a href="https://asciinema.org/a/144715"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FWklfD2K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://asciinema.org/a/144715.png" alt="asciicast"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If the embedded version of the recorded asciinema isn't working, &lt;a href="https://asciinema.org/a/144715"&gt;here's a link to the original URL&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For those who were wishing a less technical post to cover the bypass of a captive portal for an Internet-enabled device using this technique, you may comment and I'll try to answer as soon as possible. Hope that this post helps you somehow!&lt;/p&gt;

</description>
      <category>macos</category>
      <category>captiveportal</category>
      <category>bash</category>
      <category>wifi</category>
    </item>
  </channel>
</rss>
