<?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>Apuntes de eduardófilo</title><description>Apuntes varios sobre algunas de las cosas que necesito recordar, principalmente sobre Desarrollo y Sistemas.</description><link>https://apuntes.eduardofilo.es/</link><atom:link href="https://apuntes.eduardofilo.es/rss.xml" rel="self" type="application/rss+xml" /><managingEditor>Eduardo Moreno Lamana</managingEditor><docs>https://github.com/eduardofilo/eduardofilo.mkdocs</docs><language>es</language> <pubDate>Sun, 12 Apr 2026 10:15:39 -0000</pubDate> <lastBuildDate>Sun, 12 Apr 2026 10:15:39 -0000</lastBuildDate> <ttl>1440</ttl> <generator>MkDocs RSS plugin - v1.15.0</generator> <item> <title>G&amp;W Zelda hack</title> <description>&lt;p&gt;&lt;img alt=&#34;Zelda G&amp;amp;W&#34; src=&#34;images/posts/2026-03-08_zelda_gw/zelda_gnw.png&#34; /&gt;&lt;/p&gt;&lt;p&gt;Un conocido fabricante japonés de videojuegos empezó a comercializar a finales de 2022, un par de máquinas replicando el aspecto de algunas de las viejas G&amp;amp;W, sobre la base de un microcontrolador STM32H7 que ejecuta un firmware baremetal con emuladores de NES y GB, tres juegos clásicos y una aplicación reloj inspirados en la franquicia Zelda. La máquina resulta muy interesante por las virtudes de estar basada en un microcontrolador, en lugar de un microprocesador, es decir gran duración de la pequeña batería que contiene (la de un joycon de Switch), arranque y modo suspensión instantáneos. El soporte de datos es un pequeño chip flash NOR de 4MB (en el caso del modelo Zelda), suficiente para alojar los emuladores y juegos mencionados, pero muy escaso si se quiere sacar partido de la máquina y de su relativamente potente CPU.&lt;/p&gt;&lt;p&gt;El firmware original sirve para comprobar la solvencia de la plataforma para emular al menos las máquinas de 8 bit que funcionan originalmente, por lo que en seguida el dispositivo resultó atractivo para la comunidad hacker. Al poco tiempo de empezar a comercializarse ya &lt;a href=&#34;https://www.youtube.com/watch?v=Rsi8p5gbaps&#34;&gt;aparecieron procedimientos para desbloquear y modificar la máquina&lt;/a&gt; de manera que se pudieran instalar más emuladores y juegos.&lt;/p&gt;&lt;p&gt;La primera modificación importante propuesta por la comunidad consistía en sustituir el chip flash por otro de 64MB para disponer de más espacio para juegos y emuladores. Tiempo después la modificación evolucionó para incluir un slot de tarjetas microSD donde almacenar los juegos y savestates, así como para simplificar enormemente el proceso de actualización, convirtiendo a la máquina así modificada en una máquina de emulación portátil inigualable en aspectos como portabilidad, tamaño, duración de la batería y tiempos de arranque.&lt;/p&gt;&lt;p&gt;Con cualquiera de las dos modificaciones se consigue emular las siguientes máquinas:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Amstrad CPC6128 (beta)&lt;/li&gt;&lt;li&gt;Atari 2600&lt;/li&gt;&lt;li&gt;Atari 7800&lt;/li&gt;&lt;li&gt;ColecoVision&lt;/li&gt;&lt;li&gt;Gameboy / Gameboy Color&lt;/li&gt;&lt;li&gt;Game &amp;amp; Watch / LCD Games&lt;/li&gt;&lt;li&gt;MSX1/2/2+&lt;/li&gt;&lt;li&gt;Nintendo Entertainment System&lt;/li&gt;&lt;li&gt;PC Engine / TurboGrafx-16&lt;/li&gt;&lt;li&gt;Pokémon Mini&lt;/li&gt;&lt;li&gt;Sega Game Gear&lt;/li&gt;&lt;li&gt;Sega Genesis / Megadrive&lt;/li&gt;&lt;li&gt;Sega Master System&lt;/li&gt;&lt;li&gt;Sega SG-1000&lt;/li&gt;&lt;li&gt;Tamagotchi P1&lt;/li&gt;&lt;li&gt;Watara Supervision&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;En este artículo vamos a describir los pasos para realizar las dos modificaciones. La modificación para añadir el slot microSD requiere también la sustitución de la flash, ya que cada vez que carguemos un juego nuevo de la microSD se grabará en el chip flash, y el original de 4MB soporta pocos ciclos de escritura dado que no estaba previsto que se utilizara de esta forma.&lt;/p&gt;&lt;p&gt;Todo el proceso ha sido realizado sobre un sistema Linux. En principio el desarrollo sobre sistemas Windows y MacOS X también es posible, pero los pasos para instalar los requerimientos y el software que utilizaremos necesariamente cambiarán.&lt;/p&gt;&lt;h2 id=&#34;conexion-al-puerto-swd&#34;&gt;Conexión al puerto SWD&lt;a class=&#34;headerlink&#34; href=&#34;#conexion-al-puerto-swd&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;El desbloqueo del procesador y la modificación del firmware se hacen a través del puerto SWD que habitualmente tienen los microcontroladores STM32 para programar su memoria flash interna y depurar los desarrollos. Este puerto SWD se encuentra en la PCB sin poblar, es decir sin pines o conectores soldados.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;SWD&#34; src=&#34;images/posts/2026-03-08_zelda_gw/swd.jpg&#34; /&gt;&lt;/p&gt;&lt;p&gt;Para hacer la conexión con dicho puerto hay varias opciones:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Soldar cables directamente.&lt;/li&gt;&lt;li&gt;Introducir cables limpios o cables de pin macho, inclinándolos para forzar el contacto.&lt;/li&gt;&lt;li&gt;Utilizar &lt;a href=&#34;https://www.amazon.es/gp/product/B009UOHE1K/&#34;&gt;pinzas sonda de conexión&lt;/a&gt; especializadas.&lt;/li&gt;&lt;li&gt;Utilizar &lt;a href=&#34;https://es.aliexpress.com/item/1005007602295920.html&#34;&gt;pinzas pogo pin&lt;/a&gt; (Single row 5pin).&lt;/li&gt;&lt;li&gt;Rutear los pines SWDIO y SWCLK hacia el puerto USB-C.&lt;/li&gt;&lt;/ul&gt;&lt;h4 id=&#34;version-dificil&#34;&gt;Versión difícil&lt;a class=&#34;headerlink&#34; href=&#34;#version-dificil&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Como empecé a cacharrear con la máquina antes de que apareciera el mod de microSD, en su momento realicé el ruteado del puerto SWD al USB-C. Si se va a terminar realizando el mod de microSD no merece la pena el esfuerzo, dado que a partir de entonces el flasheo del firmware se realizará desde la propia microSD. De todas formas, a propósitos de documentación vamos a describir cómo se haría el ruteado.&lt;/p&gt;&lt;p&gt;El puerto USB-C sólo tiene conectados los pines de alimentación ya que está previsto únicamente para cargar la máquina. Por tanto se pueden utilizar los pines D+ y D- que están libres para cablearlos a los pines SWDIO y SWCLK que son los únicos imprescindibles del puerto SWD. Necesitaremos también conectar a 5V y GND, pero estos ya se encuentran cableados en el puerto USB-C. El ruteado se hace con un fino cable barnizado (enamel) de los que se utilizan para construir bobinas. La soldadura a los dos pines centrales del puerto USB-C que son los que corresponden a D+ y D- es complicada al tener un paso muy pequeño, pero con paciencia y flux puede lograrse.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Ruteado USB-C&#34; src=&#34;images/posts/2026-03-08_zelda_gw/ruteado_usb-c_1.jpg&#34; /&gt;&lt;/p&gt;&lt;p&gt;Una vez resuelto la única parte difícil del procedimiento, es decir soldar los cables al puerto USB, estos se van sujetando cada cierta distancia con cinta Kapton y dirigiendo hacia la zona de la batería por donde se aprovecha el rebaje a ambos lados que hay del alojamiento que la rodea para pasar uno de los cables. El otro se conduce por el espacio que hay entre alojamiento de la batería y la PCB. De esta forma se consigue que ambos cables no puedan tocarse, aunque en teoría al estar barnizados no debería haber problema, se adopta este camino separado como precaución adicional.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Ruteado USB-C&#34; src=&#34;images/posts/2026-03-08_zelda_gw/ruteado_usb-c_2.jpg&#34; /&gt;&lt;/p&gt;&lt;p&gt;Una vez que los cables alcanzan las proximidades del puerto SWD, se utilizan los dos test pads que pueden verse en la foto para realizar las soldaduras.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Ruteado USB-C&#34; src=&#34;images/posts/2026-03-08_zelda_gw/ruteado_usb-c_3.jpg&#34; /&gt;&lt;/p&gt;&lt;p&gt;La correspondencia entre D+ y D- en el puerto USB-C con los SWDIO y SWCLK del puerto SWD, puede hacerse de cualquier forma siempre que tengamos claro donde está cada cual para más tarde hacer el adaptador USB-SWD que necesitaremos. En este montaje se ha optado por la siguiente correspondencia.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;D+ ↔ SWDIO&lt;/li&gt;&lt;li&gt;D- ↔ SWCLK&lt;/li&gt;&lt;/ul&gt;&lt;div class=&#34;admonition warning&#34;&gt;&lt;p class=&#34;admonition-title&#34;&gt;Warning&lt;/p&gt;&lt;p&gt;La idea en un principio era adoptar la correspondencia utilizada en &lt;a href=&#34;https://facelesstech.wordpress.com/2022/01/08/game-and-watch-hacking-with-rpi/&#34;&gt;esta otra guía&lt;/a&gt;, pero por un error cometido al principio, se terminó haciendo justo al revés. Como se comentaba antes, en realidad no es problema siempre que se tenga claro cómo están hechas las conexiones. Este aviso es sólo por si alguien intenta seguir ambas guías de forma simultánea, para que se tenga en cuenta dicha diferencia.&lt;/p&gt;&lt;/div&gt;&lt;p&gt;Una vez hecho el ruteado del puerto, necesitaremos construir el adaptador para poder extraer las señales SWDIO y SWCLK del puerto USB-C. Para ello se corta un cable USB-A convencional para tener acceso a los cuatro cables que contiene por separado y se sueldan a ellos conectores hembra de pin. El adaptador se completa con un adaptador USB-A a USB-C que se marca para orientarlo correctamente cuando lo vayamos a utilizar, ya que sólo hemos ruteado los pines D+ y D- de uno de los dos lados (el puerto USB-C es reversible).&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Adaptador USB-C SWD&#34; src=&#34;images/posts/2026-03-08_zelda_gw/adaptador_usb-c_swd.jpg&#34; /&gt;&lt;/p&gt;&lt;p&gt;Los colores de los cables suelen estar estandarizados de la siguiente forma:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Rojo: 5V&lt;/li&gt;&lt;li&gt;Negro: GND&lt;/li&gt;&lt;li&gt;Verde: D+&lt;/li&gt;&lt;li&gt;Blanco: D-&lt;/li&gt;&lt;/ul&gt;&lt;h4 id=&#34;version-facil&#34;&gt;Versión fácil&lt;a class=&#34;headerlink&#34; href=&#34;#version-facil&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;La manera recomendada para hacer la conexión al puerto SWD (si no se quiere soldar, que es la opción más fiable) es mediante &lt;a href=&#34;https://www.amazon.es/gp/product/B009UOHE1K/&#34;&gt;pinzas sonda de conexión&lt;/a&gt; especializadas. Para aplicar dichas pinzas, es recomendable desconectar previamente la batería de la consola. El conector de la batería salta fácilmente al introducir una pieza fina de plástico por debajo del mismo.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Pinzas conexión GnW&#34; src=&#34;images/posts/2026-03-08_zelda_gw/pinzas_conexion_gnw.jpg&#34; /&gt;&lt;/p&gt;&lt;h2 id=&#34;sonda-de-programacion&#34;&gt;Sonda de programación&lt;a class=&#34;headerlink&#34; href=&#34;#sonda-de-programacion&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Ya tenemos resuelto dónde conectar en la consola. Ahora necesitamos un dispositivo capaz de comunicarse con ese puerto SWD del microcontrolador. Las opciones son:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;https://www.raspberrypi.com/products/raspberry-pi-pico/&#34;&gt;Raspberry Pi Pico&lt;/a&gt; (Recomendado)&lt;/li&gt;&lt;li&gt;&lt;a href=&#34;https://www.st.com/en/development-tools/st-link-v2.html&#34;&gt;STLink&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&#34;https://www.segger.com/products/debug-probes/j-link/#models&#34;&gt;JLink&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&#34;https://daplink.io/&#34;&gt;DAPLink&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&#34;https://projects.raspberrypi.org/en/projects/physical-computing/1&#34;&gt;Raspberry Pi (GPIO)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Me decanté por usar una Raspberry Pi Pico. Para que funcione como sonda de programación SWD hay que cargarle el firmware &lt;a href=&#34;https://github.com/raspberrypi/debugprobe&#34;&gt;debugprobe&lt;/a&gt;. En mi caso utilicé el fichero &lt;a href=&#34;https://github.com/raspberrypi/debugprobe/releases/download/picoprobe-cmsis-v1.0.3/picoprobe.uf2&#34;&gt;picoprobe.uf2&lt;/a&gt; de &lt;a href=&#34;https://github.com/raspberrypi/debugprobe/releases/tag/picoprobe-cmsis-v1.0.3&#34;&gt;esta release&lt;/a&gt; en concreto. Para flashear la Pico sólo hay que conectarla al ordenador por USB mientras pulsamos el botón &lt;code&gt;BOOTSEL&lt;/code&gt; para forzar el modo en el que se monta como una unidad de almacenamiento y arrastrar el fichero &lt;code&gt;.uf2&lt;/code&gt; a esa unidad. Tras autoflashearse, la Pico se reiniciará automáticamente y empezará a funcionar como sonda de programación SWD.&lt;/p&gt;&lt;p&gt;Una vez programada la Pico, solo queda hacer las conexiones de los cables que habíamos conectado al puerto SWD de la Game&amp;amp;Watch. Podemos utilizar el mismo tipo de pinzas que aplicamos a la consola, aunque en mi caso utilicé otras similares pero un poco más robustas, ya que el espaciado de los pines GPIO de la Pico es mucho mayor.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Pinzas conexión Pico&#34; src=&#34;images/posts/2026-03-08_zelda_gw/pinzas_conexion_pico.jpg&#34; /&gt;&lt;/p&gt;&lt;p&gt;El conexionado entre Game&amp;amp;Watch y Raspberry Pi Pico es:&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&#34;text-align: left;&#34;&gt;Pico&lt;/th&gt;&lt;th style=&#34;text-align: left;&#34;&gt;GnW&lt;/th&gt;&lt;th style=&#34;text-align: left;&#34;&gt;Color&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&#34;text-align: left;&#34;&gt;3&lt;/td&gt;&lt;td style=&#34;text-align: left;&#34;&gt;3&lt;/td&gt;&lt;td style=&#34;text-align: left;&#34;&gt;Negro&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&#34;text-align: left;&#34;&gt;4&lt;/td&gt;&lt;td style=&#34;text-align: left;&#34;&gt;5&lt;/td&gt;&lt;td style=&#34;text-align: left;&#34;&gt;Blanco&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&#34;text-align: left;&#34;&gt;5&lt;/td&gt;&lt;td style=&#34;text-align: left;&#34;&gt;2&lt;/td&gt;&lt;td style=&#34;text-align: left;&#34;&gt;Verde&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;img alt=&#34;GnW - Pico&#34; src=&#34;images/posts/2026-03-08_zelda_gw/gnw_pico.png&#34; /&gt;&lt;/p&gt;&lt;h2 id=&#34;desbloqueo-del-microcontrolador&#34;&gt;Desbloqueo del microcontrolador&lt;a class=&#34;headerlink&#34; href=&#34;#desbloqueo-del-microcontrolador&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Una vez resuelta la conectividad a la placa, el primer paso en la modificación es el desbloqueo del microcontrolador STM32H7 para que podamos sustituir el firmware que hay en su memoria flash interna así como poder escribir en la memoria flash externa (con código que inyectaremos en el propio microcontrolador).&lt;/p&gt;&lt;p&gt;Esta tarea se efectúa con el conjunto de utilidades &lt;a href=&#34;https://github.com/BrianPugh/gnwmanager&#34;&gt;gnwmanager&lt;/a&gt;. Este paquete se encuentra registrado en &lt;a href=&#34;https://pypi.org/project/gnwmanager/&#34;&gt;PyPI&lt;/a&gt; por lo que se puede instalar muy fácilmente con &lt;code&gt;pip&lt;/code&gt; (preferiblemente dentro de un entorno virtual Python).&lt;/p&gt;&lt;p&gt;&lt;code&gt;bash$ pip install gnwmanager$ gnwmanager install openocd&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Ahora, tras volver a conectar la batería de la consola si la habíamos desconectado, ejecutaremos el siguiente comando:&lt;/p&gt;&lt;p&gt;&lt;code&gt;(gnwmanager) $ gnwmanager unlock&lt;/code&gt;&lt;/p&gt;&lt;p&gt;El proceso se interrumpirá en un par de ocasiones dando instrucciones por la terminal que deberemos seguir. Una salida típica sería:&lt;/p&gt;&lt;p&gt;```(gnwmanager) [edu@thinkpad ~]$ gnwmanager unlock&lt;/p&gt;&lt;p&gt;If interrupted, resume unlocking with: gnwmanager unlock --backup-dir=backups-2025-10-27-19-28-14&lt;/p&gt;&lt;p&gt;Detected ZELDA game and watch.Backing up itcm to &#34;backups-2025-10-27-19-28-14/itcm_backup_zelda.bin&#34;... complete!Backing up external flash to &#34;backups-2025-10-27-19-28-14/flash_backup_zelda.bin&#34;... complete!Flashing payload to external flash... complete!&lt;/p&gt;&lt;p&gt;Payload successfully flashed. Perform the following steps:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Fully remove power, then re-apply power.&lt;/li&gt;&lt;li&gt;Press the power button to turn on the device; the screen should turn blue.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Press the &#34;enter&#34; key when the screen is blue: Backing up internal flash to &#34;backups-2025-10-27-19-28-14/internal_flash_backup_zelda.bin&#34;... complete!Unlocking device... complete!Restoring firmware... complete!Unlocking complete!Pressing the power button should launch the original firmware.```&lt;/p&gt;&lt;p&gt;Aparecerán los ficheros &lt;code&gt;internal_flash_backup_zelda.bin&lt;/code&gt;, &lt;code&gt;flash_backup_zelda.bin&lt;/code&gt; y &lt;code&gt;itcm_backup_zelda.bin&lt;/code&gt; en un directorio &lt;code&gt;backups-FECHA-HORA&lt;/code&gt; que conviene guardar.&lt;/p&gt;&lt;p&gt;Si encendemos en este momento la consola, no notaremos ningún cambio, es decir ejecutará el firmware original, pero ahora el chip estará desprotegido y podremos flashearle otro firmware.&lt;/p&gt;&lt;h2 id=&#34;modificacion-1-retro-go&#34;&gt;Modificación 1: retro-go&lt;a class=&#34;headerlink&#34; href=&#34;#modificacion-1-retro-go&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;h4 id=&#34;sustitucion-de-la-flash&#34;&gt;Sustitución de la flash&lt;a class=&#34;headerlink&#34; href=&#34;#sustitucion-de-la-flash&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;En este momento toca empezar a modificar la consola seriamente. Como se comentaba al principio, el chip de almacenamiento externo del microcontrolador es una memoria flash de solo 4MB (modelo Zelda). No solo es pequeño para poder cargar muchos juegos, sino que tiene pocos ciclos de escritura, por lo que sustituir los juegos frecuentemente, o cachearlos cuando se hace la modificación para añadir la microSD, puede desgastarlo rápidamente. La modificación habitual es desoldar el chip flash de 4MB original y sustituirlo por otro de 64MB, concretamente el modelo &lt;a href=&#34;https://es.aliexpress.com/item/1005005138227815.html&#34;&gt;MX25U51245GZ4I00&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Para retirar el chip flash original, es muy recomendable extraer la placa de la consola, desconectando las dos fajas de datos de la pantalla, desoldando el altavoz y retirando todos los tornillos. Una vez que tengamos la placa sobre la mesa de trabajo, protegemos con cinta kapton los alrededores del chip y lo extraemos aplicando flux y aire caliente con una pistola.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Retirar chip flash original 1&#34; src=&#34;images/posts/2026-03-08_zelda_gw/mod_flash_1.jpg&#34; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Retirar chip flash original 2&#34; src=&#34;images/posts/2026-03-08_zelda_gw/mod_flash_2.jpg&#34; /&gt;&lt;/p&gt;&lt;p&gt;A continuación limpiamos con malla desoldadora la huella del chip que acabamos de retirar. También, aunque hay que hacerlo con sumo cuidado, ayuda rascar (con la punta de las pinzas por ejemplo) la máscara de soldadura de la PCB para ampliar hacia el exterior la superficie soldable de la huella de soldadura del chip.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Retirar chip flash original 3&#34; src=&#34;images/posts/2026-03-08_zelda_gw/mod_flash_3.jpg&#34; /&gt;&lt;/p&gt;&lt;p&gt;El nuevo chip flash tiene formato QFN-8 de soldadura superficial que no resulta sencillo de soldar. Es recomendable aplicar flux y preestañar los pads de dicho chip por la parte inferior. También recomiendo poner una tira de cinta kapton en la parte inferior de manera que este no quede directamente apoyado sobre la PCB, lo que dificultaría el flujo de estaño por los pads.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Nuevo chip flash&#34; src=&#34;images/posts/2026-03-08_zelda_gw/new_flash.jpg&#34; /&gt;&lt;/p&gt;&lt;p&gt;Hay que fijarse bien en el punto que lleva el chip en su encapsulado que marca el pin número 1 que se corresponde con el que tiene un triángulo indicador en la PCB como se puede ver en la segunda foto de las siguientes.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Retirar chip flash original 4&#34; src=&#34;images/posts/2026-03-08_zelda_gw/mod_flash_4.jpg&#34; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Retirar chip flash original 5&#34; src=&#34;images/posts/2026-03-08_zelda_gw/mod_flash_5.jpg&#34; /&gt;&lt;/p&gt;&lt;h4 id=&#34;flasheo-retro-go&#34;&gt;Flasheo retro-go&lt;a class=&#34;headerlink&#34; href=&#34;#flasheo-retro-go&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Una vez instalado el chip, es hora de flashear el firmware. Para esta modificación, me decanto por no hacer dual boot, es decir no instalar el firmware original parcheado junto a retro-go, para así tener todo el espacio de la memoria flash dedicado a los juegos. Para ello empezamos bajando el repositorio del mismo:&lt;/p&gt;&lt;p&gt;&lt;code&gt;bashcd ~/gitgit clone --recursive https://github.com/sylverb/game-and-watch-retro-go -b filesystem_wipcd game-and-watch-retro-go&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Una vez bajado el código, toca instalar las ROMs en los directorios correspondientes a las distintas máquinas soportadas que encontraremos en &lt;code&gt;~/git/game-and-watch-retro-go/roms/&lt;/code&gt;. Por ejemplo, para instalar las ROMs de NES, copiamos las ROMs a &lt;code&gt;~/git/game-and-watch-retro-go/roms/nes/&lt;/code&gt;. Si queremos portadillas para los juegos, situaremos en los mismos directorios y con los mismos nombres de fichero de las ROMs correspondientes, las imágenes en formato jpg o png. Por ejemplo, para la ROM &lt;code&gt;zelda.nes&lt;/code&gt;, situaremos la portada en &lt;code&gt;~/git/game-and-watch-retro-go/roms/nes/zelda.jpg&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;Tenemos que tener en cuenta que todas las ROMs y sus portadillas tienen que caber en el chip flash de 64 MB que hemos instalado a la consola. La mayoría de las ROMs se comprimen, por lo que como regla de partida, utilizaremos el criterio de elegir ROMs por un tamaño total de aproximadamente el doble (128MB).&lt;/p&gt;&lt;p&gt;Ahora toca compilar el firmware (si no vamos a utilizar portadillas para aprovechar el espacio de sus ficheros para poder poner más ROMs, no incluir las variables de entorno &lt;code&gt;COVERFLOW&lt;/code&gt; y &lt;code&gt;JPG_QUALITY&lt;/code&gt; en los comandos de compilación y flasheo):&lt;/p&gt;&lt;p&gt;```bashmake docker_buildmake docker&lt;/p&gt;&lt;p&gt;(docker) gnwmanager install openocd(docker) export GNW_TARGET=zelda(docker) export ADAPTER=cmsis-dap(docker) make clean(docker) COVERFLOW=1 JPG_QUALITY=90 EXTFLASH_SIZE_MB=64 make -j$(nproc)```&lt;/p&gt;&lt;p&gt;Al terminar la compilación se nos informará del tamaño resultante del binario que se flasheará en el chip. Por ejemplo:&lt;/p&gt;&lt;p&gt;&lt;code&gt;External flash usage Capacity: 61050880 Bytes ( 58.223 MB) Usage: 54335345 Bytes ( 51.818 MB) Free: 6715535 Bytes ( 6.404 MB)&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Con esa información a la vista podremos iterar el proceso añadiendo o retirando ROMs hasta obtener un binario de unos 55MB, ya que hay que prever algo para los savestates de los juegos.&lt;/p&gt;&lt;p&gt;Una vez que estemos satisfechos con la ocupación del espacio, flashearemos el firmware volviendo a conectar la sonda de programación que comentamos en el apartado &lt;a href=&#34;#sonda-de-programacion&#34;&gt;Sonda de programación&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;code&gt;bash(docker) COVERFLOW=1 JPG_QUALITY=90 EXTFLASH_SIZE_MB=64 make flash&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Una salida típica sería:&lt;/p&gt;&lt;p&gt;&lt;code&gt;bashdocker@53335bdd9199:/opt/workdir$ COVERFLOW=1 JPG_QUALITY=90 EXTFLASH_SIZE_MB=64 make flash_gnwmanagerEntering &#39;LCD-Game-Emulator&#39;Entering &#39;blueMSX-go&#39;Entering &#39;caprice32-go&#39;Entering &#39;fceumm-go&#39;Entering &#39;gwenesis&#39;Entering &#39;potator&#39;Entering &#39;prosystem-go&#39;Entering &#39;retro-go-stm32&#39;Entering &#39;smw&#39;Entering &#39;tamalib&#39;Entering &#39;zelda3&#39;[ BASH ] Checking for updated roms100%|█████████████████████████████████████████████████████████████████| 208/208 [04:20&amp;lt;00:00, 1.25s/it]&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Es importante que guardemos el fichero &lt;code&gt;build/gw_retro_go.elf&lt;/code&gt; porque lo necesitaremos para extraer los savestates en el futuro.&lt;/p&gt;&lt;h4 id=&#34;respaldar-savestates-retro-go&#34;&gt;Respaldar savestates retro-go&lt;a class=&#34;headerlink&#34; href=&#34;#respaldar-savestates-retro-go&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Si más adelante queremos extraer los savestates de los juegos, para poder volverlos a instalar tras flashear un nuevo firmware, en primer lugar necesitaremos depositar en el directorio &lt;code&gt;build&lt;/code&gt; el fichero &lt;code&gt;gw_retro_go.elf&lt;/code&gt; que obtuvimos en el paso anterior. Después podremos arrancar de nuevo el entorno docker y ejecutar el script de backup:&lt;/p&gt;&lt;p&gt;```bashcd ~/git/game-and-watch-retro-gomake docker&lt;/p&gt;&lt;p&gt;(docker) export GNW_TARGET=zelda(docker) export ADAPTER=cmsis-dap(docker) ./scripts/saves_backup.sh build/gw_retro_go.elf```&lt;/p&gt;&lt;p&gt;Los savestates aparecerán en el subdirectorio &lt;code&gt;~/git/game-and-watch-retro-go/save_states&lt;/code&gt;. Una vez que hayamos compilado y flasheado un nuevo firmware, podremos restaurarlos ejecutando el script de restauración:&lt;/p&gt;&lt;p&gt;&lt;code&gt;bash(docker) ./scripts/saves_restore.sh&lt;/code&gt;&lt;/p&gt;&lt;p&gt;La restauración se hace de forma inteligente, es decir, si tenemos savestates de un juego que no está en el nuevo firmware, dicho savestate no se instalará en la consola, para evitar desperdiciar espacio de la memoria flash.&lt;/p&gt;&lt;h2 id=&#34;modificacion-2-retro-go-sd&#34;&gt;Modificación 2: retro-go-sd&lt;a class=&#34;headerlink&#34; href=&#34;#modificacion-2-retro-go-sd&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;h4 id=&#34;instalacion-modulo-slot-microsd&#34;&gt;Instalación módulo slot microSD&lt;a class=&#34;headerlink&#34; href=&#34;#instalacion-modulo-slot-microsd&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Al igual que con la modificación para el retro-go normal, para utilizar retro-go-sd hay que empezar haciendo una modificación hardware a la consola. Esta vez es más complicada, sobre todo la fase final de soldadura del módulo directamente sobre las patitas del microcontrolador, que tienen un paso muy pequeño.&lt;/p&gt;&lt;p&gt;El módulo se compone del propio lector de tarjetas microSD y 4 componentes. Todo ello soldado sobre una PCB tipo flex. La lista de componentes completa es:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;1 &lt;a href=&#34;https://es.aliexpress.com/item/1005008902154552.html&#34;&gt;lector de tarjetas microSD&lt;/a&gt;&lt;/li&gt;&lt;li&gt;1 &lt;a href=&#34;https://es.aliexpress.com/item/1005005677654015.html&#34;&gt;resistencia 100kΩ 0603&lt;/a&gt; o 0805&lt;/li&gt;&lt;li&gt;2 &lt;a href=&#34;https://es.aliexpress.com/item/1005003512666695.html&#34;&gt;condensadores de 1μF 0603&lt;/a&gt; o 0805&lt;/li&gt;&lt;li&gt;1 &lt;a href=&#34;https://es.aliexpress.com/item/1005007136710461.html&#34;&gt;regulador de tensión RT9193-28GB&lt;/a&gt;. Hay personas que han reportado problemas con este modelo comprado en Aliexpress y recomiendan como reemplazo el &#34;MIC5504-2.8YM5-TR&#34;.&lt;/li&gt;&lt;li&gt;1 PCB flex: Aquí se utiliza la versión de &lt;a href=&#34;https://github.com/sylverb/game-and-watch-retro-go-sd/raw/refs/heads/main/assets/MicroSD_Zelda_Final.zip&#34;&gt;PrimoAngelo&lt;/a&gt;. La original que suele referenciarse en la mayoría de las guías es la de &lt;a href=&#34;https://github.com/sylverb/game-and-watch-retro-go-sd/raw/refs/heads/main/assets/GnW_SD_v2.zip&#34;&gt;Tim Schuerewegen / hundshamer&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Empezaremos soldando los componentes sobre el PCB flex.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Módulo microSD&#34; src=&#34;images/posts/2026-03-08_zelda_gw/mod_msd_1.jpg&#34; /&gt;&lt;/p&gt;&lt;p&gt;Lo siguiente como decíamos al principio será el difícil paso de instalar el módulo en la consola. Retiramos los cuatro tornillos que caen en su superficie y lo presentamos de forma que consigamos que los pads de la flex se encuentren alineados con las patitas del microcontrolador a la vez que estos quedan a sus pies, es decir de esta forma.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Módulo microSD&#34; src=&#34;images/posts/2026-03-08_zelda_gw/mod_msd_2.png&#34; /&gt;&lt;/p&gt;&lt;p&gt;Una vez que se encuentre alineado a nuestro gusto, procederemos a fijarlo en su posición atornillando los cuatro tornillos. Ahora será cuando tendremos que armarnos de paciencia y flux de buena calidad para lograr hacer las soldaduras de los pads del flex y evitar a la vez los puentes entre las mismas. Será necesario comprobar continuidad de las soldaduras así como la no existencia de puentes entre las patitas adyacentes. Si finalmente lo conseguimos, solo resta añadir un punto de soldadura entre el pad marcado con &lt;code&gt;+4V&lt;/code&gt; y el terminal del condensador que queda a su lado.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Módulo microSD&#34; src=&#34;images/posts/2026-03-08_zelda_gw/mod_msd_3.jpg&#34; /&gt;&lt;/p&gt;&lt;h4 id=&#34;flasheo-bootloader&#34;&gt;Flasheo bootloader&lt;a class=&#34;headerlink&#34; href=&#34;#flasheo-bootloader&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Lo siguiente será flashear el bootloader junto al firmware original parcheado de la consola para permitir el dual boot (esta vez sí merece la pena al contar con espacio prácticamente ilimitado para ROMs en la microSD). Desde el directorio donde estén los ficheros de backup de la consola y con un entorno Python que tenga instalado &lt;code&gt;gnwmanager&lt;/code&gt;, ejecutaremos el siguiente comando:&lt;/p&gt;&lt;p&gt;&lt;code&gt;bash(gnwmanager) $ gnwmanager flash-patch zelda internal_flash_backup_zelda.bin flash_backup_zelda.bin --bootloader&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Una salida típica sería:&lt;/p&gt;&lt;p&gt;&lt;code&gt;bash(gnwmanager) $ gnwmanager flash-patch zelda internal_flash_backup_zelda.bin flash_backup_zelda.bin --bootloader100%|███████████████████████████████████████████████████████████████████| 16/16 [00:58&amp;lt;00:00, 3.66s/it]&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Si encendemos en ese momento la consola, tras haber retirado la sonda de programación, veremos que arranca el firmware original (parcheado). Tras pulsar &lt;code&gt;GAME + LEFT&lt;/code&gt; se ejecutará el bootloader y, como en ese momento Retro-Go SD todavía no estará instalado en la flash interna del STM32, se nos muestrará el siguiente aviso:&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Aviso del bootloader&#34; src=&#34;images/posts/2026-03-08_zelda_gw/bootloader_warning.jpg&#34; /&gt;&lt;/p&gt;&lt;h4 id=&#34;instalacion-de-retro-go-sd&#34;&gt;Instalación de Retro-Go SD&lt;a class=&#34;headerlink&#34; href=&#34;#instalacion-de-retro-go-sd&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Solo nos restará instalar el firmware de Retro-Go SD. Para ello, copiaremos el fichero &lt;code&gt;retro-go_update.bin&lt;/code&gt; que descargaremos de la última release publicada por Sylverb en el &lt;a href=&#34;https://github.com/sylverb/game-and-watch-retro-go-sd/releases&#34;&gt;repositorio de Retro-Go SD&lt;/a&gt; al directorio raíz de la microSD. Al arrancar por primera vez, veremos en pantalla cómo se copian los ficheros de retro-go y los cores de los emuladores a la misma microSD.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Instalación de Retro-Go SD&#34; src=&#34;images/posts/2026-03-08_zelda_gw/retro-go_update.jpg&#34; /&gt;&lt;/p&gt;&lt;p&gt;A la vez se creará en la microSD la estructura de directorios siguiente:&lt;/p&gt;&lt;p&gt;&lt;code&gt;retro-go/├── CONFIG├── bios/│ ├── coleco/│ ├── msx/│ ├── nes/├── cores/│ ├── mappers/│ ├── a2600.bin│ ├── a2600_defprops.bin│ ├── a7800.bin│ └── ...├── data/│ ├── a2600/│ ├── a7800/│ ├── amstrad/│ └── ...├── fonts/│ ├── cp1251_greybeard.bin│ ├── cp1251_sans_serif.bin│ ├── cp1251_sans_serif_bold.bin│ └── ...└── roms/ ├── a2600/ ├── a7800/ ├── amstrad/ └── ...&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Sólo restará copiar las ROMs que queramos emular en los directorios correspondientes. Si queremos portadillas para los juegos, tendremos que crear el subdirectorio &lt;code&gt;covers&lt;/code&gt; con los mismos subdirectorios del directorio &lt;code&gt;roms&lt;/code&gt; y colocar allí las imágenes. Estas tienen que estar en un formato especial IMG que generaremos con un &lt;a href=&#34;https://github.com/sylverb/game-and-watch-retro-go-sd/blob/main/README.md#cover-art-generator-gencoverspy&#34;&gt;script que se incluye en el repositorio de Retro-Go SD&lt;/a&gt;. Los nombres de los archivos IMG tendrán que coincidir con los de las ROMs en su correspondiente directorio.&lt;/p&gt;&lt;h4 id=&#34;carcasa-trasera&#34;&gt;Carcasa trasera&lt;a class=&#34;headerlink&#34; href=&#34;#carcasa-trasera&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Al colocar el slot microSD hay que modificar la tapa trasera de la consola puesto que el lector cae sobre unos postes de apoyo de la cruceta. También hay que perforar el lateral para dejar paso a la microSD para poder extraerla e insertarla cuando queramos cambiar los juegos, rescatar savestates o actualizar el firmware. Para realizar la perforación &lt;a href=&#34;https://www.printables.com/model/1269910-zelda-game-and-watch-sd-card-drill-jig/files&#34;&gt;existen unos utillajes&lt;/a&gt; diseñados por el usuario facelesstech que ayudan mucho a que la ranura quede limpia. En el vídeo que hay al final de este artículo, puede verse cómo se realiza esta modificación.&lt;/p&gt;&lt;p&gt;Existe una alternativa si no queremos arriesgarnos a estropear definitivamente la tapa original, y es imprimir en 3D el modelo creado por el usuario Aradia y que puede descargarse de &lt;a href=&#34;https://github.com/sylverb/game-and-watch-retro-go-sd/raw/refs/heads/main/assets/GnW_Zelda_back_shell.stl&#34;&gt;aquí&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Carcasa trasera&#34; src=&#34;images/posts/2026-03-08_zelda_gw/carcasa.jpg&#34; /&gt;&lt;/p&gt;&lt;p&gt;El color verde que he encontrado más parecido al de la consola Zelda es el &lt;a href=&#34;https://www.amazon.es/dp/B0DHKZCL75&#34;&gt;15-Verde de OVERTURE&lt;/a&gt;.&lt;/p&gt;&lt;h2 id=&#34;controles&#34;&gt;Controles&lt;a class=&#34;headerlink&#34; href=&#34;#controles&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Indicamos a continuación las combinaciones de teclas de manejo de Retro-go SD (aunque muchas de ellas funcionan también en Retro-go). Manteniendo pulsado el botón &lt;code&gt;PAUSE/SET&lt;/code&gt; mientras se presionan otros botones se realizan las siguientes acciones:&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Combinación de teclas&lt;/th&gt;&lt;th&gt;Acción&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;PAUSE/SET&lt;/code&gt; + &lt;code&gt;GAME&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Guardar una captura de pantalla (deshabilitado por defecto en builds con flash de 1MB)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;PAUSE/SET&lt;/code&gt; + &lt;code&gt;TIME&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Cambiar velocidad de ejecución (1x/1.5x)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;PAUSE/SET&lt;/code&gt; + &lt;code&gt;UP&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Aumentar brillo&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;PAUSE/SET&lt;/code&gt; + &lt;code&gt;DOWN&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Disminuir brillo&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;PAUSE/SET&lt;/code&gt; + &lt;code&gt;RIGHT&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Aumentar volumen&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;PAUSE/SET&lt;/code&gt; + &lt;code&gt;LEFT&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Disminuir volumen&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;PAUSE/SET&lt;/code&gt; + &lt;code&gt;B&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Cargar state&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;PAUSE/SET&lt;/code&gt; + &lt;code&gt;A&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Guardar state&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;PAUSE/SET&lt;/code&gt; + &lt;code&gt;A&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Autodisparo en botón A&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;PAUSE/SET&lt;/code&gt; + &lt;code&gt;B&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Autodisparo en botón B&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;PAUSE/SET&lt;/code&gt; + &lt;code&gt;POWER&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Apagar sin guardar savestate&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;PAUSE/SET&lt;/code&gt; + &lt;code&gt;POWER&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Después de haber hecho &lt;code&gt;PAUSE/SET&lt;/code&gt; y seleccionar &lt;code&gt;Power off&lt;/code&gt;, arrancará el bootloader sin llegar a llamar a Retro-go, lo que nos permitirá ver la versión del bootloader así como información sobre la detección de la microSD y el estado de las memorias flash interna y externa&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h2 id=&#34;referencias&#34;&gt;Referencias&lt;a class=&#34;headerlink&#34; href=&#34;#referencias&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;No quiero terminar sin hacer mención al servidor de Discord de &lt;a href=&#34;https://discord.gg/TKjHZ5yV&#34;&gt;stacksmashing&lt;/a&gt; y a los siguientes usuarios cuyo trabajo ha hecho posible estas modificaciones:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;stacksmashing&lt;/li&gt;&lt;li&gt;kbeckmann&lt;/li&gt;&lt;li&gt;Tim Schuerewegen&lt;/li&gt;&lt;li&gt;BrianPugh&lt;/li&gt;&lt;li&gt;GMMan&lt;/li&gt;&lt;li&gt;tfmoe__&lt;/li&gt;&lt;li&gt;Sylver Bruneau&lt;/li&gt;&lt;li&gt;facelesstech&lt;/li&gt;&lt;li&gt;DasBoss&lt;/li&gt;&lt;li&gt;bxhxx&lt;/li&gt;&lt;li&gt;Benjamin Solberg&lt;/li&gt;&lt;li&gt;orzeus&lt;/li&gt;&lt;li&gt;ducalex&lt;/li&gt;&lt;li&gt;ZimM&lt;/li&gt;&lt;li&gt;Ninoh-FOX&lt;/li&gt;&lt;li&gt;PrimoAngelo&lt;/li&gt;&lt;li&gt;Aradia&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;En el siguiente video de Macho Nacho se puede ver el todo el proceso de modificación de la consola (el flex del módulo microSD es el modelo que no se sujeta con los tornillos sino con puntos de soldadura sobre la PCB de la G&amp;amp;W):&lt;/p&gt;&lt;iframe width=&#34;688&#34; height=&#34;387&#34; src=&#34;https://www.youtube.com/embed/8YIHjUM8Qms&#34; title=&#34;Making The Zelda G&amp;W Into A MODERN Emulation Powerhouse&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; allowfullscreen&gt;&lt;/iframe&gt;</description><link>https://apuntes.eduardofilo.es/2026-03-08_zelda_gw.html</link> <pubDate>Sun, 08 Mar 2026 15:45:00 +0100</pubDate><source url="https://apuntes.eduardofilo.es/rss.xml">Apuntes de eduardófilo</source><guid isPermaLink="true">https://apuntes.eduardofilo.es/2026-03-08_zelda_gw.html</guid> </item> <item> <title>G&amp;W Zelda hack</title> <description>&lt;p&gt;&lt;img alt=&#34;Zelda G&amp;amp;W&#34; src=&#34;../images/posts/2026-03-08_zelda_gw/zelda_gnw.png&#34; /&gt;&lt;/p&gt;&lt;p&gt;A well-known Japanese video game manufacturer began selling a pair of machines at the end of 2022, replicating the appearance of some of the old G&amp;amp;W, based on an STM32H7 microcontroller running a baremetal firmware with NES and GB emulators, three classic games and a clock application inspired by the Zelda franchise. The machine is very interesting because of the virtues of being based on a microcontroller instead of a microprocessor, that is, great battery life (the one from a Switch joycon), instant boot and sleep mode. The storage medium is a small 4MB NOR flash chip (in the case of the Zelda model), enough to host the mentioned emulators and games, but very scarce if you want to take advantage of the machine and its relatively powerful CPU.&lt;/p&gt;&lt;p&gt;The original firmware serves to verify the solvency of the platform to emulate at least the 8-bit machines that originally run, so the device immediately became attractive to the hacker community. Shortly after it went on sale, &lt;a href=&#34;https://www.youtube.com/watch?v=Rsi8p5gbaps&#34;&gt;procedures appeared to unlock and modify the machine&lt;/a&gt; so that more emulators and games could be installed.&lt;/p&gt;&lt;p&gt;The first major modification proposed by the community consisted of replacing the flash chip with a 64MB one to have more space for games and emulators. Later, the modification evolved to include a microSD card slot to store games and savestates, as well as to greatly simplify the update process, turning the modified machine into an unparalleled portable emulation machine in aspects such as portability, size, battery life, and boot times.&lt;/p&gt;&lt;p&gt;With either of the two modifications, it is possible to emulate the following machines:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Amstrad CPC6128 (beta)&lt;/li&gt;&lt;li&gt;Atari 2600&lt;/li&gt;&lt;li&gt;Atari 7800&lt;/li&gt;&lt;li&gt;ColecoVision&lt;/li&gt;&lt;li&gt;Gameboy / Gameboy Color&lt;/li&gt;&lt;li&gt;Game &amp;amp; Watch / LCD Games&lt;/li&gt;&lt;li&gt;MSX1/2/2+&lt;/li&gt;&lt;li&gt;Nintendo Entertainment System&lt;/li&gt;&lt;li&gt;PC Engine / TurboGrafx-16&lt;/li&gt;&lt;li&gt;Pokémon Mini&lt;/li&gt;&lt;li&gt;Sega Game Gear&lt;/li&gt;&lt;li&gt;Sega Genesis / Megadrive&lt;/li&gt;&lt;li&gt;Sega Master System&lt;/li&gt;&lt;li&gt;Sega SG-1000&lt;/li&gt;&lt;li&gt;Tamagotchi P1&lt;/li&gt;&lt;li&gt;Watara Supervision&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;In this article we will describe the steps to perform these two modifications. The modification to add the microSD slot also requires replacing the flash, since every time we load a new game from the microSD it will be written to the flash chip, and the original 4MB one supports few write cycles since it was not intended to be used this way.&lt;/p&gt;&lt;p&gt;The entire process has been performed on a Linux system. In principle, development on Windows and MacOS X systems is also possible, but the steps to install the requirements and the software we will use will necessarily change.&lt;/p&gt;&lt;h2 id=&#34;connection-to-the-swd-port&#34;&gt;Connection to the SWD port&lt;a class=&#34;headerlink&#34; href=&#34;#connection-to-the-swd-port&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Unlocking the processor and modifying the firmware are done through the SWD port that STM32 microcontrollers usually have to program their internal flash memory and debug developments. This SWD port is located on the PCB unpopulated, that is, without soldered pins or connectors.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;SWD&#34; src=&#34;../images/posts/2026-03-08_zelda_gw/swd.jpg&#34; /&gt;&lt;/p&gt;&lt;p&gt;To make the connection to this port there are several options:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Solder wires directly.&lt;/li&gt;&lt;li&gt;Insert bare wires or male pin wires, tilting them to force contact.&lt;/li&gt;&lt;li&gt;Use specialized &lt;a href=&#34;https://www.amazon.es/gp/product/B009UOHE1K/&#34;&gt;connection probe clips&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Use &lt;a href=&#34;https://es.aliexpress.com/item/1005007602295920.html&#34;&gt;pogo pin clips&lt;/a&gt; (Single row 5pin).&lt;/li&gt;&lt;li&gt;Route the SWDIO and SWCLK pins to the USB-C port.&lt;/li&gt;&lt;/ul&gt;&lt;h4 id=&#34;hard-version&#34;&gt;Hard version&lt;a class=&#34;headerlink&#34; href=&#34;#hard-version&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Since I started tinkering with the machine before the microSD mod appeared, at the time I routed the SWD port to the USB-C. If you end up doing the microSD mod, the effort is not very worthwhile, since from then on flashing the firmware will be done from the microSD itself. However, for documentation purposes we will describe how the routing would be done.&lt;/p&gt;&lt;p&gt;The USB-C port only has the power pins connected since it is only intended to charge the machine. Therefore, the D+ and D- pins that are free can be used to wire them to the SWDIO and SWCLK pins, which are the only essential ones for the SWD port. We will also need to connect to 5V and GND, but these are already wired in the USB-C port. The routing is done with fine enameled wire like the one used to build coils. Soldering to the two central pins of the USB-C port which correspond to D+ and D- is complicated having a very small pitch, but with patience and flux it can be achieved.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Ruteado USB-C&#34; src=&#34;../images/posts/2026-03-08_zelda_gw/ruteado_usb-c_1.jpg&#34; /&gt;&lt;/p&gt;&lt;p&gt;Once the only difficult part of the procedure is solved, that is, soldering the wires to the USB port, these are secured every so often with Kapton tape and directed towards the battery area where the recess on both sides of the housing that surrounds it is used to pass one of the cables. The other is routed through the space between the battery housing and the PCB. This way both cables cannot touch each other, although in theory being varnished there should be no problem, this separate path is adopted as an additional precaution.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Ruteado USB-C&#34; src=&#34;../images/posts/2026-03-08_zelda_gw/ruteado_usb-c_2.jpg&#34; /&gt;&lt;/p&gt;&lt;p&gt;Once the wires reach the vicinity of the SWD port, the two test pads that can be seen in the photo are used to solder them.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Ruteado USB-C&#34; src=&#34;../images/posts/2026-03-08_zelda_gw/ruteado_usb-c_3.jpg&#34; /&gt;&lt;/p&gt;&lt;p&gt;The correspondence between D+ and D- on the USB-C port with SWDIO and SWCLK of the SWD port can be done in any way as long as we are clear on where each one is to later make the USB-SWD adapter we will need. In this assembly the following correspondence has been chosen:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;D+ ↔ SWDIO&lt;/li&gt;&lt;li&gt;D- ↔ SWCLK&lt;/li&gt;&lt;/ul&gt;&lt;div class=&#34;admonition warning&#34;&gt;&lt;p class=&#34;admonition-title&#34;&gt;Warning&lt;/p&gt;&lt;p&gt;The idea at first was to adopt the correspondence used in &lt;a href=&#34;https://facelesstech.wordpress.com/2022/01/08/game-and-watch-hacking-with-rpi/&#34;&gt;this other guide&lt;/a&gt;, but due to a mistake made at the beginning, it ended up being done exactly the other way around. As mentioned earlier, it&#39;s really not a problem as long as you know how the connections are made. This warning is only in case someone tries to follow both guides simultaneously, so that this difference is taken into account.&lt;/p&gt;&lt;/div&gt;&lt;p&gt;Once the port is routed, we will need to build the adapter to extract the SWDIO and SWCLK signals from the USB-C port. To do this, cut a conventional USB-A cable to have access to the four separate cables it contains and solder female pin connectors to them. The adapter is completed with a USB-A to USB-C adapter that is marked to orient it correctly when we are going to use it, since we have only routed the D+ and D- pins on one of the two sides (the USB-C port is reversible).&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Adaptador USB-C SWD&#34; src=&#34;../images/posts/2026-03-08_zelda_gw/adaptador_usb-c_swd.jpg&#34; /&gt;&lt;/p&gt;&lt;p&gt;The cable colors are usually standardized as follows:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Red: 5V&lt;/li&gt;&lt;li&gt;Black: GND&lt;/li&gt;&lt;li&gt;Green: D+&lt;/li&gt;&lt;li&gt;White: D-&lt;/li&gt;&lt;/ul&gt;&lt;h4 id=&#34;easy-version&#34;&gt;Easy version&lt;a class=&#34;headerlink&#34; href=&#34;#easy-version&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;The recommended way to make the connection to the SWD port (if you don&#39;t want to solder, which is the most reliable option) is using specialized &lt;a href=&#34;https://www.amazon.es/gp/product/B009UOHE1K/&#34;&gt;connection probe clips&lt;/a&gt;. To apply these clips, it is recommended to previously disconnect the console&#39;s battery. The battery connector pops off easily by inserting a thin piece of plastic underneath it.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Pinzas conexión GnW&#34; src=&#34;../images/posts/2026-03-08_zelda_gw/pinzas_conexion_gnw.jpg&#34; /&gt;&lt;/p&gt;&lt;h2 id=&#34;programming-probe&#34;&gt;Programming probe&lt;a class=&#34;headerlink&#34; href=&#34;#programming-probe&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;We have solved where to connect on the console. Now we need a device capable of communicating with that SWD port of the microcontroller. The options are:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;https://www.raspberrypi.com/products/raspberry-pi-pico/&#34;&gt;Raspberry Pi Pico&lt;/a&gt; (Recommended)&lt;/li&gt;&lt;li&gt;&lt;a href=&#34;https://www.st.com/en/development-tools/st-link-v2.html&#34;&gt;STLink&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&#34;https://www.segger.com/products/debug-probes/j-link/#models&#34;&gt;JLink&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&#34;https://daplink.io/&#34;&gt;DAPLink&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&#34;https://projects.raspberrypi.org/en/projects/physical-computing/1&#34;&gt;Raspberry Pi (GPIO)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;I chose to use a Raspberry Pi Pico. For it to work as an SWD programming probe, the &lt;a href=&#34;https://github.com/raspberrypi/debugprobe&#34;&gt;debugprobe&lt;/a&gt; firmware must be loaded. In my case I used the &lt;a href=&#34;https://github.com/raspberrypi/debugprobe/releases/download/picoprobe-cmsis-v1.0.3/picoprobe.uf2&#34;&gt;picoprobe.uf2&lt;/a&gt; file from &lt;a href=&#34;https://github.com/raspberrypi/debugprobe/releases/tag/picoprobe-cmsis-v1.0.3&#34;&gt;this specific release&lt;/a&gt;. To flash the Pico, just connect it to the computer via USB while pressing the &lt;code&gt;BOOTSEL&lt;/code&gt; button to force the mode in which it mounts as a storage drive and drag the &lt;code&gt;.uf2&lt;/code&gt; file to that drive. After autoflashing, the Pico will automatically restart and begin to function as an SWD programming probe.&lt;/p&gt;&lt;p&gt;Once the Pico is programmed, the only thing left is to make the connections of the cables that we had connected to the SWD port of the Game&amp;amp;Watch. We can use the same type of clips that we applied to the console, although in my case I used similar ones but slightly more robust, since the spacing of the GPIO pins of the Pico is much larger.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Pinzas conexión Pico&#34; src=&#34;../images/posts/2026-03-08_zelda_gw/pinzas_conexion_pico.jpg&#34; /&gt;&lt;/p&gt;&lt;p&gt;The wiring between Game&amp;amp;Watch and Raspberry Pi Pico is:&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&#34;text-align: left;&#34;&gt;Pico&lt;/th&gt;&lt;th style=&#34;text-align: left;&#34;&gt;GnW&lt;/th&gt;&lt;th style=&#34;text-align: left;&#34;&gt;Color&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&#34;text-align: left;&#34;&gt;3&lt;/td&gt;&lt;td style=&#34;text-align: left;&#34;&gt;3&lt;/td&gt;&lt;td style=&#34;text-align: left;&#34;&gt;Black&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&#34;text-align: left;&#34;&gt;4&lt;/td&gt;&lt;td style=&#34;text-align: left;&#34;&gt;5&lt;/td&gt;&lt;td style=&#34;text-align: left;&#34;&gt;White&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&#34;text-align: left;&#34;&gt;5&lt;/td&gt;&lt;td style=&#34;text-align: left;&#34;&gt;2&lt;/td&gt;&lt;td style=&#34;text-align: left;&#34;&gt;Green&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;img alt=&#34;GnW - Pico&#34; src=&#34;../images/posts/2026-03-08_zelda_gw/gnw_pico.png&#34; /&gt;&lt;/p&gt;&lt;h2 id=&#34;microcontroller-unlocking&#34;&gt;Microcontroller unlocking&lt;a class=&#34;headerlink&#34; href=&#34;#microcontroller-unlocking&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Once the connectivity to the board is solved, the first step in the modification is unlocking the STM32H7 microcontroller so that we can replace the firmware in its internal flash memory as well as write to the external flash memory (with code that we will inject into the microcontroller itself).&lt;/p&gt;&lt;p&gt;This task is performed with the &lt;a href=&#34;https://github.com/BrianPugh/gnwmanager&#34;&gt;gnwmanager&lt;/a&gt; utility suite. This package is registered on &lt;a href=&#34;https://pypi.org/project/gnwmanager/&#34;&gt;PyPI&lt;/a&gt; so it can be installed very easily with &lt;code&gt;pip&lt;/code&gt; (preferably inside a Python virtual environment).&lt;/p&gt;&lt;p&gt;&lt;code&gt;bash$ pip install gnwmanager$ gnwmanager install openocd&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Now, after reconnecting the console&#39;s battery if we had disconnected it, we will execute the following command:&lt;/p&gt;&lt;p&gt;&lt;code&gt;(gnwmanager) $ gnwmanager unlock&lt;/code&gt;&lt;/p&gt;&lt;p&gt;The process will pause on a couple of occasions giving instructions through the terminal that we must follow. A typical output would be:&lt;/p&gt;&lt;p&gt;```(gnwmanager) [edu@thinkpad ~]$ gnwmanager unlock&lt;/p&gt;&lt;p&gt;If interrupted, resume unlocking with: gnwmanager unlock --backup-dir=backups-2025-10-27-19-28-14&lt;/p&gt;&lt;p&gt;Detected ZELDA game and watch.Backing up itcm to &#34;backups-2025-10-27-19-28-14/itcm_backup_zelda.bin&#34;... complete!Backing up external flash to &#34;backups-2025-10-27-19-28-14/flash_backup_zelda.bin&#34;... complete!Flashing payload to external flash... complete!&lt;/p&gt;&lt;p&gt;Payload successfully flashed. Perform the following steps:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Fully remove power, then re-apply power.&lt;/li&gt;&lt;li&gt;Press the power button to turn on the device; the screen should turn blue.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Press the &#34;enter&#34; key when the screen is blue: Backing up internal flash to &#34;backups-2025-10-27-19-28-14/internal_flash_backup_zelda.bin&#34;... complete!Unlocking device... complete!Restoring firmware... complete!Unlocking complete!Pressing the power button should launch the original firmware.```&lt;/p&gt;&lt;p&gt;The files &lt;code&gt;internal_flash_backup_zelda.bin&lt;/code&gt;, &lt;code&gt;flash_backup_zelda.bin&lt;/code&gt; and &lt;code&gt;itcm_backup_zelda.bin&lt;/code&gt; will appear in a &lt;code&gt;backups-DATE-TIME&lt;/code&gt; directory that should be saved.&lt;/p&gt;&lt;p&gt;If we turn on the console at this point, we won&#39;t notice any change, meaning it will run the original firmware, but now the chip will be unprotected and we can flash another firmware to it.&lt;/p&gt;&lt;h2 id=&#34;modification-1-retro-go&#34;&gt;Modification 1: retro-go&lt;a class=&#34;headerlink&#34; href=&#34;#modification-1-retro-go&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;h4 id=&#34;flash-replacement&#34;&gt;Flash replacement&lt;a class=&#34;headerlink&#34; href=&#34;#flash-replacement&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;At this time we start modifying the console seriously. As mentioned at the beginning, the microcontroller&#39;s external storage chip is a flash memory of only 4MB (Zelda model). Not only is it small for loading many games, but it has few write cycles, so replacing games frequently, or caching them when making the modification to add the microSD, can wear it out quickly. The usual modification is to desolder the original 4MB flash chip and replace it with a 64MB one, specifically the &lt;a href=&#34;https://es.aliexpress.com/item/1005005138227815.html&#34;&gt;MX25U51245GZ4I00&lt;/a&gt; model.&lt;/p&gt;&lt;p&gt;To remove the original flash chip, it is highly recommended to extract the console&#39;s motherboard, disconnecting the two data ribbon cables from the screen, desoldering the speaker, and removing all screws. Once we have the board on the workbench, we protect the surroundings of the chip with kapton tape and extract it by applying flux and hot air with a heat gun.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Retirar chip flash original 1&#34; src=&#34;../images/posts/2026-03-08_zelda_gw/mod_flash_1.jpg&#34; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Retirar chip flash original 2&#34; src=&#34;../images/posts/2026-03-08_zelda_gw/mod_flash_2.jpg&#34; /&gt;&lt;/p&gt;&lt;p&gt;Next, we clean the footprint of the chip we just removed with desoldering braid. Also, although it must be done with great care, it helps to scratch (with the tip of tweezers, for example) the solder mask of the PCB to expand outwards the solderable surface of the chip&#39;s solder footprint.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Retirar chip flash original 3&#34; src=&#34;../images/posts/2026-03-08_zelda_gw/mod_flash_3.jpg&#34; /&gt;&lt;/p&gt;&lt;p&gt;The new flash chip has a surface mount QFN-8 format that is not easy to solder. It is recommended to apply flux and pre-tin the pads of said chip on the bottom. I also recommend putting a strip of kapton tape on the bottom so that it does not rest directly on the PCB, which would hinder the flow of solder through the pads.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Nuevo chip flash&#34; src=&#34;../images/posts/2026-03-08_zelda_gw/new_flash.jpg&#34; /&gt;&lt;/p&gt;&lt;p&gt;You must pay close attention to the dot on the chip&#39;s package that marks pin number 1, which corresponds to the one with an indicator triangle on the PCB as can be seen in the second photo of the following.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Retirar chip flash original 4&#34; src=&#34;../images/posts/2026-03-08_zelda_gw/mod_flash_4.jpg&#34; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Retirar chip flash original 5&#34; src=&#34;../images/posts/2026-03-08_zelda_gw/mod_flash_5.jpg&#34; /&gt;&lt;/p&gt;&lt;h4 id=&#34;flashing-retro-go&#34;&gt;Flashing retro-go&lt;a class=&#34;headerlink&#34; href=&#34;#flashing-retro-go&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Once the chip is installed, it&#39;s time to flash the firmware. For this modification, I choose not to set up dual boot, that is, not to install the patched original firmware alongside retro-go, to have all the flash memory space dedicated to games. To do this we start by downloading its repository:&lt;/p&gt;&lt;p&gt;&lt;code&gt;bashcd ~/gitgit clone --recursive https://github.com/sylverb/game-and-watch-retro-go -b filesystem_wipcd game-and-watch-retro-go&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Once the code is downloaded, it&#39;s time to install the ROMs in the directories corresponding to the different supported machines that we will find in &lt;code&gt;~/git/game-and-watch-retro-go/roms/&lt;/code&gt;. For example, to install the NES ROMs, we copy the ROMs to &lt;code&gt;~/git/game-and-watch-retro-go/roms/nes/&lt;/code&gt;. If we want cover art for the games, we will place the images in jpg or png format in the same directories and with the same file names of the corresponding ROMs. For example, for the &lt;code&gt;zelda.nes&lt;/code&gt; ROM, we will place the cover at &lt;code&gt;~/git/game-and-watch-retro-go/roms/nes/zelda.jpg&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;We have to keep in mind that all ROMs and their covers must fit in the 64 MB flash chip we installed in the console. Most ROMs compress, so as a starting rule, we will use the criteria of choosing ROMs for a total size of roughly double (128MB).&lt;/p&gt;&lt;p&gt;Now it&#39;s time to build the firmware (if we are not going to use covers to take advantage of the space of their files to be able to put more ROMs, do not include the &lt;code&gt;COVERFLOW&lt;/code&gt; and &lt;code&gt;JPG_QUALITY&lt;/code&gt; environment variables in the build and flash commands):&lt;/p&gt;&lt;p&gt;```bashmake docker_buildmake docker&lt;/p&gt;&lt;p&gt;(docker) gnwmanager install openocd(docker) export GNW_TARGET=zelda(docker) export ADAPTER=cmsis-dap(docker) make clean(docker) COVERFLOW=1 JPG_QUALITY=90 EXTFLASH_SIZE_MB=64 make -j$(nproc)```&lt;/p&gt;&lt;p&gt;When building finishes, we will be informed of the resulting binary size that will be flashed to the chip. For example:&lt;/p&gt;&lt;p&gt;&lt;code&gt;External flash usage Capacity: 61050880 Bytes ( 58.223 MB) Usage: 54335345 Bytes ( 51.818 MB) Free: 6715535 Bytes ( 6.404 MB)&lt;/code&gt;&lt;/p&gt;&lt;p&gt;With that information in sight we can iterate the process adding or removing ROMs until obtaining a binary of about 55MB, since something must be anticipated for the game savestates.&lt;/p&gt;&lt;p&gt;Once we are satisfied with the space usage, we will flash the firmware reconnecting the programming probe discussed in the &lt;a href=&#34;#programming-probe&#34;&gt;Programming probe&lt;/a&gt; section.&lt;/p&gt;&lt;p&gt;&lt;code&gt;bash(docker) COVERFLOW=1 JPG_QUALITY=90 EXTFLASH_SIZE_MB=64 make flash&lt;/code&gt;&lt;/p&gt;&lt;p&gt;A typical output would be:&lt;/p&gt;&lt;p&gt;&lt;code&gt;bashdocker@53335bdd9199:/opt/workdir$ COVERFLOW=1 JPG_QUALITY=90 EXTFLASH_SIZE_MB=64 make flash_gnwmanagerEntering &#39;LCD-Game-Emulator&#39;Entering &#39;blueMSX-go&#39;Entering &#39;caprice32-go&#39;Entering &#39;fceumm-go&#39;Entering &#39;gwenesis&#39;Entering &#39;potator&#39;Entering &#39;prosystem-go&#39;Entering &#39;retro-go-stm32&#39;Entering &#39;smw&#39;Entering &#39;tamalib&#39;Entering &#39;zelda3&#39;[ BASH ] Checking for updated roms100%|█████████████████████████████████████████████████████████████████| 208/208 [04:20&amp;lt;00:00, 1.25s/it]&lt;/code&gt;&lt;/p&gt;&lt;p&gt;It is important that we keep the &lt;code&gt;build/gw_retro_go.elf&lt;/code&gt; file because we will need it to extract the savestates in the future.&lt;/p&gt;&lt;h4 id=&#34;backup-retro-go-savestates&#34;&gt;Backup retro-go savestates&lt;a class=&#34;headerlink&#34; href=&#34;#backup-retro-go-savestates&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;If later we want to extract the game savestates, to be able to reinstall them after flashing a new firmware, first we will need to place the &lt;code&gt;gw_retro_go.elf&lt;/code&gt; file we obtained in the previous step in the &lt;code&gt;build&lt;/code&gt; directory. Then we can restart the docker environment and run the backup script:&lt;/p&gt;&lt;p&gt;```bashcd ~/git/game-and-watch-retro-gomake docker&lt;/p&gt;&lt;p&gt;(docker) export GNW_TARGET=zelda(docker) export ADAPTER=cmsis-dap(docker) ./scripts/saves_backup.sh build/gw_retro_go.elf```&lt;/p&gt;&lt;p&gt;The savestates will appear in the &lt;code&gt;~/git/game-and-watch-retro-go/save_states&lt;/code&gt; subdirectory. Once we have built and flashed a new firmware, we can restore them by running the restoration script:&lt;/p&gt;&lt;p&gt;&lt;code&gt;bash(docker) ./scripts/saves_restore.sh&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Restoration is done intelligently, that is, if we have savestates of a game that is not in the new firmware, that savestate will not be installed on the console, to avoid wasting flash memory space.&lt;/p&gt;&lt;h2 id=&#34;modification-2-retro-go-sd&#34;&gt;Modification 2: retro-go-sd&lt;a class=&#34;headerlink&#34; href=&#34;#modification-2-retro-go-sd&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;h4 id=&#34;microsd-slot-module-installation&#34;&gt;microSD slot module installation&lt;a class=&#34;headerlink&#34; href=&#34;#microsd-slot-module-installation&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;As with the modification for normal retro-go, to use retro-go-sd you must start by making a hardware modification to the console. This time it is more complicated, especially the final phase of soldering the module directly onto the microcontroller&#39;s pins, which have a very small pitch.&lt;/p&gt;&lt;p&gt;The module consists of the microSD card reader itself and 4 components. All this soldered onto a flex-type PCB. The complete list of components is:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;1 &lt;a href=&#34;https://es.aliexpress.com/item/1005008902154552.html&#34;&gt;microSD card reader&lt;/a&gt;&lt;/li&gt;&lt;li&gt;1 &lt;a href=&#34;https://es.aliexpress.com/item/1005005677654015.html&#34;&gt;100kΩ 0603 resistor&lt;/a&gt; or 0805&lt;/li&gt;&lt;li&gt;2 &lt;a href=&#34;https://es.aliexpress.com/item/1005003512666695.html&#34;&gt;1μF 0603 capacitors&lt;/a&gt; or 0805&lt;/li&gt;&lt;li&gt;1 &lt;a href=&#34;https://es.aliexpress.com/item/1005007136710461.html&#34;&gt;RT9193-28GB voltage regulator&lt;/a&gt;. There are people who have reported problems with this model bought on Aliexpress and recommend the &#34;MIC5504-2.8YM5-TR&#34; as a replacement.&lt;/li&gt;&lt;li&gt;1 flex PCB: Here the version by &lt;a href=&#34;https://github.com/sylverb/game-and-watch-retro-go-sd/raw/refs/heads/main/assets/MicroSD_Zelda_Final.zip&#34;&gt;PrimoAngelo&lt;/a&gt; is used. The original one usually referenced in most guides is the one by &lt;a href=&#34;https://github.com/sylverb/game-and-watch-retro-go-sd/raw/refs/heads/main/assets/GnW_SD_v2.zip&#34;&gt;Tim Schuerewegen / hundshamer&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;We will begin by soldering the components onto the flex PCB.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;microSD module&#34; src=&#34;../images/posts/2026-03-08_zelda_gw/mod_msd_1.jpg&#34; /&gt;&lt;/p&gt;&lt;p&gt;The next step as we said at the beginning will be the difficult step of installing the module in the console. We remove the four screws that fall on its surface and present it in a way that we get the pads of the flex to align with the pins of the microcontroller while these end up at their feet, that is, like this.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;microSD module&#34; src=&#34;../images/posts/2026-03-08_zelda_gw/mod_msd_2.png&#34; /&gt;&lt;/p&gt;&lt;p&gt;Once it is aligned to our liking, we will proceed to fix it in its position by driving in the four screws. Now is when we will have to arm ourselves with patience and high-quality flux to manage to solder the pads of the flex and simultaneously avoid bridges between them. It will be necessary to check the continuity of the solders as well as the non-existence of bridges between adjacent pins. If we finally succeed, all that remains is to add a solder point between the pad marked with &lt;code&gt;+4V&lt;/code&gt; and the capacitor terminal next to it.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;microSD module&#34; src=&#34;../images/posts/2026-03-08_zelda_gw/mod_msd_3.jpg&#34; /&gt;&lt;/p&gt;&lt;h4 id=&#34;bootloader-flashing&#34;&gt;Bootloader flashing&lt;a class=&#34;headerlink&#34; href=&#34;#bootloader-flashing&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;The next step will be to flash the bootloader along with the console&#39;s patched original firmware to allow dual boot (this time it is worthwhile as we have practically unlimited space for ROMs on the microSD). From the directory where the console backup files are located and with a Python environment that has &lt;code&gt;gnwmanager&lt;/code&gt; installed, we will execute the following command:&lt;/p&gt;&lt;p&gt;&lt;code&gt;bash(gnwmanager) $ gnwmanager flash-patch zelda internal_flash_backup_zelda.bin flash_backup_zelda.bin --bootloader&lt;/code&gt;&lt;/p&gt;&lt;p&gt;A typical output would be:&lt;/p&gt;&lt;p&gt;&lt;code&gt;bash(gnwmanager) $ gnwmanager flash-patch zelda internal_flash_backup_zelda.bin flash_backup_zelda.bin --bootloader100%|███████████████████████████████████████████████████████████████████| 16/16 [00:58&amp;lt;00:00, 3.66s/it]&lt;/code&gt;&lt;/p&gt;&lt;p&gt;If we turn on the console at that moment, after removing the programming probe, we will see that the (patched) original firmware starts. After pressing &lt;code&gt;GAME + LEFT&lt;/code&gt;, the bootloader will execute and, as Retro-Go SD is not yet installed in the internal flash of the STM32 at that moment, we will be shown the following warning:&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Bootloader warning&#34; src=&#34;../images/posts/2026-03-08_zelda_gw/bootloader_warning.jpg&#34; /&gt;&lt;/p&gt;&lt;h4 id=&#34;retro-go-sd-installation&#34;&gt;Retro-Go SD installation&lt;a class=&#34;headerlink&#34; href=&#34;#retro-go-sd-installation&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;All that remains is to install the Retro-Go SD firmware. To do this, we will copy the &lt;code&gt;retro-go_update.bin&lt;/code&gt; file that we will download from the latest release published by Sylverb in the &lt;a href=&#34;https://github.com/sylverb/game-and-watch-retro-go-sd/releases&#34;&gt;Retro-Go SD repository&lt;/a&gt; to the root directory of the microSD. When booting for the first time, we will see on screen how the retro-go files and emulator cores are copied to the microSD itself.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Retro-Go SD installation&#34; src=&#34;../images/posts/2026-03-08_zelda_gw/retro-go_update.jpg&#34; /&gt;&lt;/p&gt;&lt;p&gt;At the same time, the following directory structure will be created on the microSD:&lt;/p&gt;&lt;p&gt;&lt;code&gt;retro-go/├── CONFIG├── bios/│ ├── coleco/│ ├── msx/│ ├── nes/├── cores/│ ├── mappers/│ ├── a2600.bin│ ├── a2600_defprops.bin│ ├── a7800.bin│ └── ...├── data/│ ├── a2600/│ ├── a7800/│ ├── amstrad/│ └── ...├── fonts/│ ├── cp1251_greybeard.bin│ ├── cp1251_sans_serif.bin│ ├── cp1251_sans_serif_bold.bin│ └── ...└── roms/ ├── a2600/ ├── a7800/ ├── amstrad/ └── ...&lt;/code&gt;&lt;/p&gt;&lt;p&gt;All that remains is to copy the ROMs we want to emulate to the corresponding directories. If we want cover art for the games, we will need to create the &lt;code&gt;covers&lt;/code&gt; subdirectory with the same subdirectories as the &lt;code&gt;roms&lt;/code&gt; directory and place the images there. These must be in a special IMG format that we will generate with a &lt;a href=&#34;https://github.com/sylverb/game-and-watch-retro-go-sd/blob/main/README.md#cover-art-generator-gencoverspy&#34;&gt;script included in the Retro-Go SD repository&lt;/a&gt;. The IMG file names must match those of the ROMs in their corresponding directory.&lt;/p&gt;&lt;h4 id=&#34;back-case&#34;&gt;Back case&lt;a class=&#34;headerlink&#34; href=&#34;#back-case&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;When installing the microSD slot, you need to modify the back cover of the console because the reader falls over some support posts on the d-pad. You also need to drill a hole in the side to allow access to the microSD so you can extract and insert it when you want to change games, rescue savestates, or update the firmware. To perform the drilling, &lt;a href=&#34;https://www.printables.com/model/1269910-zelda-game-and-watch-sd-card-drill-jig/files&#34;&gt;there are some tools&lt;/a&gt; designed by the user facelesstech that help keep the slot clean. You can see how this modification is performed in the video at the end of this article.&lt;/p&gt;&lt;p&gt;There is an alternative if we don&#39;t want to risk permanently damaging the original cover, and that is to 3D print the model created by the user Aradia, which can be downloaded &lt;a href=&#34;https://github.com/sylverb/game-and-watch-retro-go-sd/raw/refs/heads/main/assets/GnW_Zelda_back_shell.stl&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Back case&#34; src=&#34;../images/posts/2026-03-08_zelda_gw/carcasa.jpg&#34; /&gt;&lt;/p&gt;&lt;p&gt;The green color I found most similar to the Zelda console is the &lt;a href=&#34;https://www.amazon.es/dp/B0DHKZCL75&#34;&gt;15-Green from OVERTURE&lt;/a&gt;.&lt;/p&gt;&lt;h2 id=&#34;controls&#34;&gt;Controls&lt;a class=&#34;headerlink&#34; href=&#34;#controls&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Below we indicate the key combinations for controlling Retro-go SD (although many of them also work in Retro-go). Holding down the &lt;code&gt;PAUSE/SET&lt;/code&gt; button while pressing other buttons performs the following actions:&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Key combination&lt;/th&gt;&lt;th&gt;Action&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;PAUSE/SET&lt;/code&gt; + &lt;code&gt;GAME&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Save a screenshot (disabled by default in builds with 1MB flash)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;PAUSE/SET&lt;/code&gt; + &lt;code&gt;TIME&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Change execution speed (1x/1.5x)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;PAUSE/SET&lt;/code&gt; + &lt;code&gt;UP&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Increase brightness&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;PAUSE/SET&lt;/code&gt; + &lt;code&gt;DOWN&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Decrease brightness&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;PAUSE/SET&lt;/code&gt; + &lt;code&gt;RIGHT&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Increase volume&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;PAUSE/SET&lt;/code&gt; + &lt;code&gt;LEFT&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Decrease volume&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;PAUSE/SET&lt;/code&gt; + &lt;code&gt;B&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Load state&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;PAUSE/SET&lt;/code&gt; + &lt;code&gt;A&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Save state&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;PAUSE/SET&lt;/code&gt; + &lt;code&gt;A&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Autofire on button A&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;PAUSE/SET&lt;/code&gt; + &lt;code&gt;B&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Autofire on button B&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;PAUSE/SET&lt;/code&gt; + &lt;code&gt;POWER&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Poweroff without savestate&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;PAUSE/SET&lt;/code&gt; + &lt;code&gt;POWER&lt;/code&gt;&lt;/td&gt;&lt;td&gt;After having done &lt;code&gt;PAUSE/SET&lt;/code&gt; and selected &lt;code&gt;Power off&lt;/code&gt;, the bootloader will start without calling Retro-go, allowing us to see the bootloader version as well as information about the microSD detection and the state of the internal and external flash memories&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h2 id=&#34;references&#34;&gt;References&lt;a class=&#34;headerlink&#34; href=&#34;#references&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;I would not like to finish without mentioning the &lt;a href=&#34;https://discord.gg/TKjHZ5yV&#34;&gt;stacksmashing&lt;/a&gt; Discord server and the following users whose work has made these modifications possible:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;stacksmashing&lt;/li&gt;&lt;li&gt;kbeckmann&lt;/li&gt;&lt;li&gt;Tim Schuerewegen&lt;/li&gt;&lt;li&gt;BrianPugh&lt;/li&gt;&lt;li&gt;GMMan&lt;/li&gt;&lt;li&gt;tfmoe__&lt;/li&gt;&lt;li&gt;Sylver Bruneau&lt;/li&gt;&lt;li&gt;facelesstech&lt;/li&gt;&lt;li&gt;DasBoss&lt;/li&gt;&lt;li&gt;bxhxx&lt;/li&gt;&lt;li&gt;Benjamin Solberg&lt;/li&gt;&lt;li&gt;orzeus&lt;/li&gt;&lt;li&gt;ducalex&lt;/li&gt;&lt;li&gt;ZimM&lt;/li&gt;&lt;li&gt;Ninoh-FOX&lt;/li&gt;&lt;li&gt;PrimoAngelo&lt;/li&gt;&lt;li&gt;Aradia&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;In the following Macho Nacho video you can see the whole console modification process (the flex of the microSD module is the model that is not held by screws but with solder points on the G&amp;amp;W PCB):&lt;/p&gt;&lt;iframe width=&#34;688&#34; height=&#34;387&#34; src=&#34;https://www.youtube.com/embed/8YIHjUM8Qms&#34; title=&#34;Making The Zelda G&amp;W Into A MODERN Emulation Powerhouse&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; allowfullscreen&gt;&lt;/iframe&gt;</description><link>https://apuntes.eduardofilo.es/en/2026-03-08_zelda_gw.html</link> <pubDate>Sun, 08 Mar 2026 15:45:00 +0100</pubDate><source url="https://apuntes.eduardofilo.es/rss.xml">Apuntes de eduardófilo</source><guid isPermaLink="true">https://apuntes.eduardofilo.es/en/2026-03-08_zelda_gw.html</guid> </item> <item> <title>Instalación Arch Linux en Lenovo ThinkPad T480</title> <description>&lt;p&gt;&lt;img alt=&#34;Lenovo ThinkPad T480 con Arch Linux&#34; src=&#34;images/posts/2025-06-28_thinkpad_t480/thinkpad_t480.png&#34; /&gt;&lt;/p&gt;&lt;p&gt;Tras cruzarme por casualidad con varios vídeos contando las excelencias del Lenovo ThinkPad T480 y de estar ligeramente disgustado con el portátil que adquirí el verano pasado como equipo principal, decidí comprar uno de segunda mano. En concreto el modelo que compré es el T480 con un procesador Intel Core i5-8250U, 16GB de RAM y disco SSD de 1TB. Costó 252€ puesto en casa al día siguiente, y fue adquirido en un vendendor especializado en reacondicionar equipos del que también vi algún vídeo por lo que esperaba que el equipo estuviera en buen estado. Así fue. El equipo llegó con un aspecto impecable, como nuevo, con sus dos baterías funcionales (la interna y la externa). El ThinkPad T480, en su momento tenía muchas opciones de configuración a la hora de adquirirlo. Por este motivo, al comprarlo en una de estas empresas de reacondicionamiento, es posible que el equipo tenga características distintas. Esta es la hoja de especificaciones del equipo donde pueden verse todas las opciones de hardware: &lt;a href=&#34;https://psref.lenovo.com/syspool/Sys/PDF/ThinkPad/ThinkPad_T480/ThinkPad_T480_Spec.PDF&#34;&gt;PSREF Lenovo ThinkPad T480&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;El Lenovo ThinkPad T480 es un portátil de 14&#34; con un teclado excelente, una pantalla IPS FullHD (1920x1080) y una buena conectividad (2 puertos USB-C uno de ellos Thunderbolt, 2 puertos USB-A 3.0, HDMI, Ethernet, lector de tarjetas SD y jack de auriculares/micrófono). Internamente es muy modificable, ya que tiene la RAM en dos sockets SODIMM, el disco SSD en un socket SATA que se puede convertir en M.2, un par de puertos PCIe donde se puede conectar más almacenamiento intento SSD o cosas como un modem 5G y la batería interna es también sustituible fácilmente. Además, la &lt;a href=&#34;https://wiki.archlinux.org/title/Lenovo_ThinkPad_T480&#34;&gt;compatibilidad con Linux está asegurada&lt;/a&gt;, ya que Lenovo proporciona drivers para Linux y la comunidad ha desarrollado drivers para el resto de componentes.&lt;/p&gt;&lt;p&gt;Lo que sigue es el procedimiento completo que he utilizado para instalar Arch Linux en él.&lt;/p&gt;&lt;h2 id=&#34;reparticionado-del-disco&#34;&gt;Reparticionado del disco&lt;a class=&#34;headerlink&#34; href=&#34;#reparticionado-del-disco&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;El equipo trae Windows 11 Pro instalado ocupando todo el disco. El plan es mantenerlo y hacer sitio para instalar Arch Linux junto a él. El tamaño de 1TB del disco SSD del equipo es perfecto para poder alojar dos sistemas operativos sin problemas.&lt;/p&gt;&lt;p&gt;El primer paso es encoger la partición de Windows. Para poder hacerlo, BitLocker debe estar desactivado. En la instalación de Windows 11 que trae el equipo, BitLocker estaba ya desactivado. La partición la podemos encoger con el propio Windows en marcha, desde el &lt;code&gt;Administrador de discos&lt;/code&gt; (buscándolo en el menú Inicio o pulsando Win+X). Una vez en el Administrador de discos, pulsamos con el botón derecho del ratón sobre la partición &lt;code&gt;C:&lt;/code&gt; y seleccionamos la opción &lt;code&gt;Reducir volumen...&lt;/code&gt;. En mi caso, reduje el volumen en 750GB, quedando la partición de Windows con un tamaño de unos 220GB.&lt;/p&gt;&lt;p&gt;En las instalaciones de Windows, hay una patición pequeña al final del disco que es la partición de recuperación. Al encoger la partición principal, el espacio libre queda antes de esta partición y por tanto, al crear las particiones para Linux más adelante, éstas tendrán un número superior a la partición de recuperación, pero se encontrarán antes. Esto en sistemas de archivos GPT no es un problema.&lt;/p&gt;&lt;h2 id=&#34;instalacion-base&#34;&gt;Instalación base&lt;a class=&#34;headerlink&#34; href=&#34;#instalacion-base&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Para el proceso de instalación del sistema base me decanté por el camino convencional siguiendo las instrucciones de la &lt;a href=&#34;https://wiki.archlinux.org/title/Installation_guide&#34;&gt;guía de instalación&lt;/a&gt; en el wiki de Arch. Dicha instalación utiliza una ISO de un sistema Arch que podremos arrancar desde una unidad extraíble USB con el que instalaremos los paquetes mínimos para tener un sistema arrancable y muy básico.&lt;/p&gt;&lt;p&gt;Antes de comenzar, comentar que por las características tan dinámicas de la distribución Arch Linux, es muy posible que esta guía quede desactualizada en algún momento. Por lo que recomiendo consultar la &lt;a href=&#34;https://wiki.archlinux.org/title/Installation_guide&#34;&gt;guía oficial&lt;/a&gt; en caso de encontrar que algo no sale como se supone.&lt;/p&gt;&lt;p&gt;A continuación vemos paso a paso el proceso de instalación:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Descargar la &lt;a href=&#34;https://archlinux.org/download/&#34;&gt;ISO de Arch Linux&lt;/a&gt;. En concreto en mi caso utilicé &lt;a href=&#34;https://ftp.rediris.es/mirror/archlinux/iso/2025.06.01/archlinux-2025.06.01-x86_64.iso&#34;&gt;ésta versión&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;p&gt;Instalar la ISO en un pendrive. Puede utilizarse un programa como &lt;a href=&#34;https://www.balena.io/etcher/&#34;&gt;Balena Etcher&lt;/a&gt; o el comando &lt;code&gt;dd&lt;/code&gt; de Linux si se &lt;a href=&#34;sistemas/raspi.html#backup-de-la-sd-comprimiendo-al-vuelo&#34;&gt;sabe manejar&lt;/a&gt; (donde &lt;code&gt;/dev/sdX&lt;/code&gt; es el dispositivo del pendrive; puede comprobarse con el comando &lt;code&gt;lsblk&lt;/code&gt;):&lt;/p&gt;&lt;p&gt;&lt;code&gt;bashsudo dd bs=4M if=archlinux-2025.06.01-x86_64.iso of=/dev/sdX conv=fsync oflag=direct status=progress&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Arrancar el portátil con el pendrive insertado. Pulsar &lt;code&gt;Enter&lt;/code&gt; cuando ofrece interrumpir el proceso normal de arranque y acto seguido &lt;code&gt;F12&lt;/code&gt;. Esto hace que el ordenador arranque en el &lt;code&gt;Boot Menu&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;Seleccionar la opción para arrancar desde el dispositivo extraíble que aparecerá en el menú como &lt;code&gt;USB HDD: Mass Storage Device&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;&lt;p&gt;Una vez que termine de arrancar el sistema live de instalación de Arch, ejecutar los siguiente comandos en orden. En caso de conectar a la red por cable Ethernet, se puede evitar la sesión con &lt;code&gt;iwctl&lt;/code&gt; (en la cual sustituiremos &lt;code&gt;&amp;lt;SSID&amp;gt;&lt;/code&gt; por nuestro SSID e introduciremos la contraseña cuando se nos pida):&lt;/p&gt;&lt;p&gt;```bash&lt;/p&gt;&lt;h1 id=&#34;loadkeys-es&#34;&gt;loadkeys es&lt;a class=&#34;headerlink&#34; href=&#34;#loadkeys-es&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;iwctl&#34;&gt;iwctl&lt;a class=&#34;headerlink&#34; href=&#34;#iwctl&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;[iwd]# station wlan0 scan[iwd]# station wlan0 get-networks[iwd]# station wlan0 connect &lt;SSID&gt;[iwd]# exit&lt;/p&gt;&lt;h1 id=&#34;timedatectl&#34;&gt;timedatectl&lt;a class=&#34;headerlink&#34; href=&#34;#timedatectl&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;fdisk-devsda&#34;&gt;fdisk /dev/sda&lt;a class=&#34;headerlink&#34; href=&#34;#fdisk-devsda&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;```&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;En el programa &lt;code&gt;fdisk&lt;/code&gt; crear las siguientes particiones (en mi caso):&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;sda5&lt;/code&gt;: 8GB, tipo &lt;code&gt;Linux swap&lt;/code&gt;, con el identificador &lt;code&gt;19&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;&lt;code&gt;sda6&lt;/code&gt;: Espacio restante (724,4GB), tipo &lt;code&gt;Linux filesystem&lt;/code&gt;, con el identificador &lt;code&gt;20&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Salir de &lt;code&gt;fdisk&lt;/code&gt; escribiendo &lt;code&gt;w&lt;/code&gt; y pulsando &lt;code&gt;Enter&lt;/code&gt;. Continuar con los siguientes comandos (sustituir &lt;code&gt;&amp;lt;USER&amp;gt;&lt;/code&gt; por el nombre de usuario que se quiera crear):&lt;/p&gt;&lt;p&gt;```&lt;/p&gt;&lt;h1 id=&#34;mkfsext4-devsda6&#34;&gt;mkfs.ext4 /dev/sda6&lt;a class=&#34;headerlink&#34; href=&#34;#mkfsext4-devsda6&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;mkswap-devsda5&#34;&gt;mkswap /dev/sda5&lt;a class=&#34;headerlink&#34; href=&#34;#mkswap-devsda5&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;mount-devsda6-mnt&#34;&gt;mount /dev/sda6 /mnt&lt;a class=&#34;headerlink&#34; href=&#34;#mount-devsda6-mnt&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;mount-mkdir-devsda1-mntbootefi&#34;&gt;mount --mkdir /dev/sda1 /mnt/boot/efi&lt;a class=&#34;headerlink&#34; href=&#34;#mount-mkdir-devsda1-mntbootefi&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;swapon-devsda5&#34;&gt;swapon /dev/sda5&lt;a class=&#34;headerlink&#34; href=&#34;#swapon-devsda5&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;pacstrap-k-mnt-base-base-devel-linux-linux-firmware-sudo-vi-ntfs-3g-networkmanager-intel-ucode-grub-efibootmgr-os-prober&#34;&gt;pacstrap -K /mnt base base-devel linux linux-firmware sudo vi ntfs-3g networkmanager intel-ucode grub efibootmgr os-prober&lt;a class=&#34;headerlink&#34; href=&#34;#pacstrap-k-mnt-base-base-devel-linux-linux-firmware-sudo-vi-ntfs-3g-networkmanager-intel-ucode-grub-efibootmgr-os-prober&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;genfstab-u-mnt-mntetcfstab&#34;&gt;genfstab -U /mnt &amp;gt;&amp;gt; /mnt/etc/fstab&lt;a class=&#34;headerlink&#34; href=&#34;#genfstab-u-mnt-mntetcfstab&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;arch-chroot-mnt&#34;&gt;arch-chroot /mnt&lt;a class=&#34;headerlink&#34; href=&#34;#arch-chroot-mnt&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;ln-sf-usrsharezoneinfoeuropemadrid-etclocaltime&#34;&gt;ln -sf /usr/share/zoneinfo/Europe/Madrid /etc/localtime&lt;a class=&#34;headerlink&#34; href=&#34;#ln-sf-usrsharezoneinfoeuropemadrid-etclocaltime&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;hwclock-systohc&#34;&gt;hwclock --systohc&lt;a class=&#34;headerlink&#34; href=&#34;#hwclock-systohc&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;vi-etclocalegen-descomentar-en_usutf-8-utf-8-y-es_esutf-8-utf-8&#34;&gt;vi /etc/locale.gen # Descomentar &#39;en_US.UTF-8 UTF-8&#39; y &#39;es_ES.UTF-8 UTF-8&#39;&lt;a class=&#34;headerlink&#34; href=&#34;#vi-etclocalegen-descomentar-en_usutf-8-utf-8-y-es_esutf-8-utf-8&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;locale-gen&#34;&gt;locale-gen&lt;a class=&#34;headerlink&#34; href=&#34;#locale-gen&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;echo-langes_esutf-8-etclocaleconf&#34;&gt;echo &#34;LANG=es_ES.UTF-8&#34; &amp;gt; /etc/locale.conf&lt;a class=&#34;headerlink&#34; href=&#34;#echo-langes_esutf-8-etclocaleconf&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;echo-keymapes-etcvconsoleconf&#34;&gt;echo &#34;KEYMAP=es&#34; &amp;gt; /etc/vconsole.conf&lt;a class=&#34;headerlink&#34; href=&#34;#echo-keymapes-etcvconsoleconf&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;echo-thinkpad-etchostname&#34;&gt;echo &#34;thinkpad&#34; &amp;gt; /etc/hostname&lt;a class=&#34;headerlink&#34; href=&#34;#echo-thinkpad-etchostname&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;echo-e-n127001-localhostn1-localhostn127011-thinkpadlocaldomain-thinkpad-etchosts&#34;&gt;echo -e &#34;\n127.0.0.1 localhost\n::1 localhost\n127.0.1.1 thinkpad.localdomain thinkpad&#34; &amp;gt;&amp;gt; /etc/hosts&lt;a class=&#34;headerlink&#34; href=&#34;#echo-e-n127001-localhostn1-localhostn127011-thinkpadlocaldomain-thinkpad-etchosts&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;passwd&#34;&gt;passwd&lt;a class=&#34;headerlink&#34; href=&#34;#passwd&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;useradd-m-g-wheelaudiovideostorage-s-binbash&#34;&gt;useradd -m -G wheel,audio,video,storage -s /bin/bash &lt;USER&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#useradd-m-g-wheelaudiovideostorage-s-binbash&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;passwd_1&#34;&gt;passwd &lt;USER&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#passwd_1&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;visudo-descomentar-wheel-allall-all&#34;&gt;visudo # Descomentar &#39;%wheel ALL=(ALL) ALL&#39;&lt;a class=&#34;headerlink&#34; href=&#34;#visudo-descomentar-wheel-allall-all&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;systemctl-enable-networkmanager&#34;&gt;systemctl enable NetworkManager&lt;a class=&#34;headerlink&#34; href=&#34;#systemctl-enable-networkmanager&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;vi-etcdefaultgrub-descomentar-grub_disable_os_proberfalse&#34;&gt;vi /etc/default/grub # Descomentar &#39;GRUB_DISABLE_OS_PROBER=false&#39;&lt;a class=&#34;headerlink&#34; href=&#34;#vi-etcdefaultgrub-descomentar-grub_disable_os_proberfalse&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;os-prober&#34;&gt;os-prober&lt;a class=&#34;headerlink&#34; href=&#34;#os-prober&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;grub-install-targetx86_64-efi-efi-directorybootefi-bootloader-idgrub&#34;&gt;grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB&lt;a class=&#34;headerlink&#34; href=&#34;#grub-install-targetx86_64-efi-efi-directorybootefi-bootloader-idgrub&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;grub-mkconfig-o-bootgrubgrubcfg&#34;&gt;grub-mkconfig -o /boot/grub/grub.cfg&lt;a class=&#34;headerlink&#34; href=&#34;#grub-mkconfig-o-bootgrubgrubcfg&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;su-&#34;&gt;su - &lt;USER&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#su-&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;```&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 id=&#34;instalacion-entorno-grafico&#34;&gt;Instalación entorno gráfico&lt;a class=&#34;headerlink&#34; href=&#34;#instalacion-entorno-grafico&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Continuamos donde nos habíamos quedado, es decir en la sesión chroot desde el sistema live de instalación de Arch Linux. Lo haremos ya con el usuario normal (no root) por lo que a partir de ahora haremos uso con frecuencia de &lt;code&gt;sudo&lt;/code&gt;.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Ahora vamos a instalar el entorno gráfico, en mi caso XFCE4. En caso de elegir otro, &lt;a href=&#34;https://wiki.archlinux.org/title/Desktop_environment#Officially_supported&#34;&gt;aquí&lt;/a&gt; hay una lista de entornos gráficos soportados oficialmente por Arch Linux y las instrucciones correspondientes.&lt;/p&gt;&lt;p&gt;&lt;code&gt;bash$ sudo pacman -Syy$ sudo pacman -S xfce4 xfce4-goodies xorg xdg-user-dirs pavucontrol gvfs gvfs-smb thunar-archive-plugin unzip unrar lightdm lightdm-gtk-greeter lightdm-gtk-greeter-settings pipewire pipewire-pulse pipewire-alsa wireplumber git cmake$ sudo systemctl enable lightdm&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Instalar el gestor de paquetes &lt;code&gt;yay&lt;/code&gt; para poder instalar paquetes desde AUR:&lt;/p&gt;&lt;p&gt;&lt;code&gt;bash$ git clone https://aur.archlinux.org/yay.git$ cd yay$ makepkg -si&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Por último instalar algunos programas y paquetes que nos serán útiles:&lt;/p&gt;&lt;p&gt;&lt;code&gt;bash$ sudo pacman -S firefox firefox-i18n-es libreoffice-fresh gimp vlc vlc-plugins-all usbutils htop btop openssh man-pages-es xdg-user-dirs-gtk alsa-utils network-manager-applet blueman fwupd gparted terminator vlc gimp shutter audacity openshot ghex net-tools sshuttle gucharmap$ sudo systemctl enable --now sshd&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Cerramos la sesión chroot, desmontamos las particiones y reiniciamos el sistema:&lt;/p&gt;&lt;p&gt;```bash$ exit&lt;/p&gt;&lt;h1 id=&#34;exit&#34;&gt;exit&lt;a class=&#34;headerlink&#34; href=&#34;#exit&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;umount-r-mnt&#34;&gt;umount -R /mnt&lt;a class=&#34;headerlink&#34; href=&#34;#umount-r-mnt&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;reboot&#34;&gt;reboot&lt;a class=&#34;headerlink&#34; href=&#34;#reboot&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;```&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 id=&#34;applet-networkmanager-y-bluetooth&#34;&gt;Applet NetworkManager y Bluetooth&lt;a class=&#34;headerlink&#34; href=&#34;#applet-networkmanager-y-bluetooth&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Para que el applet de NetworkManager funcione correctamente, debemos instalar el paquete &lt;code&gt;network-manager-applet&lt;/code&gt; y añadirlo al autostart de XFCE4. Vamos a hacer algo parecido con el Bluetooth. Para ello, una vez iniciado el entorno gráfico, ejecutar:&lt;/p&gt;&lt;p&gt;&lt;code&gt;bash$ sudo pacman -S network-manager-applet blueman$ sudo systemctl start bluetooth$ sudo systemctl enable --now bluetooth&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Ahora debemos añadir los applets al autostart de XFCE4. Para ello, ir a &lt;code&gt;Configuración &amp;gt; Sesión y arranque &amp;gt; Aplicaciones de inicio&lt;/code&gt; y pulsar en &lt;code&gt;Añadir&lt;/code&gt;. En el campo &lt;code&gt;Nombre&lt;/code&gt; escribir &lt;code&gt;NetworkManager Applet&lt;/code&gt;, en &lt;code&gt;Comando&lt;/code&gt; escribir &lt;code&gt;nm-applet&lt;/code&gt; y en &lt;code&gt;Comentario&lt;/code&gt; podemos dejarlo vacío o poner algo como &lt;code&gt;Applet de NetworkManager&lt;/code&gt;. Hacemos lo mismo para el Bluetooth, añadiendo un nuevo applet con el nombre &lt;code&gt;Bluetooth&lt;/code&gt;, el comando &lt;code&gt;blueman-applet&lt;/code&gt; y un comentario opcional.&lt;/p&gt;&lt;h2 id=&#34;instalacion-pamac&#34;&gt;Instalación pamac&lt;a class=&#34;headerlink&#34; href=&#34;#instalacion-pamac&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Para facilitar la instalación de paquetes desde la interfaz gráfica, vamos a instalar &lt;code&gt;pamac&lt;/code&gt;:&lt;/p&gt;&lt;p&gt;&lt;code&gt;bash$ yay -S pamac-aur&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Una vez instalado, abrirlo (buscando &lt;code&gt;Añadir/Quitar software&lt;/code&gt; en el cajón de aplicaciones) y activar el soporte AUR en &lt;code&gt;Preferencias &amp;gt; Terceros &amp;gt; Activar soporte de AUR&lt;/code&gt;.&lt;/p&gt;&lt;h2 id=&#34;conclusion&#34;&gt;Conclusión&lt;a class=&#34;headerlink&#34; href=&#34;#conclusion&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Y esto sería todo. Ahora tenemos un sistema dualboot Arch Linux / Windows en el ThinkPad T480.&lt;/p&gt;&lt;h2 id=&#34;enlaces-de-interes&#34;&gt;Enlaces de interés&lt;a class=&#34;headerlink&#34; href=&#34;#enlaces-de-interes&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;https://wiki.archlinux.org/title/Installation_guide&#34;&gt;Guía de instalación de Arch Linux&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&#34;https://wiki.archlinux.org/title/Lenovo_ThinkPad_T480&#34;&gt;Instalación y configuración de Arch Linux en un portátil Lenovo ThinPad T480&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&#34;https://psref.lenovo.com/syspool/Sys/PDF/ThinkPad/ThinkPad_T480/ThinkPad_T480_Spec.PDF&#34;&gt;Hoja de especificaciones del Lenovo ThinPad T480&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&#34;https://wiki.archlinux.org/title/Fwupd&#34;&gt;Actualización de firmwares con fwupd&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&#34;https://github.com/boltgolt/howdy&#34;&gt;Howdy for Linux&lt;/a&gt;: Howdy proporciona autenticación estilo Windows Hello™ para Linux. Usa los emisores IR y la cámara integrados junto con reconocimiento facial para verificar tu identidad.&lt;/li&gt;&lt;li&gt;&lt;a href=&#34;https://libreboot.org/docs/install/t480.html&#34;&gt;Install Libreboot on Lenovo ThinkPad T480 and/or T480s&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Problema en el firmware Thunderbolt:&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;https://pcsupport.lenovo.com/gb/en/products/laptops-and-netbooks/thinkpad-t-series-laptops/thinkpad-t480s-type-20l7-20l8/solutions/ht508988-critical-intel-thunderbolt-software-and-firmware-updates-thinkpad&#34;&gt;Critical Intel Thunderbolt Software and Firmware Updates - ThinkPad&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=TzpOLO0vVoM&#34;&gt;Sustitución EPROM&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;</description><link>https://apuntes.eduardofilo.es/2025-06-28_thinkpad_t480.html</link> <pubDate>Sat, 28 Jun 2025 22:30:00 +0200</pubDate><source url="https://apuntes.eduardofilo.es/rss.xml">Apuntes de eduardófilo</source><guid isPermaLink="true">https://apuntes.eduardofilo.es/2025-06-28_thinkpad_t480.html</guid> <enclosure url="https://apuntes.eduardofilo.es/images/posts/2025-06-28_thinkpad_t480/thinkpad_t480.png" type="image/png" length="65578" /> </item> <item> <title>Arch Linux Installation on Lenovo ThinkPad T480</title> <description>&lt;p&gt;&lt;img alt=&#34;Lenovo ThinkPad T480 with Arch Linux&#34; src=&#34;../images/posts/2025-06-28_thinkpad_t480/thinkpad_t480.png&#34; /&gt;&lt;/p&gt;&lt;p&gt;After stumbling upon several videos praising the Lenovo ThinkPad T480 and feeling slightly dissatisfied with the laptop I bought last summer as my main device, I decided to buy a second-hand one. Specifically, I bought the T480 model with an Intel Core i5-8250U processor, 16GB RAM, and a 1TB SSD. It cost €252 delivered the next day, and I purchased it from a specialized refurbisher whose videos I had also seen, so I expected the machine to be in good condition. And it was. The laptop arrived in impeccable condition, like new, with both its batteries functional (internal and external). The ThinkPad T480 originally had many configuration options available. For this reason, when buying it from a refurbisher, it may come with different hardware features. Here is the full spec sheet where all hardware options can be seen: &lt;a href=&#34;https://psref.lenovo.com/syspool/Sys/PDF/ThinkPad/ThinkPad_T480/ThinkPad_T480_Spec.PDF&#34;&gt;PSREF Lenovo ThinkPad T480&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The Lenovo ThinkPad T480 is a 14&#34; laptop with an excellent keyboard, an IPS FullHD screen (1920x1080), and good connectivity (2 USB-C ports, one of them Thunderbolt, 2 USB-A 3.0 ports, HDMI, Ethernet, SD card reader, and audio/mic jack). Internally it&#39;s very customizable, as it has two SODIMM RAM slots, an SSD in a SATA slot that can be converted to M.2, a couple of PCIe ports for additional SSD storage or a 5G modem, and the internal battery is also easily replaceable. Moreover, &lt;a href=&#34;https://wiki.archlinux.org/title/Lenovo_ThinkPad_T480&#34;&gt;Linux compatibility is excellent&lt;/a&gt;, as Lenovo provides Linux drivers and the community has developed drivers for the rest of the components.&lt;/p&gt;&lt;p&gt;What follows is the full procedure I used to install Arch Linux on it.&lt;/p&gt;&lt;h2 id=&#34;disk-repartitioning&#34;&gt;Disk repartitioning&lt;a class=&#34;headerlink&#34; href=&#34;#disk-repartitioning&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The laptop comes with Windows 11 Pro installed occupying the entire disk. The plan is to keep it and make room to install Arch Linux alongside. The 1TB SSD is perfect to accommodate two operating systems without issues.&lt;/p&gt;&lt;p&gt;The first step is to shrink the Windows partition. To do so, BitLocker must be disabled. In the Windows 11 installation that came with the machine, BitLocker was already disabled. We can shrink the partition using Windows itself, through the &lt;code&gt;Disk Management&lt;/code&gt; tool (search in Start menu or press Win+X). Once there, right-click the &lt;code&gt;C:&lt;/code&gt; partition and select &lt;code&gt;Shrink Volume...&lt;/code&gt;. In my case, I shrank it by 750GB, leaving around 220GB for Windows.&lt;/p&gt;&lt;p&gt;Windows installations have a small recovery partition at the end of the disk. When shrinking the main partition, the free space appears before this recovery partition. Thus, when creating Linux partitions later, their numbering will be higher than the recovery partition but will physically be located before it. This is not a problem when using GPT partitioning schemes.&lt;/p&gt;&lt;h2 id=&#34;base-installation&#34;&gt;Base installation&lt;a class=&#34;headerlink&#34; href=&#34;#base-installation&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;For the base system installation, I chose the conventional route following the &lt;a href=&#34;https://wiki.archlinux.org/title/Installation_guide&#34;&gt;installation guide&lt;/a&gt; from the Arch wiki. This installation uses an ISO of an Arch live system that we boot from a removable USB drive and use to install the minimal packages for a bootable, very basic system.&lt;/p&gt;&lt;p&gt;Before we begin, it&#39;s worth noting that due to the dynamic nature of Arch Linux, this guide may become outdated. I recommend checking the &lt;a href=&#34;https://wiki.archlinux.org/title/Installation_guide&#34;&gt;official guide&lt;/a&gt; if something doesn&#39;t go as expected.&lt;/p&gt;&lt;p&gt;Here is the step-by-step installation process:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Download the &lt;a href=&#34;https://archlinux.org/download/&#34;&gt;Arch Linux ISO&lt;/a&gt;. I used &lt;a href=&#34;https://ftp.rediris.es/mirror/archlinux/iso/2025.06.01/archlinux-2025.06.01-x86_64.iso&#34;&gt;this version&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;p&gt;Flash the ISO to a USB stick using &lt;a href=&#34;https://www.balena.io/etcher/&#34;&gt;Balena Etcher&lt;/a&gt; or the &lt;code&gt;dd&lt;/code&gt; command in Linux (if you &lt;a href=&#34;sistemas/raspi.html#backup-de-la-sd-comprimiendo-al-vuelo&#34;&gt;know how to use it&lt;/a&gt;):&lt;/p&gt;&lt;p&gt;&lt;code&gt;bashsudo dd bs=4M if=archlinux-2025.06.01-x86_64.iso of=/dev/sdX conv=fsync oflag=direct status=progress&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Boot the laptop with the USB stick inserted. Press &lt;code&gt;Enter&lt;/code&gt; when prompted to interrupt normal boot, then press &lt;code&gt;F12&lt;/code&gt; to enter the &lt;code&gt;Boot Menu&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;Select the option to boot from the removable device, listed as &lt;code&gt;USB HDD: Mass Storage Device&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;&lt;p&gt;Once the Arch live system boots, run the following commands in order. If using a wired Ethernet connection, you can skip the &lt;code&gt;iwctl&lt;/code&gt; session (replace &lt;code&gt;&amp;lt;SSID&amp;gt;&lt;/code&gt; with your network name and enter the password when prompted):&lt;/p&gt;&lt;p&gt;```bash&lt;/p&gt;&lt;h1 id=&#34;loadkeys-es&#34;&gt;loadkeys es&lt;a class=&#34;headerlink&#34; href=&#34;#loadkeys-es&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;iwctl&#34;&gt;iwctl&lt;a class=&#34;headerlink&#34; href=&#34;#iwctl&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;[iwd]# station wlan0 scan[iwd]# station wlan0 get-networks[iwd]# station wlan0 connect &lt;SSID&gt;[iwd]# exit&lt;/p&gt;&lt;h1 id=&#34;timedatectl&#34;&gt;timedatectl&lt;a class=&#34;headerlink&#34; href=&#34;#timedatectl&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;fdisk-devsda&#34;&gt;fdisk /dev/sda&lt;a class=&#34;headerlink&#34; href=&#34;#fdisk-devsda&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;```&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;In &lt;code&gt;fdisk&lt;/code&gt;, create the following partitions:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;sda5&lt;/code&gt;: 8GB, type &lt;code&gt;Linux swap&lt;/code&gt;, ID &lt;code&gt;19&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;&lt;code&gt;sda6&lt;/code&gt;: Remaining space (724.4GB), type &lt;code&gt;Linux filesystem&lt;/code&gt;, ID &lt;code&gt;20&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Exit &lt;code&gt;fdisk&lt;/code&gt; by typing &lt;code&gt;w&lt;/code&gt; and pressing &lt;code&gt;Enter&lt;/code&gt;. Continue with the following commands (replace &lt;code&gt;&amp;lt;USER&amp;gt;&lt;/code&gt; with your desired username):&lt;/p&gt;&lt;p&gt;```&lt;/p&gt;&lt;h1 id=&#34;mkfsext4-devsda6&#34;&gt;mkfs.ext4 /dev/sda6&lt;a class=&#34;headerlink&#34; href=&#34;#mkfsext4-devsda6&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;mkswap-devsda5&#34;&gt;mkswap /dev/sda5&lt;a class=&#34;headerlink&#34; href=&#34;#mkswap-devsda5&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;mount-devsda6-mnt&#34;&gt;mount /dev/sda6 /mnt&lt;a class=&#34;headerlink&#34; href=&#34;#mount-devsda6-mnt&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;mount-mkdir-devsda1-mntbootefi&#34;&gt;mount --mkdir /dev/sda1 /mnt/boot/efi&lt;a class=&#34;headerlink&#34; href=&#34;#mount-mkdir-devsda1-mntbootefi&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;swapon-devsda5&#34;&gt;swapon /dev/sda5&lt;a class=&#34;headerlink&#34; href=&#34;#swapon-devsda5&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;pacstrap-k-mnt-base-base-devel-linux-linux-firmware-sudo-vi-ntfs-3g-networkmanager-intel-ucode-grub-efibootmgr-os-prober&#34;&gt;pacstrap -K /mnt base base-devel linux linux-firmware sudo vi ntfs-3g networkmanager intel-ucode grub efibootmgr os-prober&lt;a class=&#34;headerlink&#34; href=&#34;#pacstrap-k-mnt-base-base-devel-linux-linux-firmware-sudo-vi-ntfs-3g-networkmanager-intel-ucode-grub-efibootmgr-os-prober&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;genfstab-u-mnt-mntetcfstab&#34;&gt;genfstab -U /mnt &amp;gt;&amp;gt; /mnt/etc/fstab&lt;a class=&#34;headerlink&#34; href=&#34;#genfstab-u-mnt-mntetcfstab&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;arch-chroot-mnt&#34;&gt;arch-chroot /mnt&lt;a class=&#34;headerlink&#34; href=&#34;#arch-chroot-mnt&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;ln-sf-usrsharezoneinfoeuropemadrid-etclocaltime&#34;&gt;ln -sf /usr/share/zoneinfo/Europe/Madrid /etc/localtime&lt;a class=&#34;headerlink&#34; href=&#34;#ln-sf-usrsharezoneinfoeuropemadrid-etclocaltime&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;hwclock-systohc&#34;&gt;hwclock --systohc&lt;a class=&#34;headerlink&#34; href=&#34;#hwclock-systohc&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;vi-etclocalegen-uncomment-en_usutf-8-utf-8-and-es_esutf-8-utf-8&#34;&gt;vi /etc/locale.gen # Uncomment &#39;en_US.UTF-8 UTF-8&#39; and &#39;es_ES.UTF-8 UTF-8&#39;&lt;a class=&#34;headerlink&#34; href=&#34;#vi-etclocalegen-uncomment-en_usutf-8-utf-8-and-es_esutf-8-utf-8&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;locale-gen&#34;&gt;locale-gen&lt;a class=&#34;headerlink&#34; href=&#34;#locale-gen&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;echo-langes_esutf-8-etclocaleconf&#34;&gt;echo &#34;LANG=es_ES.UTF-8&#34; &amp;gt; /etc/locale.conf&lt;a class=&#34;headerlink&#34; href=&#34;#echo-langes_esutf-8-etclocaleconf&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;echo-keymapes-etcvconsoleconf&#34;&gt;echo &#34;KEYMAP=es&#34; &amp;gt; /etc/vconsole.conf&lt;a class=&#34;headerlink&#34; href=&#34;#echo-keymapes-etcvconsoleconf&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;echo-thinkpad-etchostname&#34;&gt;echo &#34;thinkpad&#34; &amp;gt; /etc/hostname&lt;a class=&#34;headerlink&#34; href=&#34;#echo-thinkpad-etchostname&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;echo-e-n127001-localhostn1-localhostn127011-thinkpadlocaldomain-thinkpad-etchosts&#34;&gt;echo -e &#34;\n127.0.0.1 localhost\n::1 localhost\n127.0.1.1 thinkpad.localdomain thinkpad&#34; &amp;gt;&amp;gt; /etc/hosts&lt;a class=&#34;headerlink&#34; href=&#34;#echo-e-n127001-localhostn1-localhostn127011-thinkpadlocaldomain-thinkpad-etchosts&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;passwd&#34;&gt;passwd&lt;a class=&#34;headerlink&#34; href=&#34;#passwd&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;useradd-m-g-wheelaudiovideostorage-s-binbash&#34;&gt;useradd -m -G wheel,audio,video,storage -s /bin/bash &lt;USER&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#useradd-m-g-wheelaudiovideostorage-s-binbash&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;passwd_1&#34;&gt;passwd &lt;USER&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#passwd_1&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;visudo-uncomment-wheel-allall-all&#34;&gt;visudo # Uncomment &#39;%wheel ALL=(ALL) ALL&#39;&lt;a class=&#34;headerlink&#34; href=&#34;#visudo-uncomment-wheel-allall-all&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;systemctl-enable-networkmanager&#34;&gt;systemctl enable NetworkManager&lt;a class=&#34;headerlink&#34; href=&#34;#systemctl-enable-networkmanager&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;vi-etcdefaultgrub-uncomment-grub_disable_os_proberfalse&#34;&gt;vi /etc/default/grub # Uncomment &#39;GRUB_DISABLE_OS_PROBER=false&#39;&lt;a class=&#34;headerlink&#34; href=&#34;#vi-etcdefaultgrub-uncomment-grub_disable_os_proberfalse&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;os-prober&#34;&gt;os-prober&lt;a class=&#34;headerlink&#34; href=&#34;#os-prober&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;grub-install-targetx86_64-efi-efi-directorybootefi-bootloader-idgrub&#34;&gt;grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB&lt;a class=&#34;headerlink&#34; href=&#34;#grub-install-targetx86_64-efi-efi-directorybootefi-bootloader-idgrub&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;grub-mkconfig-o-bootgrubgrubcfg&#34;&gt;grub-mkconfig -o /boot/grub/grub.cfg&lt;a class=&#34;headerlink&#34; href=&#34;#grub-mkconfig-o-bootgrubgrubcfg&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;su-&#34;&gt;su - &lt;USER&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#su-&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;```&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 id=&#34;graphical-environment-installation&#34;&gt;Graphical environment installation&lt;a class=&#34;headerlink&#34; href=&#34;#graphical-environment-installation&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;We continue from where we left off, that is, in the chroot session from the Arch Linux live installer. From now on we&#39;ll use a regular user (not root), so we&#39;ll often use &lt;code&gt;sudo&lt;/code&gt;.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Now install the graphical environment — I chose XFCE4. If you prefer another one, &lt;a href=&#34;https://wiki.archlinux.org/title/Desktop_environment#Officially_supported&#34;&gt;here&lt;/a&gt; is a list of officially supported desktop environments and instructions.&lt;/p&gt;&lt;p&gt;&lt;code&gt;bash$ sudo pacman -Syy$ sudo pacman -S xfce4 xfce4-goodies xorg xdg-user-dirs pavucontrol gvfs gvfs-smb thunar-archive-plugin unzip unrar lightdm lightdm-gtk-greeter lightdm-gtk-greeter-settings pipewire pipewire-pulse pipewire-alsa wireplumber git cmake$ sudo systemctl enable lightdm&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Install the &lt;code&gt;yay&lt;/code&gt; package manager to install packages from AUR:&lt;/p&gt;&lt;p&gt;&lt;code&gt;bash$ git clone https://aur.archlinux.org/yay.git$ cd yay$ makepkg -si&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Finally, install some useful applications and packages:&lt;/p&gt;&lt;p&gt;&lt;code&gt;bash$ sudo pacman -S firefox firefox-i18n-es libreoffice-fresh gimp vlc vlc-plugins-all usbutils htop btop openssh man-pages-es xdg-user-dirs-gtk alsa-utils network-manager-applet blueman fwupd gparted terminator vlc gimp shutter audacity openshot ghex net-tools sshuttle gucharmap$ sudo systemctl enable --now sshd&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Exit the chroot session, unmount the partitions, and reboot:&lt;/p&gt;&lt;p&gt;```bash$ exit&lt;/p&gt;&lt;h1 id=&#34;exit&#34;&gt;exit&lt;a class=&#34;headerlink&#34; href=&#34;#exit&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;umount-r-mnt&#34;&gt;umount -R /mnt&lt;a class=&#34;headerlink&#34; href=&#34;#umount-r-mnt&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;reboot&#34;&gt;reboot&lt;a class=&#34;headerlink&#34; href=&#34;#reboot&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;```&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 id=&#34;networkmanager-and-bluetooth-applets&#34;&gt;NetworkManager and Bluetooth Applets&lt;a class=&#34;headerlink&#34; href=&#34;#networkmanager-and-bluetooth-applets&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;To make the NetworkManager applet work properly, we need to install the &lt;code&gt;network-manager-applet&lt;/code&gt; package and add it to XFCE4 autostart. We’ll do something similar for Bluetooth. Once in the graphical environment, run:&lt;/p&gt;&lt;p&gt;&lt;code&gt;bash$ sudo pacman -S network-manager-applet blueman$ sudo systemctl start bluetooth$ sudo systemctl enable --now bluetooth&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Now add both applets to XFCE4 autostart. Go to &lt;code&gt;Settings &amp;gt; Session and Startup &amp;gt; Application Autostart&lt;/code&gt; and click &lt;code&gt;Add&lt;/code&gt;. In &lt;code&gt;Name&lt;/code&gt;, enter &lt;code&gt;NetworkManager Applet&lt;/code&gt;, in &lt;code&gt;Command&lt;/code&gt;, enter &lt;code&gt;nm-applet&lt;/code&gt;, and you can leave &lt;code&gt;Comment&lt;/code&gt; empty or write something like &lt;code&gt;NetworkManager applet&lt;/code&gt;. Do the same for Bluetooth: name &lt;code&gt;Bluetooth&lt;/code&gt;, command &lt;code&gt;blueman-applet&lt;/code&gt;, optional comment.&lt;/p&gt;&lt;h2 id=&#34;installing-pamac&#34;&gt;Installing pamac&lt;a class=&#34;headerlink&#34; href=&#34;#installing-pamac&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;To make graphical package management easier, install &lt;code&gt;pamac&lt;/code&gt;:&lt;/p&gt;&lt;p&gt;&lt;code&gt;bash$ yay -S pamac-aur&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Once installed, open it (search for &lt;code&gt;Add/Remove Software&lt;/code&gt; in the application menu) and enable AUR support under &lt;code&gt;Preferences &amp;gt; Third Party &amp;gt; Enable AUR support&lt;/code&gt;.&lt;/p&gt;&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;a class=&#34;headerlink&#34; href=&#34;#conclusion&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;And that’s it. Now we have a dual boot Arch Linux / Windows system on the ThinkPad T480.&lt;/p&gt;&lt;h2 id=&#34;links-of-interest&#34;&gt;Links of interest&lt;a class=&#34;headerlink&#34; href=&#34;#links-of-interest&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;https://wiki.archlinux.org/title/Installation_guide&#34;&gt;Arch Linux Installation Guide&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&#34;https://wiki.archlinux.org/title/Lenovo_ThinkPad_T480&#34;&gt;Installation and configuration of Arch Linux on a Lenovo T480 laptop&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&#34;https://psref.lenovo.com/syspool/Sys/PDF/ThinkPad/ThinkPad_T480/ThinkPad_T480_Spec.PDF&#34;&gt;Lenovo ThinkPad T480 Specification Sheet&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&#34;https://wiki.archlinux.org/title/Fwupd&#34;&gt;Firmware updates with fwupd&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&#34;https://github.com/boltgolt/howdy&#34;&gt;Howdy for Linux&lt;/a&gt;: Howdy provides Windows Hello™ style authentication for Linux. Use your built-in IR emitters and camera in combination with facial recognition to prove who you are.&lt;/li&gt;&lt;li&gt;&lt;a href=&#34;https://libreboot.org/docs/install/t480.html&#34;&gt;Install Libreboot on Lenovo ThinkPad T480 and/or T480s&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Thunderbolt firmware problem:&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;https://pcsupport.lenovo.com/gb/en/products/laptops-and-netbooks/thinkpad-t-series-laptops/thinkpad-t480s-type-20l7-20l8/solutions/ht508988-critical-intel-thunderbolt-software-and-firmware-updates-thinkpad&#34;&gt;Critical Intel Thunderbolt Software and Firmware Updates - ThinkPad&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=TzpOLO0vVoM&#34;&gt;EPROM replacement&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;</description><link>https://apuntes.eduardofilo.es/en/2025-06-28_thinkpad_t480.html</link> <pubDate>Sat, 28 Jun 2025 22:30:00 +0200</pubDate><source url="https://apuntes.eduardofilo.es/rss.xml">Apuntes de eduardófilo</source><guid isPermaLink="true">https://apuntes.eduardofilo.es/en/2025-06-28_thinkpad_t480.html</guid> <enclosure url="https://apuntes.eduardofilo.es/images/posts/2025-06-28_thinkpad_t480/thinkpad_t480.png" type="image/png" length="65578" /> </item> <item> <title>ZX Mechtrum</title> <description>&lt;p&gt;&lt;img alt=&#34;Mechtrum&#34; src=&#34;images/posts/2024-09-09_zx_mechtrum/mechtrum_logo.png&#34; /&gt;&lt;/p&gt;&lt;p&gt;Hace tiempo que me apetecía montar un kit de &lt;a href=&#34;https://www.bytedelight.com/?product=harlequin-128k-rev-2d-black-large-diy-kit&#34;&gt;ZX Spectrum Harlequin 128&lt;/a&gt;. Es el Spectrum perfecto (128KB, soporte de todos los modelos/ROMs de las distintas versiones producidas por Sinclair y Amstrad, y con componentes que se pueden adquirir a día de hoy, incluida la ULA que está reemplazada por lógica discreta). Pero para la caja, la opción de adquirir una de las carcasas réplica del 48K original (gomas), no me entusiasmaba.&lt;/p&gt;&lt;p&gt;Hace unos meses conocí el proyecto &lt;a href=&#34;https://leesmithsworkshop.co.uk/products/the-mechtrum-mechanical-keyboard-zx-spectrum-case&#34;&gt;ZX Mechtrum&lt;/a&gt; de Lee Smith, una caja para placas de formato 48KB con un teclado mecánico, y me pareció el complemento perfecto para el Harlequin. De hecho, en el &lt;a href=&#34;https://www.youtube.com/watch?v=Gr8KhQHaJr4&#34;&gt;vídeo del canal More Fun Making It&lt;/a&gt; gracias al que supe de su existencia, su creador comenta que tiene el proyecto inmediato de instalar un Harlequin 128 en una de estas cajas.&lt;/p&gt;&lt;p&gt;Como ya existen varios vídeos y guías tanto del &lt;a href=&#34;https://www.youtube.com/watch?v=s1klr5vRye0&#34;&gt;kit Harlequin&lt;/a&gt; como de la caja &lt;a href=&#34;https://www.youtube.com/watch?v=O_FdXpOi2W4&#34;&gt;ZX Mechtrum&lt;/a&gt;, no voy a detallar el proceso de montaje, pero sí describirlo en general y comentar algunas particularidades y problemas que he encontrado.&lt;/p&gt;&lt;h4 id=&#34;mechtrum&#34;&gt;Mechtrum&lt;a class=&#34;headerlink&#34; href=&#34;#mechtrum&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Como el kit Harlequin 128 es distribuido por Byte Delight, por lo que su disponibilidad es bastante estable, el punto más crítico del plan era adquirir el &lt;a href=&#34;https://leesmithsworkshop.co.uk/products/the-mechtrum-mechanical-keyboard-zx-spectrum-case&#34;&gt;Mechtrum de Lee Smith&lt;/a&gt;, ya que la venta de productos no es su principal actividad. De hecho pude conseguir la última unidad de una tirada que hizo a finales de 2023. En el momento de escribir esto (septiembre 2024) vuelve a estar a la venta, pero no es de esperar que se mantenga siempre así. El caso es que pude adquirir una unidad que llegó ya montada. Mi unidad venía con 3 faceplates, una para el 48K, otra para el &lt;a href=&#34;https://github.com/UzixLS/zx-sizif-512/&#34;&gt;Sifzif 512&lt;/a&gt; y otra para el Harlequin 128.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Mechtrum&#34; src=&#34;images/posts/2024-09-09_zx_mechtrum/mechtrum.jpg&#34; /&gt;&lt;/p&gt;&lt;h4 id=&#34;harlequin-128&#34;&gt;Harlequin 128&lt;a class=&#34;headerlink&#34; href=&#34;#harlequin-128&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;El Harlequin 128, es un diseño de Don Superfo y puede adquirirse la PCB a través de los enlaces que hay en el &lt;a href=&#34;https://github.com/DonSuperfo/Superfo-Harlequin-128&#34;&gt;repositorio base del proyecto&lt;/a&gt;. En el repositorio se encuentra también la BOM (Bill Of Materials) para las distintas versiones con todos los componentes necesarios. Pero con diferencia la opción más sencilla es adquirir uno de los kits que distribuye Ben Versteeg, de &lt;a href=&#34;https://www.bytedelight.com/&#34;&gt;Byte Delight&lt;/a&gt;. El kit viene con una PCB de la versión issue 2D y todos los componentes necesarios para montarlo, convenientemente clasificados en bolsitas junto a un manual con el que es casi imposible perderse. También hay épocas en las que no está disponible en su tienda, pero es cuestión de estar atento o suscribirse a las notificaciones de disponibilidad. En mi caso tuve que esperar un par de meses a que volviera a estar disponible.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Harlequin 128&#34; src=&#34;images/posts/2024-09-09_zx_mechtrum/harlequin_128.jpg&#34; /&gt;&lt;/p&gt;&lt;p&gt;El único problema que tuve durante su montaje fue que según el manual el array de resistencias R61 es opcional si no se va a instalar la interfaz de joystick. Pero esas resistencias, además de dar servicio al puerto de joystick, hacen de pullup para los microinterruptores de selección del banco de ROM, por lo que sin instalarlas, la selección de bancos de ROM superiores al 0 no era estable. Tras instalar el array R61, todo funcionó correctamente.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Harlequin 128 ROM selector pullups&#34; src=&#34;images/posts/2024-09-09_zx_mechtrum/harlequin_128_pullups.png&#34; /&gt;&lt;/p&gt;&lt;h4 id=&#34;resultado&#34;&gt;Resultado&lt;a class=&#34;headerlink&#34; href=&#34;#resultado&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;El resultado es un sueño hecho realidad, un Spectrum 128K con teclado mecánico y componentes fiables. Además de una belleza. 🤩&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Mechtrum&#34; src=&#34;images/posts/2024-09-09_zx_mechtrum/resultado.jpg&#34; /&gt;&lt;/p&gt;</description><link>https://apuntes.eduardofilo.es/2024-09-09_zx_mechtrum.html</link> <pubDate>Mon, 09 Sep 2024 12:00:00 +0200</pubDate><source url="https://apuntes.eduardofilo.es/rss.xml">Apuntes de eduardófilo</source><guid isPermaLink="true">https://apuntes.eduardofilo.es/2024-09-09_zx_mechtrum.html</guid> <enclosure url="https://apuntes.eduardofilo.es/images/posts/2024-09-09_zx_mechtrum/mechtrum_logo.png" type="image/png" length="278257" /> </item> <item> <title>ZX Mechtrum</title> <description>&lt;p&gt;&lt;img alt=&#34;Mechtrum&#34; src=&#34;../images/posts/2024-09-09_zx_mechtrum/mechtrum_logo.png&#34; /&gt;&lt;/p&gt;&lt;p&gt;For a while, I’ve wanted to assemble a &lt;a href=&#34;https://www.bytedelight.com/?product=harlequin-128k-rev-2d-black-large-diy-kit&#34;&gt;ZX Spectrum Harlequin 128&lt;/a&gt; kit. It’s the perfect Spectrum (128KB, supports all models/ROMs from the various versions produced by Sinclair and Amstrad, and with components that can still be acquired today, including the ULA, which has been replaced by discrete logic). However, the option of purchasing a replica case of the original 48K (rubber keys) didn’t really excite me.&lt;/p&gt;&lt;p&gt;A few months ago, I came across Lee Smith’s &lt;a href=&#34;https://leesmithsworkshop.co.uk/products/the-mechtrum-mechanical-keyboard-zx-spectrum-case&#34;&gt;ZX Mechtrum&lt;/a&gt; project, a case for 48KB-format boards with a mechanical keyboard, and it seemed like the perfect complement for the Harlequin. In fact, in the &lt;a href=&#34;https://www.youtube.com/watch?v=Gr8KhQHaJr4&#34;&gt;video from the More Fun Making It channel&lt;/a&gt;, through which I learned of its existence, its creator mentions that he plans to install a Harlequin 128 in one of these cases soon.&lt;/p&gt;&lt;p&gt;Since there are already several videos and guides for both the &lt;a href=&#34;https://www.youtube.com/watch?v=s1klr5vRye0&#34;&gt;Harlequin kit&lt;/a&gt; and the &lt;a href=&#34;https://www.youtube.com/watch?v=O_FdXpOi2W4&#34;&gt;ZX Mechtrum&lt;/a&gt; case, I won’t detail the assembly process but will instead describe it generally and mention some peculiarities and problems I encountered.&lt;/p&gt;&lt;h4 id=&#34;mechtrum&#34;&gt;Mechtrum&lt;a class=&#34;headerlink&#34; href=&#34;#mechtrum&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Since the Harlequin 128 kit is distributed by Byte Delight, its availability is quite stable, so the most critical point of the plan was acquiring the &lt;a href=&#34;https://leesmithsworkshop.co.uk/products/the-mechtrum-mechanical-keyboard-zx-spectrum-case&#34;&gt;Mechtrum from Lee Smith&lt;/a&gt;, as selling products is not his main activity. In fact, I managed to get the last unit from a batch he made in late 2023. As of writing this (September 2024), it’s back on sale, but it’s not expected to remain available for long. In any case, I was able to acquire a unit that arrived pre-assembled. My unit came with 3 faceplates, one for the 48K, another for the &lt;a href=&#34;https://github.com/UzixLS/zx-sizif-512/&#34;&gt;Sifzif 512&lt;/a&gt;, and one for the Harlequin 128.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Mechtrum&#34; src=&#34;../images/posts/2024-09-09_zx_mechtrum/mechtrum.jpg&#34; /&gt;&lt;/p&gt;&lt;h4 id=&#34;harlequin-128&#34;&gt;Harlequin 128&lt;a class=&#34;headerlink&#34; href=&#34;#harlequin-128&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;The Harlequin 128 is a design by Don Superfo, and the PCB can be purchased through the links provided in the &lt;a href=&#34;https://github.com/DonSuperfo/Superfo-Harlequin-128&#34;&gt;project’s base repository&lt;/a&gt;. The repository also contains the BOM (Bill Of Materials) for the different versions with all the necessary components. However, by far the easiest option is to purchase one of the kits distributed by Ben Versteeg from &lt;a href=&#34;https://www.bytedelight.com/&#34;&gt;Byte Delight&lt;/a&gt;. The kit comes with an issue 2D version PCB and all the necessary components to assemble it, conveniently sorted into bags along with a manual that makes it almost impossible to get lost. There are times when it’s not available in his store, but it’s just a matter of staying alert or subscribing to availability notifications. In my case, I had to wait a couple of months for it to become available again.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Harlequin 128&#34; src=&#34;../images/posts/2024-09-09_zx_mechtrum/harlequin_128.jpg&#34; /&gt;&lt;/p&gt;&lt;p&gt;The only problem I encountered during assembly was that, according to the manual, the R61 resistor array is optional if you’re not going to install the joystick interface. However, these resistors, in addition to serving the joystick port, also act as pullups for the ROM bank selection microswitches, so without them, selecting ROM banks higher than 0 was unstable. After installing the R61 array, everything worked correctly.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Harlequin 128 ROM selector pullups&#34; src=&#34;../images/posts/2024-09-09_zx_mechtrum/harlequin_128_pullups.png&#34; /&gt;&lt;/p&gt;&lt;h4 id=&#34;resultado&#34;&gt;Resultado&lt;a class=&#34;headerlink&#34; href=&#34;#resultado&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;The result is a dream come true: a 128K Spectrum with a mechanical keyboard and reliable components. And it’s a beauty. 🤩&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Mechtrum&#34; src=&#34;../images/posts/2024-09-09_zx_mechtrum/resultado.jpg&#34; /&gt;&lt;/p&gt;</description><link>https://apuntes.eduardofilo.es/en/2024-09-09_zx_mechtrum.html</link> <pubDate>Mon, 09 Sep 2024 12:00:00 +0200</pubDate><source url="https://apuntes.eduardofilo.es/rss.xml">Apuntes de eduardófilo</source><guid isPermaLink="true">https://apuntes.eduardofilo.es/en/2024-09-09_zx_mechtrum.html</guid> <enclosure url="https://apuntes.eduardofilo.es/images/posts/2024-09-09_zx_mechtrum/mechtrum_logo.png" type="image/png" length="278257" /> </item> <item> <title>Instalación Arch Linux en Steam Deck</title> <description>&lt;p&gt;&lt;img alt=&#34;Steam Deck con Arch Linux&#34; src=&#34;images/posts/2024-09-04_steam_deck_arch/steam_deck_logo.png&#34; /&gt;&lt;/p&gt;&lt;div class=&#34;admonition info&#34;&gt;&lt;p class=&#34;admonition-title&#34;&gt;Pérdida de dual boot al actualizar SteamOS&lt;/p&gt;&lt;p&gt;En la actualización de SteamOS a la rama 3.6 (en concreto la primera versión estable de esa rama fue la 3.6.19) se perdió la configuración del dualboot por lo que la máquina sólo arrancaba en SteamOS. La solución fue volver a seguir los pasos de &lt;a href=&#34;#instalacion-gestor-dualboot&#34;&gt;Instalación gestor dualboot&lt;/a&gt; a partir del paso 4.&lt;/p&gt;&lt;/div&gt;&lt;p&gt;En julio de 2024 durante unas semanas, el modelo de 512GB de la Steam Deck LCD pudo adquirirse por debajo de los 400€. Un precio muy atractivo para una &lt;a href=&#34;https://www.steamdeck.com/es/tech/deck&#34;&gt;máquina decente&lt;/a&gt; con procesador AMD de arquitectura x86 (AMD64), 16GB de RAM, disco SSD tipo NVMe de la capacidad mencionada antes, pantalla táctil y controles de juego integrados. Es decir un PC consolizado, pero un PC al fin y al cabo. Pero sobre todo lo que hace para mi especialmente atractiva la máquina es su soporte Linux completo, lo que la convierte en una plataforma ideal para cacharrear con distribuciones Linux o utilizarlo como PC portátil secundario. Todo esto naturalmente además de su uso convencional para jugar y &lt;a href=&#34;https://www.emudeck.com/&#34;&gt;emular&lt;/a&gt; videojuegos.&lt;/p&gt;&lt;p&gt;SteamOS, el sistema operativo que trae de serie, está basado en Arch Linux, y en su modo escritorio, puede utilizarse prácticamente como un Arch Linux normal. La principal restricción es que está construido en modo inmutable y a pesar de que este tipo de configuración de sistema tiene sus virtudes y se entiende perfectamente que Valve lo haya escogido para su máquina, todavía prefiero un sistema normal (mutable), por lo que me decidí por instalar un Arch normal y aprender a instalar de paso esta distribución. Según el &lt;a href=&#34;https://wiki.archlinux.org/title/Steam_Deck&#34;&gt;wiki de Arch&lt;/a&gt;, el hardware del modelo LCD de la Steam Deck está soportado al 100% en Arch.&lt;/p&gt;&lt;p&gt;Lo que sigue es el procedimiento completo que he utilizado.&lt;/p&gt;&lt;h2 id=&#34;tecladoraton&#34;&gt;Teclado/ratón&lt;a class=&#34;headerlink&#34; href=&#34;#tecladoraton&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Aunque gran parte de las operaciones pueden hacerse utilizando la pantalla táctil y los trackpads de la Steam Deck, es muy recomendable conectar un teclado y ratón a la consola para facilitar la instalación, sobre todo durante la sesión de terminal con la que instalaremos el sistema base. La Steam Deck sólo posee un puerto USB-C, por lo que lo más práctico es utilizar un dock. También puede ser suficiente (sobre todo si ejecutamos los sistemas live desde una microSD) con un dongle de teclado/ratón inalámbricos conectados con un adaptador USB&amp;lt;-&amp;gt;USB-C, aunque en ese caso conviene asegurarse de que la Steam Deck tiene la batería completamente cargada.&lt;/p&gt;&lt;p&gt;En mi caso utilicé un dock &lt;a href=&#34;https://www.dell.com/es-es/shop/adaptador-multipuerto-usb-c-de-dell-7-en-1-da310/apd/470-aeup/conexi%C3%B3n-wifi-y-redes&#34;&gt;DA310z&lt;/a&gt; de Dell.&lt;/p&gt;&lt;h2 id=&#34;reparticionado-del-disco&#34;&gt;Reparticionado del disco&lt;a class=&#34;headerlink&#34; href=&#34;#reparticionado-del-disco&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;El disco SSD de la Steam Deck que adquirí es de 512GB y de tipo NVMe. Es el tamaño mínimo si queremos instalar otro sistema junto a SteamOS.&lt;/p&gt;&lt;p&gt;Antes de empezar con la instalación debemos hacer hueco para la misma encogiendo la partición principal (la número 8). Para ello podemos utilizar prácticamente cualquier distribución live Linux que arranquemos desde una unidad extraíble (USB o microSD) ya que todas ellas llevan algún programa para gestionar particiones. En mi caso utilicé una ISO del programa &lt;code&gt;gparted&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;El procedimiento completo puede verse a continuación:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Descargar la &lt;a href=&#34;https://gparted.org/download.php&#34;&gt;ISO de gparted&lt;/a&gt;. En concreto en mi caso utilicé &lt;a href=&#34;https://downloads.sourceforge.net/gparted/gparted-live-1.6.0-3-amd64.iso&#34;&gt;ésta versión&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Instalar la ISO en un pendrive o mejor aún en una microSD (ya que la Steam Deck posee una ranura para éstas). Puede utilizarse un programa como &lt;a href=&#34;https://www.balena.io/etcher/&#34;&gt;Balena Etcher&lt;/a&gt; o el comando &lt;code&gt;dd&lt;/code&gt; de Linux si se &lt;a href=&#34;sistemas/raspi.html#backup-de-la-sd-comprimiendo-al-vuelo&#34;&gt;sabe manejar&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Arrancar la Steam Deck con el pendrive o la microSD insertada manteniendo pulsado el botón de bajar el volumen hasta que se escuchen los tonos de encendido. Esto hace que la consola arranque en el menú &lt;code&gt;Boot Manager&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;Seleccionar la opción de arrancar desde el dispositivo extraíble que aparecerá en el menú como &lt;code&gt;EFI USB Device (USB)&lt;/code&gt; o &lt;code&gt;EFI SD/MMC Card (XX XXXX XXXX)&lt;/code&gt; según si utilizamos un pendrive o una microSD respectivamente.&lt;/li&gt;&lt;li&gt;&lt;p&gt;Aparece una pantalla de configuración en la que hacemos las siguientes selecciones:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Policy for handling keymaps =&amp;gt; Don&#39;t touch keymap&lt;/li&gt;&lt;li&gt;Which language do you prefer? =&amp;gt; 25&lt;/li&gt;&lt;li&gt;Which mode do you prefer? =&amp;gt; 0&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Tras aceptar la última opción anterior, arrancará el programa &lt;code&gt;gparted&lt;/code&gt; en modo gráfico (con la pantalla girada, eso sí). Haremos cambios hasta dejar las particiones como se ve en la foto. Básicamente lo que haremos será encoger la partición #8 unos 100GB, crear la #9 de 4GB para swap y la #10 con el espacio restante para el sistema raíz de Arch:&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Particiones de la Steam Deck&#34; src=&#34;images/posts/2024-09-04_steam_deck_arch/steam-deck-partitions.png&#34; /&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Destacar a la vista de las particiones que utiliza SteamOS que hace uso de un &lt;a href=&#34;https://blog.davidbyrne.dev/2018/08/16/linux-ab-partitions&#34;&gt;sistema de particiones A/B&lt;/a&gt;, habitual en Android, por el cual la mayoría de las particiones del sistema (excepto la de usuario) están duplicadas. Dicho sistema está pensado para facilitar las actualizaciones, o más bien para volver atrás en caso de problemas durante las mismas.&lt;/p&gt;&lt;h2 id=&#34;instalacion-base&#34;&gt;Instalación base&lt;a class=&#34;headerlink&#34; href=&#34;#instalacion-base&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Para el proceso de instalación del sistema base me decanté por el camino convencional siguiendo las instrucciones de la &lt;a href=&#34;https://wiki.archlinux.org/title/Installation_guide&#34;&gt;guía de instalación&lt;/a&gt; en el wiki de Arch. Dicha instalación utiliza una ISO de un sistema Arch que podremos arrancar desde una unidad extraíble (USB o microSD) con el que instalaremos los paquetes básicos para tener un sistema arrancable y muy básico.&lt;/p&gt;&lt;p&gt;Antes de comenzar, comentar que por las características tan dinámicas de la distribución Arch Linux, es muy posible que esta guía quede desactualizada en poco tiempo. Por lo que recomiendo consultar la &lt;a href=&#34;https://wiki.archlinux.org/title/Installation_guide&#34;&gt;guía oficial&lt;/a&gt; en caso de encontrar que algo no sale como se supone.&lt;/p&gt;&lt;p&gt;A continuación vemos paso a paso el proceso de instalación:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Descargar la &lt;a href=&#34;https://archlinux.org/download/&#34;&gt;ISO de Arch Linux&lt;/a&gt;. En concreto en mi caso utilicé &lt;a href=&#34;https://es.mirrors.cicku.me/archlinux/iso/2024.08.01/archlinux-2024.08.01-x86_64.iso&#34;&gt;ésta versión&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Instalar la ISO en un pendrive o mejor aún en una microSD para utilizar la ranura que posee la Steam Deck. Puede utilizarse un programa como &lt;a href=&#34;https://www.balena.io/etcher/&#34;&gt;Balena Etcher&lt;/a&gt; o el comando &lt;code&gt;dd&lt;/code&gt; de Linux si se &lt;a href=&#34;sistemas/raspi.html#backup-de-la-sd-comprimiendo-al-vuelo&#34;&gt;sabe manejar&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Arrancar la Steam Deck con el pendrive o la microSD insertada manteniendo pulsado el botón de bajar el volumen hasta que se escuchen los tonos de encendido. Esto hace que la consola arranque en el menú &lt;code&gt;Boot Manager&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;Seleccionar la opción de arrancar desde el dispositivo extraíble que aparecerá en el menú como &lt;code&gt;EFI USB Device (USB)&lt;/code&gt; o &lt;code&gt;EFI SD/MMC Card (XX XXXX XXXX)&lt;/code&gt; según si utilizamos un pendrive o una microSD respectivamente.&lt;/li&gt;&lt;li&gt;&lt;p&gt;Una vez que termine de arrancar el sistema live de instalación de Arch, ejecutar los siguiente comandos en orden (en la sesión con &lt;code&gt;iwctl&lt;/code&gt; sustituiremos &lt;code&gt;&amp;lt;SSID&amp;gt;&lt;/code&gt; por el nuestro e introduciremos la contraseña cuando se nos pida; también sustituiremos el identificador de usuario &lt;code&gt;&amp;lt;USER&amp;gt;&lt;/code&gt; por el que queramos utilizar):&lt;/p&gt;&lt;p&gt;```bash&lt;/p&gt;&lt;h1 id=&#34;loadkeys-es&#34;&gt;loadkeys es&lt;a class=&#34;headerlink&#34; href=&#34;#loadkeys-es&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;iwctl&#34;&gt;iwctl&lt;a class=&#34;headerlink&#34; href=&#34;#iwctl&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;[iwd]# station wlan0 scan[iwd]# station wlan0 get-networks[iwd]# station wlan0 connect &lt;SSID&gt;[iwd]# exit&lt;/p&gt;&lt;h1 id=&#34;mkfsext4-devnvme0n1p10&#34;&gt;mkfs.ext4 /dev/nvme0n1p10&lt;a class=&#34;headerlink&#34; href=&#34;#mkfsext4-devnvme0n1p10&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;mkswap-devnvme0n1p9&#34;&gt;mkswap /dev/nvme0n1p9&lt;a class=&#34;headerlink&#34; href=&#34;#mkswap-devnvme0n1p9&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;mount-devnvme0n1p10-mnt&#34;&gt;mount /dev/nvme0n1p10 /mnt&lt;a class=&#34;headerlink&#34; href=&#34;#mount-devnvme0n1p10-mnt&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;mount-mkdir-devnvme0n1p1-mntbootefi&#34;&gt;mount --mkdir /dev/nvme0n1p1 /mnt/boot/efi&lt;a class=&#34;headerlink&#34; href=&#34;#mount-mkdir-devnvme0n1p1-mntbootefi&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;swapon-devnvme0n1p9&#34;&gt;swapon /dev/nvme0n1p9&lt;a class=&#34;headerlink&#34; href=&#34;#swapon-devnvme0n1p9&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;pacstrap-k-mnt-base-base-devel-linux-linux-firmware-sudo-vi-ntfs-3g-networkmanager-amd-ucode-grub-efibootmgr-git-cmake-qt5-wayland&#34;&gt;pacstrap -K /mnt base base-devel linux linux-firmware sudo vi ntfs-3g networkmanager amd-ucode grub efibootmgr git cmake qt5-wayland&lt;a class=&#34;headerlink&#34; href=&#34;#pacstrap-k-mnt-base-base-devel-linux-linux-firmware-sudo-vi-ntfs-3g-networkmanager-amd-ucode-grub-efibootmgr-git-cmake-qt5-wayland&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;genfstab-u-mnt-mntetcfstab&#34;&gt;genfstab -U /mnt &amp;gt;&amp;gt; /mnt/etc/fstab&lt;a class=&#34;headerlink&#34; href=&#34;#genfstab-u-mnt-mntetcfstab&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;arch-chroot-mnt&#34;&gt;arch-chroot /mnt&lt;a class=&#34;headerlink&#34; href=&#34;#arch-chroot-mnt&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;ln-sf-usrsharezoneinfoeuropemadrid-etclocaltime&#34;&gt;ln -sf /usr/share/zoneinfo/Europe/Madrid /etc/localtime&lt;a class=&#34;headerlink&#34; href=&#34;#ln-sf-usrsharezoneinfoeuropemadrid-etclocaltime&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;hwclock-systohc&#34;&gt;hwclock --systohc&lt;a class=&#34;headerlink&#34; href=&#34;#hwclock-systohc&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;vi-etclocalegen-descomentar-en_usutf-8-utf-8-y-es_esutf-8-utf-8&#34;&gt;vi /etc/locale.gen # descomentar &#39;en_US.UTF-8 UTF-8&#39; y &#39;es_ES.UTF-8 UTF-8&#39;&lt;a class=&#34;headerlink&#34; href=&#34;#vi-etclocalegen-descomentar-en_usutf-8-utf-8-y-es_esutf-8-utf-8&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;locale-gen&#34;&gt;locale-gen&lt;a class=&#34;headerlink&#34; href=&#34;#locale-gen&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;echo-langes_esutf-8-etclocaleconf&#34;&gt;echo &#34;LANG=es_ES.UTF-8&#34; &amp;gt; /etc/locale.conf&lt;a class=&#34;headerlink&#34; href=&#34;#echo-langes_esutf-8-etclocaleconf&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;echo-keymapes-etcvconsoleconf&#34;&gt;echo &#34;KEYMAP=es&#34; &amp;gt; /etc/vconsole.conf&lt;a class=&#34;headerlink&#34; href=&#34;#echo-keymapes-etcvconsoleconf&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;echo-deck-etchostname&#34;&gt;echo &#34;deck&#34; &amp;gt; /etc/hostname&lt;a class=&#34;headerlink&#34; href=&#34;#echo-deck-etchostname&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;echo-e-n127001-localhostn1-localhostn127011-deck-etchosts&#34;&gt;echo -e &#34;\n127.0.0.1 localhost\n::1 localhost\n127.0.1.1 deck&#34; &amp;gt;&amp;gt; /etc/hosts&lt;a class=&#34;headerlink&#34; href=&#34;#echo-e-n127001-localhostn1-localhostn127011-deck-etchosts&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;passwd&#34;&gt;passwd&lt;a class=&#34;headerlink&#34; href=&#34;#passwd&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;grub-install-targetx86_64-efi-efi-directorybootefi-bootloader-idarch&#34;&gt;grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=Arch&lt;a class=&#34;headerlink&#34; href=&#34;#grub-install-targetx86_64-efi-efi-directorybootefi-bootloader-idarch&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;grub-mkconfig-o-bootgrubgrubcfg&#34;&gt;grub-mkconfig -o /boot/grub/grub.cfg&lt;a class=&#34;headerlink&#34; href=&#34;#grub-mkconfig-o-bootgrubgrubcfg&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;systemctl-enable-networkmanager&#34;&gt;systemctl enable NetworkManager&lt;a class=&#34;headerlink&#34; href=&#34;#systemctl-enable-networkmanager&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;useradd-m-g-wheelaudiovideostorage&#34;&gt;useradd -m -G wheel,audio,video,storage &lt;USER&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#useradd-m-g-wheelaudiovideostorage&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;passwd_1&#34;&gt;passwd &lt;USER&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#passwd_1&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;chmod-uw-etcsudoers&#34;&gt;chmod u+w /etc/sudoers&lt;a class=&#34;headerlink&#34; href=&#34;#chmod-uw-etcsudoers&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;vi-etcsudoers-descomentar-wheel-allall-all&#34;&gt;vi /etc/sudoers # Descomentar &#39;%wheel ALL=(ALL) ALL&#39;&lt;a class=&#34;headerlink&#34; href=&#34;#vi-etcsudoers-descomentar-wheel-allall-all&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;chmod-u-w-etcsudoers&#34;&gt;chmod u-w /etc/sudoers&lt;a class=&#34;headerlink&#34; href=&#34;#chmod-u-w-etcsudoers&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;pacman-syy&#34;&gt;pacman -Syy&lt;a class=&#34;headerlink&#34; href=&#34;#pacman-syy&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;pacman-s-xorg-server-xf86-video-amdgpu-maliit-keyboard-qt5-wayland&#34;&gt;pacman -S xorg-server xf86-video-amdgpu maliit-keyboard qt5-wayland&lt;a class=&#34;headerlink&#34; href=&#34;#pacman-s-xorg-server-xf86-video-amdgpu-maliit-keyboard-qt5-wayland&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;su-&#34;&gt;su - &lt;USER&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#su-&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;```&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;El password que elegiremos cuando ejecutemos el comando &lt;code&gt;passwd &amp;lt;USER&amp;gt;&lt;/code&gt; debe ser numérico si queremos utilizar Plasma Mobile, ya que la pantalla de desbloqueo sólo nos permite introducir un PIN.&lt;/p&gt;&lt;h2 id=&#34;instalacion-entorno-grafico&#34;&gt;Instalación entorno gráfico&lt;a class=&#34;headerlink&#34; href=&#34;#instalacion-entorno-grafico&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Continuamos donde nos habíamos quedado, es decir en la sesión chroot desde el sistema live de instalación de Arch Linux. Lo haremos ya con el usuario normal (no root) por lo que a partir de ahora haremos uso con frecuencia de &lt;code&gt;sudo&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;Ahora vamos a instalar los entornos gráficos. Lo digo en plural porque vamos a instalar dos, Plasma y Plasma Mobile. Hago esto porque dependiendo de si vamos a utilizar la Steam Deck con Arch en modo escritorio (con teclado/ratón y posiblemente pantalla) o portátil (sin teclado/ratón), nos convendrá más un sistema u otro, dado que Plasma Mobile presenta un interfaz diseñado para ser manejado con una pantalla táctil (estilo tablet).&lt;/p&gt;&lt;p&gt;En realidad no es necesario instalar los dos escritorios, por eso se han separado sus pasos de instalación. Podemos instalar uno, el otro o ambos.&lt;/p&gt;&lt;h4 id=&#34;plasma&#34;&gt;Plasma&lt;a class=&#34;headerlink&#34; href=&#34;#plasma&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;code&gt;bash$ sudo pacman -S plasma-meta&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Durante la instalación del paquete anterior se nos harán una serie de preguntas. A la tercera pregunta responder &lt;code&gt;2) noto-fonts&lt;/code&gt;. En el resto ofrecer la respuesta predeterminada (pulsando retorno).&lt;/p&gt;&lt;h4 id=&#34;plasma-mobile&#34;&gt;Plasma Mobile&lt;a class=&#34;headerlink&#34; href=&#34;#plasma-mobile&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Plasma Mobile no se encuentra todavía en los repositorios oficiales. Tenemos que utilizar &lt;a href=&#34;https://aur.archlinux.org/&#34;&gt;AUR&lt;/a&gt;:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Empezamos instalando algunas dependencias:&lt;/p&gt;&lt;p&gt;&lt;code&gt;bash$ sudo pacman -S plasma-workspace kcontacts kirigami2 kpeople libphonenumber&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Instalamos los paquetes de AUR &lt;code&gt;plasma-nano&lt;/code&gt;, &lt;code&gt;plasma-settings&lt;/code&gt; y &lt;code&gt;plasma-mobile&lt;/code&gt; en este orden:&lt;/p&gt;&lt;p&gt;&lt;code&gt;bash$ cd ~$ git clone https://aur.archlinux.org/plasma-nano.git$ cd plasma-nano$ makepkg -si$ cd ~$ git clone https://aur.archlinux.org/plasma-settings.git$ cd plasma-settings$ makepkg -si$ cd ~$ git clone https://aur.archlinux.org/plasma-mobile.git$ cd plasma-mobile$ makepkg -si&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h4 id=&#34;fin-de-instalacion-entorno-grafico&#34;&gt;Fin de instalación entorno gráfico&lt;a class=&#34;headerlink&#34; href=&#34;#fin-de-instalacion-entorno-grafico&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Instalamos el gestor de sesiones SDDM y algunas aplicaciones que nos harán falta para terminar la instalación desde el modo gráfico:&lt;/p&gt;&lt;p&gt;&lt;code&gt;bash$ sudo pacman -S sddm konsole dolphin kwrite partitionmanager power-profiles-daemon$ sudo systemctl enable sddm$ exit&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Cerramos la sesión chroot, desmontamos las particiones y reiniciamos el sistema:&lt;/p&gt;&lt;p&gt;```bash&lt;/p&gt;&lt;h1 id=&#34;exit&#34;&gt;exit&lt;a class=&#34;headerlink&#34; href=&#34;#exit&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;umount-r-mnt&#34;&gt;umount -R /mnt&lt;a class=&#34;headerlink&#34; href=&#34;#umount-r-mnt&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;reboot&#34;&gt;reboot&lt;a class=&#34;headerlink&#34; href=&#34;#reboot&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;```&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 id=&#34;configuracion-basica&#34;&gt;Configuración básica&lt;a class=&#34;headerlink&#34; href=&#34;#configuracion-basica&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Tras reiniciar deberíamos ver el gestor de sesiones SDDM, inicialmente con la pantalla girada y sin posibilidad de utilizar el teclado en pantalla, por lo que todavía continuaremos utilizando el teclado y ratón externos.&lt;/p&gt;&lt;p&gt;Una vez que hayamos iniciado sesión en Plasma o Plasma Mobile, lo primero que tenemos que hacer es configurar la conexión a internet. Para ello hacemos click sobre el icono correspondiente en la bandeja del sistema abajo a la derecha en Plasma o arriba a la derecha en Plasma Mobile.&lt;/p&gt;&lt;p&gt;Una vez que tengamos conexión, abrimos la aplicación Konsole y ejecutamos los siguientes comandos para instalar el paquete de aplicaciones básico de KDE, el navegador Firefox y el servidor SSH:&lt;/p&gt;&lt;p&gt;&lt;code&gt;bash$ sudo pacman -S firefox kde-applications-meta openssh usbutils lshw man-db htop spectacle$ sudo systemctl start sshd$ sudo systemctl enable sshd&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Finalmente hacemos las siguientes configuraciones:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;Preferencias &amp;gt; Preferencias del sistema &amp;gt; Entrada y salida &amp;gt; Pantalla y monitor &amp;gt; Escalar&lt;/code&gt;: Configurar la escala de la pantalla a 110%.&lt;/li&gt;&lt;li&gt;&lt;code&gt;Preferencias &amp;gt; Preferencias del sistema &amp;gt; Entrada y salida &amp;gt; Teclado &amp;gt; Distribuciones &amp;gt; Configurar distribuciones &amp;gt; Añadir&lt;/code&gt;: Añadir la distribución de teclado español.&lt;/li&gt;&lt;li&gt;&lt;code&gt;Preferencias &amp;gt; Preferencias del sistema &amp;gt; Entrada y salida &amp;gt; Teclado &amp;gt; Teclado virtual&lt;/code&gt;: Seleccionar &lt;code&gt;Maliit&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;&lt;code&gt;Preferencias &amp;gt; Preferencias del sistema &amp;gt; Idioma y hora &amp;gt; Fecha y hora &amp;gt; Zona horaria&lt;/code&gt;: Seleccionar Madrid.&lt;/li&gt;&lt;li&gt;&lt;code&gt;Preferencias &amp;gt; Preferencias del sistema &amp;gt; Aspecto y estilo &amp;gt; Texto y tipos de letra &amp;gt; Tipos de letra&lt;/code&gt;. Ajustar estos valores:&lt;ul&gt;&lt;li&gt;&lt;code&gt;General&lt;/code&gt;: &lt;code&gt;Noto Sans 11pt&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;Anchura fija&lt;/code&gt;: &lt;code&gt;Hack 10pt&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;Pequeña&lt;/code&gt;: &lt;code&gt;Noto Sans 9pt&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;Barra de herramientas&lt;/code&gt;: &lt;code&gt;Noto Sans 11pt&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;Menú&lt;/code&gt;: &lt;code&gt;Noto Sans 11pt&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;Título de la ventana&lt;/code&gt;: &lt;code&gt;Noto Sans 10pt&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Botón derecho (L2) sobre la barra de tareas y seleccionar &lt;code&gt;Mostrar configuración del panel&lt;/code&gt;. En &lt;code&gt;Preferencias del panel &amp;gt; Altura del panel&lt;/code&gt; subir la altura a 54px.&lt;/li&gt;&lt;li&gt;Botón derecho (L2) sobre el icono que sirve para mostrar los iconos ocultos en la bandeja del sistema y seleccionar &lt;code&gt;Configurar Bandeja del sistema&lt;/code&gt;. En &lt;code&gt;General&lt;/code&gt; seleccionar estos valores:&lt;ul&gt;&lt;li&gt;&lt;code&gt;Tamaño de los iconos del panel&lt;/code&gt;: &lt;code&gt;Escalar a la altura del panel&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;Espacio entre los iconos del panel&lt;/code&gt;: &lt;code&gt;Normal&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Botón derecho (L2) sobre el icono que sirve para mostrar los iconos ocultos en la bandeja del sistema y seleccionar &lt;code&gt;Mostrar configuración del panel&lt;/code&gt;. Veremos un minireloj que antes no se veía sobre el que pulsaremos con el botón derecho (L2). Seleccionamos &lt;code&gt;Mostrar alternativas&lt;/code&gt; y de los elementos gráficos alternativos que aparecen escogemos &lt;code&gt;Reloj digital&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;h2 id=&#34;configuracion-de-sddm&#34;&gt;Configuración de SDDM&lt;a class=&#34;headerlink&#34; href=&#34;#configuracion-de-sddm&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Finalmente vamos a mejorar la configuración del gestor de sesiones SDDM para que permita el teclado en pantalla, tenga mejor aspecto y muestre la pantalla en la orientación correcta:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Crear fichero &lt;code&gt;/etc/sddm.conf.d/10-wayland.conf&lt;/code&gt; con el siguiente contenido:&lt;/p&gt;&lt;p&gt;```ini[General]DisplayServer=waylandGreeterEnvironment=QT_WAYLAND_SHELL_INTEGRATION=layer-shell&lt;/p&gt;&lt;p&gt;[Wayland]CompositorCommand=kwin_wayland --drm --no-lockscreen --no-global-shortcuts --locale1 --inputmethod maliit-keyboard```&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Abrir &lt;code&gt;Preferencias &amp;gt; Pantalla de inicio de sesión (SDDM)&lt;/code&gt;, seleccionar Brisa como theme y pulsar el botón &lt;code&gt;Aplicar las preferencias de Plasma...&lt;/code&gt; arriba a la derecha.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 id=&#34;configuracion-sonido&#34;&gt;Configuración sonido&lt;a class=&#34;headerlink&#34; href=&#34;#configuracion-sonido&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Tal y como &lt;a href=&#34;https://wiki.archlinux.org/title/Steam_Deck#Audio&#34;&gt;comenta el wiki de Arch&lt;/a&gt;, el volumen por defecto en la Steam Deck es muy bajo. Para solucionarlo hay que instalar el paquete &lt;code&gt;alsa-utils&lt;/code&gt; y ejecutar el comando &lt;code&gt;alsamixer&lt;/code&gt; para ajustar el volumen de algunos de los canales.&lt;/p&gt;&lt;p&gt;&lt;code&gt;bash$ sudo pacman -S alsa-utils$ alsamixer&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Para acceder a los mismos, una vez en &lt;code&gt;alsamixer&lt;/code&gt;, hay que pulsar &lt;code&gt;F6&lt;/code&gt; para poder seleccionar el dispositivo de audio &lt;code&gt;acp5x&lt;/code&gt; ya que por defecto aparecen seleccionado el dispositivo 0 que es el asociado a la salida HDMI del chip gráfico:&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;alsamixer&#34; src=&#34;images/posts/2024-09-04_steam_deck_arch/alsamixer-select-device.png&#34; /&gt;&lt;/p&gt;&lt;p&gt;Una vez seleccionado el dispositivo correcto, veremos todos sus canales que son muy numerosos. Localizaremos los que &lt;a href=&#34;https://wiki.archlinux.org/title/Steam_Deck#Audio&#34;&gt;menciona el wiki&lt;/a&gt; para ajustarlos a los siguientes valores:&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&#34;text-align: left;&#34;&gt;Canal&lt;/th&gt;&lt;th style=&#34;text-align: right;&#34;&gt;Valor&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&#34;text-align: left;&#34;&gt;Analog PCM&lt;/td&gt;&lt;td style=&#34;text-align: right;&#34;&gt;85%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&#34;text-align: left;&#34;&gt;Digital&lt;/td&gt;&lt;td style=&#34;text-align: right;&#34;&gt;86%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&#34;text-align: left;&#34;&gt;Digital PCM&lt;/td&gt;&lt;td style=&#34;text-align: right;&#34;&gt;85%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&#34;text-align: left;&#34;&gt;Left Analog PCM&lt;/td&gt;&lt;td style=&#34;text-align: right;&#34;&gt;85%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&#34;text-align: left;&#34;&gt;Left Digital PCM&lt;/td&gt;&lt;td style=&#34;text-align: right;&#34;&gt;85%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&#34;text-align: left;&#34;&gt;Right Analog PCM&lt;/td&gt;&lt;td style=&#34;text-align: right;&#34;&gt;85%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&#34;text-align: left;&#34;&gt;Right Digital PCM&lt;/td&gt;&lt;td style=&#34;text-align: right;&#34;&gt;85%&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h2 id=&#34;instalacion-pamac&#34;&gt;Instalación pamac&lt;a class=&#34;headerlink&#34; href=&#34;#instalacion-pamac&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Para facilitar la instalación de paquetes desde la interfaz gráfica, vamos a instalar &lt;code&gt;pamac&lt;/code&gt;:&lt;/p&gt;&lt;p&gt;&lt;code&gt;bash$ yay -S pamac-aur&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Una vez instalado lo abrimos (buscando &lt;code&gt;Añadir/Quitar software&lt;/code&gt; en el cajón de aplicaciones) y activamos el soporte AUR en &lt;code&gt;Preferencias &amp;gt; Terceros &amp;gt; Activar soporte de AUR&lt;/code&gt;.&lt;/p&gt;&lt;h2 id=&#34;instalacion-gestor-dualboot&#34;&gt;Instalación gestor dualboot&lt;a class=&#34;headerlink&#34; href=&#34;#instalacion-gestor-dualboot&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;El sistema Arch ya está listo y podemos arrancarlo encendiendo la consola en modo Boot Manager (manteniendo pulsada la tecla de bajar volumen) y seleccionando la opción &lt;code&gt;Arch&lt;/code&gt;. Pero para facilitar el arranque de SteamOS, vamos a instalar un gestor de arranque dualboot llamado &lt;a href=&#34;https://github.com/jlobue10/SteamDeck_rEFInd&#34;&gt;rEFInd&lt;/a&gt;.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Arrancar SteamOS (con Volume- + Power).&lt;/li&gt;&lt;li&gt;&lt;p&gt;Desde una terminal en modo escritorio ejecutar:&lt;/p&gt;&lt;p&gt;&lt;code&gt;bashcd $HOME &amp;amp;&amp;amp; rm -rf $HOME/SteamDeck_rEFInd/ &amp;amp;&amp;amp; git clone https://github.com/jlobue10/SteamDeck_rEFInd &amp;amp;&amp;amp; cd SteamDeck_rEFInd &amp;amp;&amp;amp; chmod +x install-GUI.sh &amp;amp;&amp;amp; ./install-GUI.sh&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Descargar o crear un icono de Arch Linux de 128x128px.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;Abrir el lanzador del escritorio que encontraremos en el escritorio.&lt;/li&gt;&lt;li&gt;&lt;p&gt;Configurar de la siguiente forma (seleccionar en el campo &lt;code&gt;Boot Option #2 Icon&lt;/code&gt; el icono descargado o creado anteriormente):&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Configuración de rEFInd&#34; src=&#34;images/posts/2024-09-04_steam_deck_arch/rEFInd_conf.png&#34; /&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Pulsar botón &lt;code&gt;Create Config&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Editar el fichero que encontraremos en &lt;code&gt;~/.local/SteamDeck_rEFInd/GUI/refind.conf&lt;/code&gt; y modificar la última entrada de la siguiente forma:&lt;/p&gt;&lt;p&gt;&lt;code&gt;confmenuentry &#34;Arch&#34; { icon /EFI/refind/os_icon2.png loader /EFI/Arch/grubx64.efi graphics on}&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Pulsar el botón &lt;code&gt;Install rEFInd&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;Pulsar el botón &lt;code&gt;Install Config&lt;/code&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;La ruta &lt;code&gt;/EFI/Arch/grubx64.efi&lt;/code&gt; del paso 6 puede cambiar si en el comando &lt;code&gt;grub-install&lt;/code&gt; ejecutado durante la &lt;a href=&#34;#instalacion-base&#34;&gt;instalación del sistema base&lt;/a&gt; se eligió otro identificador que no fuera &lt;code&gt;Arch&lt;/code&gt;. En ese caso habría que adaptar la ruta.&lt;/p&gt;&lt;h2 id=&#34;conclusion&#34;&gt;Conclusión&lt;a class=&#34;headerlink&#34; href=&#34;#conclusion&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Y esto sería todo. Ahora tenemos un sistema Arch Linux en nuestra Steam Deck con un gestor de arranque dualboot que nos permite arrancar también SteamOS. A partir de aquí tendremos una máquina con una naturaleza doble, una (SteamOS) para jugar y otra (Arch) para ser utilizada como un PC (Plasma) o tabletPC (Plasma Mobile).&lt;/p&gt;&lt;p&gt;Para elegir el entorno gráfico Plasma normal o el Plasma Mobile, utilizaremos el menú desplegable que aparece abajo a la izquierda en el gestor de inicios de sesión SDDM.&lt;/p&gt;&lt;iframe width=&#34;688&#34; height=&#34;387&#34; src=&#34;https://www.youtube.com/embed/hColcI3rv38&#34; title=&#34;Arch Linux en Steam Deck&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; allowfullscreen&gt;&lt;/iframe&gt;&lt;p&gt;Algunos enlaces de interés consultados durante la elaboración de esta guía:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;https://www.freecodecamp.org/news/how-to-install-arch-linux/&#34;&gt;The Arch Linux Handbook – Learn Arch Linux for Beginners&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&#34;https://asgardius.company/?p=1783&#34;&gt;Instalando Arch Linux con KDE en Steam Deck&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&#34;https://wiki.archlinux.org/title/Steam_Deck&#34;&gt;Steam Deck - ArchWiki&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</description><link>https://apuntes.eduardofilo.es/2024-09-04_steam_deck_arch.html</link> <pubDate>Wed, 04 Sep 2024 15:30:00 +0200</pubDate><source url="https://apuntes.eduardofilo.es/rss.xml">Apuntes de eduardófilo</source><guid isPermaLink="true">https://apuntes.eduardofilo.es/2024-09-04_steam_deck_arch.html</guid> <enclosure url="https://apuntes.eduardofilo.es/images/posts/2024-09-04_steam_deck_arch/steam_deck_logo.png" type="image/png" length="55688" /> </item> <item> <title>Installing Arch Linux on Steam Deck</title> <description>&lt;p&gt;&lt;img alt=&#34;Steam Deck with Arch Linux&#34; src=&#34;../images/posts/2024-09-04_steam_deck_arch/steam_deck_logo.png&#34; /&gt;&lt;/p&gt;&lt;div class=&#34;admonition info&#34;&gt;&lt;p class=&#34;admonition-title&#34;&gt;Loss of dual boot after updating SteamOS&lt;/p&gt;&lt;p&gt;In the update of SteamOS to the 3.6 branch (specifically, the first stable version of that branch was 3.6.19), the dual-boot configuration was lost, so the machine would only boot into SteamOS. The solution was to follow the steps in &lt;a href=&#34;#dual-boot-manager-installation&#34;&gt;Dual Boot manager installation&lt;/a&gt; starting from step 4.&lt;/p&gt;&lt;/div&gt;&lt;p&gt;In July 2024, the 512GB LCD model of the Steam Deck was available for under €400 for a few weeks. This price was very appealing for a &lt;a href=&#34;https://www.steamdeck.com/es/tech/deck&#34;&gt;decent machine&lt;/a&gt; with an AMD processor based on x86 (AMD64) architecture, 16GB of RAM, an NVMe SSD of the mentioned capacity, a touchscreen, and integrated gaming controls. Essentially, it&#39;s a handheld PC, but still a PC. What makes this machine especially attractive to me is its full Linux support, making it an ideal platform for tinkering with Linux distributions or using it as a secondary portable PC. Of course, this is in addition to its conventional use for gaming and &lt;a href=&#34;https://www.emudeck.com/&#34;&gt;emulating&lt;/a&gt; video games.&lt;/p&gt;&lt;p&gt;SteamOS, the default operating system, is based on Arch Linux, and in desktop mode, it can be used almost like a regular Arch Linux system. The main restriction is that it&#39;s built in immutable mode. While this type of system configuration has its virtues and it&#39;s understandable why Valve chose it for their machine, I still prefer a normal (mutable) system. So, I decided to install a regular Arch Linux and learn how to install this distribution. According to the &lt;a href=&#34;https://wiki.archlinux.org/title/Steam_Deck&#34;&gt;Arch wiki&lt;/a&gt;, the hardware of the Steam Deck LCD model is 100% supported by Arch.&lt;/p&gt;&lt;p&gt;The following is the complete procedure I used.&lt;/p&gt;&lt;h2 id=&#34;keyboardmouse&#34;&gt;Keyboard/Mouse&lt;a class=&#34;headerlink&#34; href=&#34;#keyboardmouse&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Although most operations can be performed using the Steam Deck&#39;s touchscreen and trackpads, it&#39;s highly recommended to connect a keyboard and mouse to the console to facilitate the installation, especially during the terminal session where we&#39;ll install the base system. The Steam Deck only has one USB-C port, so the most practical solution is to use a dock. It may also suffice (especially if we run live systems from a microSD) to use a wireless keyboard/mouse dongle connected with a USB&amp;lt;-&amp;gt;USB-C adapter, though in that case, it&#39;s advisable to ensure the Steam Deck is fully charged.&lt;/p&gt;&lt;p&gt;In my case, I used a Dell &lt;a href=&#34;https://www.dell.com/es-es/shop/adaptador-multipuerto-usb-c-de-dell-7-en-1-da310/apd/470-aeup/conexi%C3%B3n-wifi-y-redes&#34;&gt;DA310z&lt;/a&gt; dock.&lt;/p&gt;&lt;h2 id=&#34;disk-repartitioning&#34;&gt;Disk repartitioning&lt;a class=&#34;headerlink&#34; href=&#34;#disk-repartitioning&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The Steam Deck&#39;s SSD I purchased is 512GB and of the NVMe type. This is the minimum size if we want to install another system alongside SteamOS.&lt;/p&gt;&lt;p&gt;Before starting the installation, we need to make space by shrinking the main partition (number 8). For this, we can use almost any live Linux distribution that we boot from a removable drive (USB or microSD) since all of them come with some partition management program. I used a &lt;code&gt;gparted&lt;/code&gt; ISO.&lt;/p&gt;&lt;p&gt;The complete procedure can be seen below:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Download the &lt;a href=&#34;https://gparted.org/download.php&#34;&gt;gparted ISO&lt;/a&gt;. Specifically, I used &lt;a href=&#34;https://downloads.sourceforge.net/gparted/gparted-live-1.6.0-3-amd64.iso&#34;&gt;this version&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Install the ISO on a USB drive or, even better, on a microSD (since the Steam Deck has a slot for these). You can use a program like &lt;a href=&#34;https://www.balena.io/etcher/&#34;&gt;Balena Etcher&lt;/a&gt; or the &lt;code&gt;dd&lt;/code&gt; command in Linux if you &lt;a href=&#34;sistemas/raspi.html#backup-de-la-sd-comprimiendo-al-vuelo&#34;&gt;know how to use it&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Boot the Steam Deck with the USB drive or microSD inserted by holding down the volume- button until you hear the power-up tones. This causes the console to boot into the &lt;code&gt;Boot Manager&lt;/code&gt; menu.&lt;/li&gt;&lt;li&gt;Select the option to boot from the removable device, which will appear in the menu as &lt;code&gt;EFI USB Device (USB)&lt;/code&gt; or &lt;code&gt;EFI SD/MMC Card (XX XXXX XXXX)&lt;/code&gt; depending on whether you used a USB drive or a microSD respectively.&lt;/li&gt;&lt;li&gt;&lt;p&gt;A configuration screen appears where we make the following selections:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Policy for handling keymaps =&amp;gt; Don&#39;t touch keymap&lt;/li&gt;&lt;li&gt;Which language do you prefer? =&amp;gt; 25&lt;/li&gt;&lt;li&gt;Which mode do you prefer? =&amp;gt; 0&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;After accepting the last option, the &lt;code&gt;gparted&lt;/code&gt; program will start in graphical mode (with the screen rotated, though). We will make changes until the partitions look like the screenshot. Essentially, we&#39;ll shrink partition #8 by about 100GB, create #9 with 4GB for swap, and #10 with the remaining space for the Arch root system:&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Steam Deck Partitions&#34; src=&#34;../images/posts/2024-09-04_steam_deck_arch/steam-deck-partitions.png&#34; /&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Note, when looking at the partitions used by SteamOS, that it uses an &lt;a href=&#34;https://blog.davidbyrne.dev/2018/08/16/linux-ab-partitions&#34;&gt;A/B partition system&lt;/a&gt;, common in Android, where most of the system partitions (except the user space one) are duplicated. This system is designed to facilitate updates, or rather to roll back in case of problems during them.&lt;/p&gt;&lt;h2 id=&#34;base-installation&#34;&gt;Base installation&lt;a class=&#34;headerlink&#34; href=&#34;#base-installation&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;For the base system installation, I opted for the conventional method following the instructions in the &lt;a href=&#34;https://wiki.archlinux.org/title/Installation_guide&#34;&gt;installation guide&lt;/a&gt; on the Arch wiki. This installation uses an Arch system ISO that we can boot from a removable drive (USB or microSD) to install the basic packages needed for a bootable and very basic system.&lt;/p&gt;&lt;p&gt;Before starting, note that due to the dynamic nature of the Arch Linux distribution, it&#39;s very likely that this guide will become outdated soon. Therefore, I recommend checking the &lt;a href=&#34;https://wiki.archlinux.org/title/Installation_guide&#34;&gt;official guide&lt;/a&gt; if something doesn&#39;t go as expected.&lt;/p&gt;&lt;p&gt;Below is the step-by-step installation process:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Download the &lt;a href=&#34;https://archlinux.org/download/&#34;&gt;Arch Linux ISO&lt;/a&gt;. Specifically, I used &lt;a href=&#34;https://es.mirrors.cicku.me/archlinux/iso/2024.08.01/archlinux-2024.08.01-x86_64.iso&#34;&gt;this version&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Install the ISO on a USB drive or, even better, on a microSD to use the slot on the Steam Deck. You can use a program like &lt;a href=&#34;https://www.balena.io/etcher/&#34;&gt;Balena Etcher&lt;/a&gt; or the &lt;code&gt;dd&lt;/code&gt; command in Linux if you &lt;a href=&#34;sistemas/raspi.html#backup-de-la-sd-comprimiendo-al-vuelo&#34;&gt;know how to use it&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Boot the Steam Deck with the USB drive or microSD inserted by holding down the volume- button until you hear the power-up tones. This causes the console to boot into the &lt;code&gt;Boot Manager&lt;/code&gt; menu.&lt;/li&gt;&lt;li&gt;Select the option to boot from the removable device, which will appear in the menu as &lt;code&gt;EFI USB Device (USB)&lt;/code&gt; or &lt;code&gt;EFI SD/MMC Card (XX XXXX XXXX)&lt;/code&gt; depending on whether you used a USB drive or a microSD respectively.&lt;/li&gt;&lt;li&gt;&lt;p&gt;Once the Arch live installation system finishes booting, run the following commands in order (in the &lt;code&gt;iwctl&lt;/code&gt; session, replace &lt;code&gt;&amp;lt;SSID&amp;gt;&lt;/code&gt; with your own and enter the password when prompted; also replace the user identifier &lt;code&gt;&amp;lt;USER&amp;gt;&lt;/code&gt; with the one you want to use):&lt;/p&gt;&lt;p&gt;```bash&lt;/p&gt;&lt;h1 id=&#34;loadkeys-en&#34;&gt;loadkeys en&lt;a class=&#34;headerlink&#34; href=&#34;#loadkeys-en&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;iwctl&#34;&gt;iwctl&lt;a class=&#34;headerlink&#34; href=&#34;#iwctl&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;[iwd]# station wlan0 scan[iwd]# station wlan0 get-networks[iwd]# station wlan0 connect &lt;SSID&gt;[iwd]# exit&lt;/p&gt;&lt;h1 id=&#34;mkfsext4-devnvme0n1p10&#34;&gt;mkfs.ext4 /dev/nvme0n1p10&lt;a class=&#34;headerlink&#34; href=&#34;#mkfsext4-devnvme0n1p10&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;mkswap-devnvme0n1p9&#34;&gt;mkswap /dev/nvme0n1p9&lt;a class=&#34;headerlink&#34; href=&#34;#mkswap-devnvme0n1p9&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;mount-devnvme0n1p10-mnt&#34;&gt;mount /dev/nvme0n1p10 /mnt&lt;a class=&#34;headerlink&#34; href=&#34;#mount-devnvme0n1p10-mnt&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;mount-mkdir-devnvme0n1p1-mntbootefi&#34;&gt;mount --mkdir /dev/nvme0n1p1 /mnt/boot/efi&lt;a class=&#34;headerlink&#34; href=&#34;#mount-mkdir-devnvme0n1p1-mntbootefi&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;swapon-devnvme0n1p9&#34;&gt;swapon /dev/nvme0n1p9&lt;a class=&#34;headerlink&#34; href=&#34;#swapon-devnvme0n1p9&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;pacstrap-k-mnt-base-base-devel-linux-linux-firmware-sudo-vi-ntfs-3g-networkmanager-amd-ucode-grub-efibootmgr-git-cmake-qt5-wayland&#34;&gt;pacstrap -K /mnt base base-devel linux linux-firmware sudo vi ntfs-3g networkmanager amd-ucode grub efibootmgr git cmake qt5-wayland&lt;a class=&#34;headerlink&#34; href=&#34;#pacstrap-k-mnt-base-base-devel-linux-linux-firmware-sudo-vi-ntfs-3g-networkmanager-amd-ucode-grub-efibootmgr-git-cmake-qt5-wayland&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;genfstab-u-mnt-mntetcfstab&#34;&gt;genfstab -U /mnt &amp;gt;&amp;gt; /mnt/etc/fstab&lt;a class=&#34;headerlink&#34; href=&#34;#genfstab-u-mnt-mntetcfstab&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;arch-chroot-mnt&#34;&gt;arch-chroot /mnt&lt;a class=&#34;headerlink&#34; href=&#34;#arch-chroot-mnt&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;ln-sf-usrsharezoneinfoeuropemadrid-etclocaltime&#34;&gt;ln -sf /usr/share/zoneinfo/Europe/Madrid /etc/localtime&lt;a class=&#34;headerlink&#34; href=&#34;#ln-sf-usrsharezoneinfoeuropemadrid-etclocaltime&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;hwclock-systohc&#34;&gt;hwclock --systohc&lt;a class=&#34;headerlink&#34; href=&#34;#hwclock-systohc&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;vi-etclocalegen-uncomment-en_usutf-8-utf-8&#34;&gt;vi /etc/locale.gen # uncomment &#39;en_US.UTF-8 UTF-8&#39;&lt;a class=&#34;headerlink&#34; href=&#34;#vi-etclocalegen-uncomment-en_usutf-8-utf-8&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;locale-gen&#34;&gt;locale-gen&lt;a class=&#34;headerlink&#34; href=&#34;#locale-gen&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;echo-langen_usutf-8-etclocaleconf&#34;&gt;echo &#34;LANG=en_US.UTF-8&#34; &amp;gt; /etc/locale.conf&lt;a class=&#34;headerlink&#34; href=&#34;#echo-langen_usutf-8-etclocaleconf&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;echo-keymapen-etcvconsoleconf&#34;&gt;echo &#34;KEYMAP=en&#34; &amp;gt; /etc/vconsole.conf&lt;a class=&#34;headerlink&#34; href=&#34;#echo-keymapen-etcvconsoleconf&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;echo-deck-etchostname&#34;&gt;echo &#34;deck&#34; &amp;gt; /etc/hostname&lt;a class=&#34;headerlink&#34; href=&#34;#echo-deck-etchostname&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;echo-e-n127001-localhostn1-localhostn127011-deck-etchosts&#34;&gt;echo -e &#34;\n127.0.0.1 localhost\n::1 localhost\n127.0.1.1 deck&#34; &amp;gt;&amp;gt; /etc/hosts&lt;a class=&#34;headerlink&#34; href=&#34;#echo-e-n127001-localhostn1-localhostn127011-deck-etchosts&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;passwd&#34;&gt;passwd&lt;a class=&#34;headerlink&#34; href=&#34;#passwd&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;grub-install-targetx86_64-efi-efi-directorybootefi-bootloader-idarch&#34;&gt;grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=Arch&lt;a class=&#34;headerlink&#34; href=&#34;#grub-install-targetx86_64-efi-efi-directorybootefi-bootloader-idarch&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;grub-mkconfig-o-bootgrubgrubcfg&#34;&gt;grub-mkconfig -o /boot/grub/grub.cfg&lt;a class=&#34;headerlink&#34; href=&#34;#grub-mkconfig-o-bootgrubgrubcfg&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;systemctl-enable-networkmanager&#34;&gt;systemctl enable NetworkManager&lt;a class=&#34;headerlink&#34; href=&#34;#systemctl-enable-networkmanager&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;useradd-m-g-wheelaudiovideostorage&#34;&gt;useradd -m -G wheel,audio,video,storage &lt;USER&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#useradd-m-g-wheelaudiovideostorage&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;passwd_1&#34;&gt;passwd &lt;USER&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#passwd_1&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;chmod-uw-etcsudoers&#34;&gt;chmod u+w /etc/sudoers&lt;a class=&#34;headerlink&#34; href=&#34;#chmod-uw-etcsudoers&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;vi-etcsudoers-uncomment-wheel-allall-all&#34;&gt;vi /etc/sudoers # Uncomment &#39;%wheel ALL=(ALL) ALL&#39;&lt;a class=&#34;headerlink&#34; href=&#34;#vi-etcsudoers-uncomment-wheel-allall-all&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;chmod-u-w-etcsudoers&#34;&gt;chmod u-w /etc/sudoers&lt;a class=&#34;headerlink&#34; href=&#34;#chmod-u-w-etcsudoers&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;pacman-syy&#34;&gt;pacman -Syy&lt;a class=&#34;headerlink&#34; href=&#34;#pacman-syy&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;pacman-s-xorg-server-xf86-video-amdgpu-maliit-keyboard-qt5-wayland&#34;&gt;pacman -S xorg-server xf86-video-amdgpu maliit-keyboard qt5-wayland&lt;a class=&#34;headerlink&#34; href=&#34;#pacman-s-xorg-server-xf86-video-amdgpu-maliit-keyboard-qt5-wayland&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;su-&#34;&gt;su - &lt;USER&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#su-&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;```&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;The password you choose when running the &lt;code&gt;passwd &amp;lt;USER&amp;gt;&lt;/code&gt; command should be numeric if you want to use Plasma Mobile, as the unlock screen only allows you to enter a PIN.&lt;/p&gt;&lt;h2 id=&#34;graphical-environment-installation&#34;&gt;Graphical environment installation&lt;a class=&#34;headerlink&#34; href=&#34;#graphical-environment-installation&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Continuing from where we left off, that is, in the chroot session from the Arch Linux live installation system. We will now do this as a normal user (not root), so from now on, we will frequently use &lt;code&gt;sudo&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;Now we are going to install the graphical environments. I say this in plural because we will install two: Plasma and Plasma Mobile. I do this because, depending on whether we will use the Steam Deck with Arch in desktop mode (with keyboard/mouse and possibly a screen) or portable mode (without keyboard/mouse), one system or the other will be more convenient, as Plasma Mobile has an interface designed to be operated with a touchscreen (tablet-style).&lt;/p&gt;&lt;p&gt;Really, it&#39;s not necessary to install both desktops, so their installation steps are separated. You can install one, the other, or both.&lt;/p&gt;&lt;h4 id=&#34;plasma&#34;&gt;Plasma&lt;a class=&#34;headerlink&#34; href=&#34;#plasma&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;code&gt;bash$ sudo pacman -S plasma-meta&lt;/code&gt;&lt;/p&gt;&lt;p&gt;During the installation of the above package, you will be asked several questions. On the third question, answer &lt;code&gt;2) noto-fonts&lt;/code&gt;. For the rest, provide the default answer (by pressing enter).&lt;/p&gt;&lt;h4 id=&#34;plasma-mobile&#34;&gt;Plasma Mobile&lt;a class=&#34;headerlink&#34; href=&#34;#plasma-mobile&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Plasma Mobile is not yet available in the official repositories. We have to use &lt;a href=&#34;https://aur.archlinux.org/&#34;&gt;AUR&lt;/a&gt;:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Start by installing some dependencies:&lt;/p&gt;&lt;p&gt;&lt;code&gt;bash$ sudo pacman -S plasma-workspace kcontacts kirigami2 kpeople libphonenumber&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Install the AUR packages &lt;code&gt;plasma-nano&lt;/code&gt;, &lt;code&gt;plasma-settings&lt;/code&gt;, and &lt;code&gt;plasma-mobile&lt;/code&gt; in this order:&lt;/p&gt;&lt;p&gt;&lt;code&gt;bash$ cd ~$ git clone https://aur.archlinux.org/plasma-nano.git$ cd plasma-nano$ makepkg -si$ cd ~$ git clone https://aur.archlinux.org/plasma-settings.git$ cd plasma-settings$ makepkg -si$ cd ~$ git clone https://aur.archlinux.org/plasma-mobile.git$ cd plasma-mobile$ makepkg -si&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h4 id=&#34;end-of-graphical-environment-installation&#34;&gt;End of graphical environment installation&lt;a class=&#34;headerlink&#34; href=&#34;#end-of-graphical-environment-installation&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Install the SDDM session manager and some applications, which we&#39;ll need to finish the installation from the graphical mode:&lt;/p&gt;&lt;p&gt;&lt;code&gt;bash$ sudo pacman -S sddm konsole dolphin kwrite partitionmanager power-profiles-daemon$ sudo systemctl enable sddm$ exit&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Close the chroot session, unmount the partitions, and reboot the system:&lt;/p&gt;&lt;p&gt;```bash&lt;/p&gt;&lt;h1 id=&#34;exit&#34;&gt;exit&lt;a class=&#34;headerlink&#34; href=&#34;#exit&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;umount-r-mnt&#34;&gt;umount -R /mnt&lt;a class=&#34;headerlink&#34; href=&#34;#umount-r-mnt&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;reboot&#34;&gt;reboot&lt;a class=&#34;headerlink&#34; href=&#34;#reboot&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;```&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 id=&#34;basic-configuration&#34;&gt;Basic configuration&lt;a class=&#34;headerlink&#34; href=&#34;#basic-configuration&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;After rebooting, you should see the SDDM session manager, initially with the screen rotated and without the ability to use the on-screen keyboard, so we&#39;ll still be using the external keyboard and mouse.&lt;/p&gt;&lt;p&gt;Once we have logged into Plasma or Plasma Mobile, the first thing we need to do is configure the internet connection. To do this, click on the corresponding icon in the system tray at the bottom right in Plasma or at the top right in Plasma Mobile.&lt;/p&gt;&lt;p&gt;Once connected, open the Konsole application and run the following commands to install the basic KDE application package, Firefox browser and the SSH server:&lt;/p&gt;&lt;p&gt;&lt;code&gt;bash$ sudo pacman -S firefox kde-applications-meta openssh usbutils lshw man-db htop spectacle$ sudo systemctl start sshd$ sudo systemctl enable sshd&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Finally, we make the following configurations:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;Preferences &amp;gt; System Preferences &amp;gt; Input &amp;amp; Output &amp;gt; Display &amp;amp; Monitor &amp;gt; Scale&lt;/code&gt;: Set the screen scale to 110%.&lt;/li&gt;&lt;li&gt;&lt;code&gt;Preferences &amp;gt; System Preferences &amp;gt; Input &amp;amp; Output &amp;gt; Keyboard &amp;gt; Layouts &amp;gt; Configure Layouts &amp;gt; Add&lt;/code&gt;: Add the English keyboard layout.&lt;/li&gt;&lt;li&gt;&lt;code&gt;Preferences &amp;gt; System Preferences &amp;gt; Input &amp;amp; Output &amp;gt; Keyboard &amp;gt; Virtual Keyboard&lt;/code&gt;: Select &lt;code&gt;Maliit&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;&lt;code&gt;Preferences &amp;gt; System Preferences &amp;gt; Language &amp;amp; Time &amp;gt; Date &amp;amp; Time &amp;gt; Time Zone&lt;/code&gt;: Select your city.&lt;/li&gt;&lt;li&gt;&lt;code&gt;Preferences &amp;gt; System Preferences &amp;gt; Appearance &amp;amp; Style &amp;gt; Text &amp;amp; Fonts &amp;gt; Fonts&lt;/code&gt;. Set this values:&lt;ul&gt;&lt;li&gt;&lt;code&gt;General&lt;/code&gt;: &lt;code&gt;Noto Sans 11pt&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;Fixed width&lt;/code&gt;: &lt;code&gt;Hack 10pt&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;Small&lt;/code&gt;: &lt;code&gt;Noto Sans 9pt&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;Toolbar&lt;/code&gt;: &lt;code&gt;Noto Sans 11pt&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;Menu&lt;/code&gt;: &lt;code&gt;Noto Sans 11pt&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;Window title&lt;/code&gt;: &lt;code&gt;Noto Sans 10pt&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Right-click (L2) on the taskbar and select &lt;code&gt;Show panel settings&lt;/code&gt;. In &lt;code&gt;Panel Preferences &amp;gt; Panel Height&lt;/code&gt; increase the height to 54px.&lt;/li&gt;&lt;li&gt;Right-click (L2) on the icon used to show hidden icons in the system tray and select &lt;code&gt;Configure System Tray&lt;/code&gt;. In &lt;code&gt;General&lt;/code&gt; select these values:&lt;ul&gt;&lt;li&gt;&lt;code&gt;Panel icon size&lt;/code&gt;: &lt;code&gt;Scale to panel height&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;Spacing between panel icons&lt;/code&gt;: &lt;code&gt;Normal&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Right-click (L2) on the icon used to show hidden icons in the system tray and select &lt;code&gt;Show panel settings&lt;/code&gt;. You will see a small clock that was not visible before, right-click (L2) on it. Select &lt;code&gt;Show alternatives&lt;/code&gt; and from the alternative graphics that appear, choose &lt;code&gt;Digital clock&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;h2 id=&#34;sddm-configuration&#34;&gt;SDDM configuration&lt;a class=&#34;headerlink&#34; href=&#34;#sddm-configuration&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Finally, we&#39;ll improve the SDDM session manager configuration to enable the on-screen keyboard, enhance the appearance, and display the screen in the correct orientation:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Create the file &lt;code&gt;/etc/sddm.conf.d/10-wayland.conf&lt;/code&gt; with the following content:&lt;/p&gt;&lt;p&gt;```ini[General]DisplayServer=waylandGreeterEnvironment=QT_WAYLAND_SHELL_INTEGRATION=layer-shell&lt;/p&gt;&lt;p&gt;[Wayland]CompositorCommand=kwin_wayland --drm --no-lockscreen --no-global-shortcuts --locale1 --inputmethod maliit-keyboard```&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Open &lt;code&gt;Preferences &amp;gt; Login Screen (SDDM)&lt;/code&gt;, select Breeze as the theme, and click the &lt;code&gt;Apply Plasma settings...&lt;/code&gt; button in the top right corner.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 id=&#34;sound-configuration&#34;&gt;Sound configuration&lt;a class=&#34;headerlink&#34; href=&#34;#sound-configuration&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;As &lt;a href=&#34;https://wiki.archlinux.org/title/Steam_Deck#Audio&#34;&gt;the Arch wiki mentions&lt;/a&gt;, the default volume on the Steam Deck is very low. To fix this, you need to install the &lt;code&gt;alsa-utils&lt;/code&gt; package and run the &lt;code&gt;alsamixer&lt;/code&gt; command to adjust the volume of some of the channels.&lt;/p&gt;&lt;p&gt;&lt;code&gt;bash$ sudo pacman -S alsa-utils$ alsamixer&lt;/code&gt;&lt;/p&gt;&lt;p&gt;To access them, once in &lt;code&gt;alsamixer&lt;/code&gt;, press &lt;code&gt;F6&lt;/code&gt; to select the &lt;code&gt;acp5x&lt;/code&gt; audio device, as by default the selected device is 0, which is associated with the HDMI output of the graphics chip:&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;alsamixer&#34; src=&#34;../images/posts/2024-09-04_steam_deck_arch/alsamixer-select-device.png&#34; /&gt;&lt;/p&gt;&lt;p&gt;Once the correct device is selected, you will see all its channels, which are quite numerous. Locate the ones &lt;a href=&#34;https://wiki.archlinux.org/title/Steam_Deck#Audio&#34;&gt;mentioned in the wiki&lt;/a&gt; and adjust them to the following values:&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&#34;text-align: left;&#34;&gt;Channel&lt;/th&gt;&lt;th style=&#34;text-align: right;&#34;&gt;Value&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&#34;text-align: left;&#34;&gt;Analog PCM&lt;/td&gt;&lt;td style=&#34;text-align: right;&#34;&gt;85%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&#34;text-align: left;&#34;&gt;Digital&lt;/td&gt;&lt;td style=&#34;text-align: right;&#34;&gt;86%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&#34;text-align: left;&#34;&gt;Digital PCM&lt;/td&gt;&lt;td style=&#34;text-align: right;&#34;&gt;85%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&#34;text-align: left;&#34;&gt;Left Analog PCM&lt;/td&gt;&lt;td style=&#34;text-align: right;&#34;&gt;85%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&#34;text-align: left;&#34;&gt;Left Digital PCM&lt;/td&gt;&lt;td style=&#34;text-align: right;&#34;&gt;85%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&#34;text-align: left;&#34;&gt;Right Analog PCM&lt;/td&gt;&lt;td style=&#34;text-align: right;&#34;&gt;85%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&#34;text-align: left;&#34;&gt;Right Digital PCM&lt;/td&gt;&lt;td style=&#34;text-align: right;&#34;&gt;85%&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h2 id=&#34;pamac-installation&#34;&gt;Pamac Installation&lt;a class=&#34;headerlink&#34; href=&#34;#pamac-installation&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;To facilitate package installation from the graphical interface, we are going to install &lt;code&gt;pamac&lt;/code&gt;:&lt;/p&gt;&lt;p&gt;&lt;code&gt;bash$ yay -S pamac-aur&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Once installed, open it (by searching for &lt;code&gt;Add/Remove Software&lt;/code&gt; in the application drawer) and enable AUR support in &lt;code&gt;Preferences &amp;gt; Third Party &amp;gt; Enable AUR support&lt;/code&gt;.&lt;/p&gt;&lt;h2 id=&#34;dual-boot-manager-installation&#34;&gt;Dual Boot manager installation&lt;a class=&#34;headerlink&#34; href=&#34;#dual-boot-manager-installation&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The Arch system is now ready and can be booted by starting the console in Boot Manager mode (holding down the volume- key) and selecting the &lt;code&gt;Arch&lt;/code&gt; option. But to make it easier to boot SteamOS, we&#39;ll install a dual boot manager called &lt;a href=&#34;https://github.com/jlobue10/SteamDeck_rEFInd&#34;&gt;rEFInd&lt;/a&gt;.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Boot SteamOS (with Volume- + Power).&lt;/li&gt;&lt;li&gt;&lt;p&gt;From a terminal in desktop mode, run:&lt;/p&gt;&lt;p&gt;&lt;code&gt;bashcd $HOME &amp;amp;&amp;amp; rm -rf $HOME/SteamDeck_rEFInd/ &amp;amp;&amp;amp; git clone https://github.com/jlobue10/SteamDeck_rEFInd &amp;amp;&amp;amp; cd SteamDeck_rEFInd &amp;amp;&amp;amp; chmod +x install-GUI.sh &amp;amp;&amp;amp; ./install-GUI.sh&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Download or create an Arch Linux icon of 128x128px.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;Open the desktop launcher found on the desktop.&lt;/li&gt;&lt;li&gt;&lt;p&gt;Configure it as follows (select the icon downloaded or created earlier in the &lt;code&gt;Boot Option #2 Icon&lt;/code&gt; field):&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;rEFInd Configuration&#34; src=&#34;../images/posts/2024-09-04_steam_deck_arch/rEFInd_conf.png&#34; /&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Click the &lt;code&gt;Create Config&lt;/code&gt; button.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Edit the file found at &lt;code&gt;~/.local/SteamDeck_rEFInd/GUI/refind.conf&lt;/code&gt; and modify the last entry as follows:&lt;/p&gt;&lt;p&gt;&lt;code&gt;confmenuentry &#34;Arch&#34; { icon /EFI/refind/os_icon2.png loader /EFI/Arch/grubx64.efi graphics on}&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Click the &lt;code&gt;Install rEFInd&lt;/code&gt; button.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;Click the &lt;code&gt;Install Config&lt;/code&gt; button.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;The path &lt;code&gt;/EFI/Arch/grubx64.efi&lt;/code&gt; in step 6 may change if you chose a different identifier than &lt;code&gt;Arch&lt;/code&gt; during the &lt;code&gt;grub-install&lt;/code&gt; command executed during the &lt;a href=&#34;#base-installation&#34;&gt;base system installation&lt;/a&gt;. In that case, you&#39;ll need to adapt the path.&lt;/p&gt;&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;a class=&#34;headerlink&#34; href=&#34;#conclusion&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;And that&#39;s it. Now we have an Arch Linux system on our Steam Deck with a dual boot manager that allows us to boot into SteamOS as well. From here, we have a machine with a dual nature, one (SteamOS) for gaming and another (Arch) to be used as a PC (Plasma) or tablet PC (Plasma Mobile).&lt;/p&gt;&lt;p&gt;To choose between the normal Plasma or Plasma Mobile graphical environment, use the dropdown menu that appears at the bottom left in the SDDM login manager.&lt;/p&gt;&lt;iframe width=&#34;688&#34; height=&#34;387&#34; src=&#34;https://www.youtube.com/embed/hColcI3rv38&#34; title=&#34;Arch Linux on Steam Deck&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; allowfullscreen&gt;&lt;/iframe&gt;&lt;p&gt;Some interesting links consulted during the creation of this guide:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&#34;https://www.freecodecamp.org/news/how-to-install-arch-linux/&#34;&gt;The Arch Linux Handbook – Learn Arch Linux for Beginners&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&#34;https://asgardius.company/?p=1783&#34;&gt;Instalando Arch Linux con KDE en Steam Deck&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&#34;https://wiki.archlinux.org/title/Steam_Deck&#34;&gt;Steam Deck - ArchWiki&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</description><link>https://apuntes.eduardofilo.es/en/2024-09-04_steam_deck_arch.html</link> <pubDate>Wed, 04 Sep 2024 15:30:00 +0200</pubDate><source url="https://apuntes.eduardofilo.es/rss.xml">Apuntes de eduardófilo</source><guid isPermaLink="true">https://apuntes.eduardofilo.es/en/2024-09-04_steam_deck_arch.html</guid> <enclosure url="https://apuntes.eduardofilo.es/images/posts/2024-09-04_steam_deck_arch/steam_deck_logo.png" type="image/png" length="55688" /> </item> <item> <title>Vías Zaragoza - Campus en bicicleta</title> <description>&lt;p&gt;&lt;img alt=&#34;Pelotón ciclista&#34; src=&#34;images/posts/2024-05-31_campus_aula_dei_en_bici/peloton.jpg&#34; /&gt;Foto de Javier Rodrigo&lt;/p&gt;&lt;div class=&#34;admonition warning&#34;&gt;&lt;p class=&#34;admonition-title&#34;&gt;Ruta por margen derecha cortada&lt;/p&gt;&lt;p&gt;El camino que discurre por la margen derecha del Gállego (la ruta con nombre &#34;Azud - Campus (por margen der. Gállego)&#34; en la tabla final) está cortado por desprendimientos entre los waypoints 14 y 15, cuando se pasa junto a un muro que rodea un terreno muy próximo al propio río, al menos en fecha 2025-02-18. Una opción para evitar ese punto es salir momentáneamente a la carretera de Cogullada que discurre frente al lado opuesto del terreno con el muro.&lt;/p&gt;&lt;/div&gt;&lt;p&gt;Actualmente trabajo en el Campus de Aula Dei, a unos 15Km de Zaragoza. Aunque existen varias opciones para acudir al campus en autobús, en mi caso particular la combinación de rutas y horarios no es favorable, por lo que desde un principio opté por ir en bicicleta. Tras unos días realizando pruebas, ajusté la ruta y la equipación para hacerla más conveniente y segura. En este post enumero las distintas opciones que he terminado conociendo y describo a mi parecer sus ventajas e inconvenientes.&lt;/p&gt;&lt;h2 id=&#34;problemas-y-soluciones&#34;&gt;Problemas y soluciones&lt;a class=&#34;headerlink&#34; href=&#34;#problemas-y-soluciones&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Hay que comentar desde un principio que desafortunadamente el acceso al campus en bicicleta no es muy favorable. Por un lado existen las barreras naturales de la acequia de Urdán y sobre todo el río Gállego para el que existen muy pocos pasos. Si no tenemos en cuenta los puentes de las distintas carreteras, sólo existen las pasarelas peatonales de &lt;a href=&#34;https://osm.org/go/b_84LYjOF-?m=&#34;&gt;Santa Isabel&lt;/a&gt; y la &lt;a href=&#34;https://osm.org/go/b_85hJ7oE-?m=&#34;&gt;próxima a San Juan de Mozarrifar&lt;/a&gt; que se indican en el plano siguiente. La foto que hay a continuación del plano es de la segunda pasarela.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Pasarelas Gállego&#34; src=&#34;images/posts/2024-05-31_campus_aula_dei_en_bici/pasarelas_gallego.png&#34; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Paso peatonal San Juan de Mozarrifar&#34; src=&#34;images/posts/2024-05-31_campus_aula_dei_en_bici/paso_peatonal_san_juan.jpg&#34; /&gt;&lt;/p&gt;&lt;p&gt;Por otro lado, la carretera de acceso al campus (A-123) carece de arcén en gran parte de su trazado, tiene límite de 70 km/h, muchas incorporaciones/salidas y considerable tráfico de tractores, camiones y autobuses (sobre todo a las horas de comienzo y fin de la jornada), por lo que la considero inconveniente para ciclistas. Pero evitar las carreteras conlleva algunos inconvenientes que vamos a analizar.&lt;/p&gt;&lt;h4 id=&#34;ensuciamiento-de-la-bicicleta&#34;&gt;Ensuciamiento de la bicicleta&lt;a class=&#34;headerlink&#34; href=&#34;#ensuciamiento-de-la-bicicleta&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Los caminos en verano son muy polvorientos y en invierno se embarran y forman lagunas. Ambas situaciones ensucian la bicicleta, sobre todo el polvo en verano que ataca la transmisión (cadena, platos y piñones), bujes y pedalier. Para el barro y los charcos lo mejor es que la bicicleta disponga de guardabarros, aunque en mi caso particular no los puedo (ni quiero) poner.&lt;/p&gt;&lt;p&gt;Considerando ambos problemas, aún así me he decantado por utilizar los caminos rurales y limpiar la bicicleta con la frecuencia que la situación requiera. Pero hay momentos puntuales, tras varios días de lluvia por ejemplo, en los que conviene tener una alternativa por asfalto. Para esa situación, y en mi caso particular, recurro a la carretera que conecta San Gregorio con San Juan de Mozarrifar que termina en la carretera de Cogullada, otra buena alternativa si se accede desde una zona situada al noroeste de Zaragoza. Ambos tramos de carretera tienen poco tráfico y límite de 50 km/h. Desde la carretera de Cogullada se puede acceder a la &lt;a href=&#34;https://osm.org/go/b_85hJ7oE-?m=&#34;&gt;pasarela cerca de San Juan&lt;/a&gt; saliendo hacia el campo de fútbol de San Juan.&lt;/p&gt;&lt;p&gt;De todas formas en términos de minimizar el ensuciamiento y mantenimiento de la bicicleta, la mejor ruta en mi opinión es la que me enseñó el compañero Magí que utilizando la &lt;a href=&#34;https://osm.org/go/b_84LYjOF-?m=&#34;&gt;pasarela de Santa Isabel&lt;/a&gt; para superar el Gállego, transcurre por asfalto hasta más arriba de la Montañanesa. Es la denominada &lt;code&gt;Azud - Campus (margen izq. Gállego, asfalto)&lt;/code&gt; en la tabla de rutas final. Poco antes de llegar a la acequia de Urdán (en &lt;a href=&#34;https://osm.org/go/b_8406Z8?m=&#34;&gt;este punto&lt;/a&gt;) tenemos las opciones de terminar por caminos rurales por la izquierda o girar a la derecha para salir &lt;a href=&#34;https://osm.org/go/b_842C5~g-?m=&#34;&gt;delante de la Montañanesa&lt;/a&gt; a la carretera de Montañana de la que recorreremos un pequeño tramo hasta tomar el &lt;a href=&#34;https://osm.org/go/b_842ylME-?m=&#34;&gt;Camino el Soaso&lt;/a&gt; para alcanzar el campus integramente por asfalto y por vías con poco tráfico. Si no utilizo personalmente esta ruta es porque tengo que dar algo de vuelta para poder acceder a ella y porque disfruto más rodando por caminos rurales con la bicicleta de montaña.&lt;/p&gt;&lt;p&gt;Otra ruta un poco más larga pero íntegramente por asfalto y que minimiza el tránsito por la carretera de Montañana es la que me enseñó el compañero Ricardo y que desde Santa Isable discurre enteramente por calzadas paralelas a la de Montañana. Es la denominada &lt;code&gt;Azud - Campus (todo asfalto 3)&lt;/code&gt; en la tabla de rutas final.&lt;/p&gt;&lt;p&gt;En cuanto a la limpieza de la bicicleta en sí, he llegado al compromiso de fijarme exclusivamente en la transmisión (cadena, platos y piñones). He terminado usando lubicante basado en cera, que tiene el inconveniente de que hay que reponerlo cada pocos días (3 ó 4) pero a cambio la cadena no acumula la típica mugre mezcla de grasa y polvo. Utilizo el de la marca &lt;a href=&#34;https://www.amazon.es/dp/B01CXILFJ6&#34;&gt;X-sauce&lt;/a&gt; (en tiendas de comercio local cuesta la mitad que en Amazon).&lt;/p&gt;&lt;p&gt;Una vez al mes llevo la bicicleta a un lavadero de coches. Empiezo limpiando la cadena con un &lt;a href=&#34;https://www.decathlon.es/es/p/limpiador-cadena-bicicleta/_/R-p-334700?mc=8651030&#34;&gt;accesorio para facilitar la tarea&lt;/a&gt; que lleno de desengrasante biodegradable (la marca &lt;a href=&#34;https://www.amazon.es/dp/B084S7C3PX&#34;&gt;BLUB&lt;/a&gt; en concreto me da un resultado excelente). Tras eso, retiro las pastillas de freno para que no se contaminen y le doy un manguerazo a la bicicleta. En casa seco, aplico &lt;a href=&#34;https://www.amazon.es/dp/B00K7XZEZ6&#34;&gt;WD-40&lt;/a&gt; en las articulaciones de los desviadores y lubrico la cadena con el producto mencionado antes.&lt;/p&gt;&lt;h4 id=&#34;charcos-y-barro&#34;&gt;Charcos y barro&lt;a class=&#34;headerlink&#34; href=&#34;#charcos-y-barro&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;El tema de los charcos puede parecer menor, pero al menos la pasada temporada fría (2023/2024), desde octubre hasta abril han existido en varios puntos de mi ruta habitual, tres zonas difíciles de pasar, es decir, el problema va más allá de que se ensucie la bicicleta. Uno de los puntos es el &lt;a href=&#34;https://osm.org/go/b_841ChW5?m=&#34;&gt;puente del ferrocarril&lt;/a&gt; que accede a la Montañanesa en su paso sobre la pista que trascurre por la margen derecha del Gállego. Afortunadamente descubrí que poco antes de ese punto sale una vía a la derecha que permite pasar el puente por &lt;a href=&#34;https://osm.org/go/b_840dYW?m=&#34;&gt;uno de sus vanos menores&lt;/a&gt; más adelante.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Paso bajo ferrocarril Montañanesa&#34; src=&#34;images/posts/2024-05-31_campus_aula_dei_en_bici/paso_bajo_ferrocarril_montananesa.jpg&#34; /&gt;&lt;/p&gt;&lt;p&gt;Otro paso incluso peor, dado que no existe alternativa una vez que estás allí (está entre una valla y un campo que en ocasiones no es practicable), es el que hay en un &lt;a href=&#34;https://osm.org/go/b_84fr992?m=&#34;&gt;punto del camino muy próximo al puente comentado antes&lt;/a&gt;. Durante todos estos meses fríos han existido unas lagunas cuyos bordes se mantenían permanentemente embarrados por el agua que desplazaban los vehículos al pasar. En los peores momentos la alternativa era dar un poco de vuelta subiendo un poco por la carretera de Cogullada para acceder al camino que discurre por el otro lado de la vía del ferrocarril y de paso evitar el puente.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Lagunas&#34; src=&#34;images/posts/2024-05-31_campus_aula_dei_en_bici/lagunas.jpg&#34; /&gt;&lt;/p&gt;&lt;h4 id=&#34;frio-y-noche&#34;&gt;Frío y noche&lt;a class=&#34;headerlink&#34; href=&#34;#frio-y-noche&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;En invierno el principal enemigo es el frío en las manos y la iluminación. Para lo primero he probado muchos modelos de guantes con y sin calefacción, y no ha sido hasta adquirir los últimos que no he conseguido solucionar el problema. Desafortunadamente en el momento de escribir este artículo no se encuentran a la venta, aunque podría ser por no estar todavía en la temporada de invierno. Son el modelo &#34;HEAT CONCEPT BIKE&#34; de la marca &lt;a href=&#34;https://www.ekoi.es&#34;&gt;Ekoi&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;En cuanto a la iluminación, hace tiempo que adquirí un foco potente (parecido a &lt;a href=&#34;https://es.aliexpress.com/item/1005007131009248.html&#34;&gt;éste&lt;/a&gt;) para las excursiones veraniegas nocturnas. Empecé a tener problemas con la batería, pero por lo que he podido ver el formato de las mismas es bastante estándar o popular (8,4V) por lo que pude encontrar &lt;a href=&#34;https://es.aliexpress.com/item/32877254810.html&#34;&gt;reemplazo&lt;/a&gt; fácilmente.&lt;/p&gt;&lt;h4 id=&#34;mayor-riesgo-de-pinchazos&#34;&gt;Mayor riesgo de pinchazos&lt;a class=&#34;headerlink&#34; href=&#34;#mayor-riesgo-de-pinchazos&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Aquí sólo puedo hacer la natural recomendación de llevar bomba encima para por lo menos poder ir hinchando la rueda en caso de pinchar hasta llegar al destino. En mi caso llevo las ruedas montadas sin cámara o en tubeless, cosa que recomiendo a pesar de los inconvenientes que tiene (requiere mantenimiento y es mucho más engorroso desmontar el neumático). Gracias a ello me he podido olvidar del tema de los pinchazos desde hace años (salvo un par de episodios dramáticos en los que el neumático se hubiera destrozado llevase lo que llevase).&lt;/p&gt;&lt;h4 id=&#34;mas-tiempo-de-viaje&#34;&gt;Más tiempo de viaje&lt;a class=&#34;headerlink&#34; href=&#34;#mas-tiempo-de-viaje&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Utilizar los caminos rurales conlleva más tiempo por una parte por la menor velocidad de circulación y por otra por los rodeos que hay que hacer para lograr la conexión de pistas. Aunque como puede verse en el mapa final con las rutas, la mayoría son bastante directas.&lt;/p&gt;&lt;h4 id=&#34;orientacion-inicial&#34;&gt;Orientación inicial&lt;a class=&#34;headerlink&#34; href=&#34;#orientacion-inicial&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Relacionado con el punto anterior existe la posibilidad de despistarse, al menos durante los primeros días, sobre todo si se utiliza la opción de los caminos rurales, al no haber señalización y ser los caminos/campos parecidos. El primer día que intenté ir al campus en bicicleta fue un desastre. Tuve que improvisar en las proximidades del recinto porque la ruta que llevaba pretrazada con Google Maps me llevaba por un paso bloqueado. &lt;a href=&#34;https://connect.garmin.com/modern/activity/11031310117&#34;&gt;Ese día&lt;/a&gt; empleé una hora más de la cuenta dando vueltas por un terreno salvaje que hay entre el Gállego y el recinto del campus y más adelante atravesando unos campos encharcados que parecían una buena opción para atajar 🤦.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;La trampa mortal&#34; src=&#34;images/posts/2024-05-31_campus_aula_dei_en_bici/trampa.png&#34; /&gt;&lt;/p&gt;&lt;p&gt;Para evitar este problema, por una parte conviene utilizar la herramienta adecuada para trazar la ruta, que no es Google Maps como el compañero Miguel me enseñó, sino otra basada en los mapas de &lt;a href=&#34;https://www.openstreetmap.org/&#34;&gt;OpenStreetMap&lt;/a&gt; como &lt;a href=&#34;https://graphhopper.com/maps&#34;&gt;GraphHopper&lt;/a&gt; donde sí están correctamente mapeado el perímetro del recinto del campus. Por otra parte, conviene llevar un GPS que nos permita seguir la ruta sin tener que parar a mirar el mapa. En mi caso empecé utilizando un viejo Garmin Edge 305 que ya que ahora domino de memoria las distinas opciones, puedo prestar a otras personas que se animen a ir en bici al campus para que se aprendan el recorrido. Si se dispone de un soporte de manillar para smartphone, también se puede utilizar una aplicación de navegación como &lt;a href=&#34;https://play.google.com/store/apps/details?id=net.osmand&#34;&gt;OsmAnd&lt;/a&gt; con los tracks precargados.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;GPS&#34; src=&#34;images/posts/2024-05-31_campus_aula_dei_en_bici/gps.jpg&#34; /&gt;&lt;/p&gt;&lt;h2 id=&#34;rutas&#34;&gt;Rutas&lt;a class=&#34;headerlink&#34; href=&#34;#rutas&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;A continuación se enumera la coleccion de rutas que he seleccionado. Uno de los objetivos de la selección ha sido cubrir distintos puntos de partida repartidos por el noreste de Zaragoza. Otro el que existan opciones que discurran íntegramente por asfalto, bien por los días en que los caminos estén embarrados o pensando en las personas que sólo cuenten con bicicletas de carretera. El tiempo estimado que aparece en la tabla es una aproximación que puede variar en función de la forma física, el tipo de bicicleta y las condiciones meteorológicas (¡hola cierzo!). En la columna de observaciones se indican los puntos conflictivos o a tener en cuenta en cada ruta. Por último, la primera columna contiene un enlace para descargar los tracks GPX de forma que se puedan instalar en aplicaciones como la mencionada &lt;a href=&#34;https://play.google.com/store/apps/details?id=net.osmand&#34;&gt;OsmAnd&lt;/a&gt;.&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruta&lt;/th&gt;&lt;th&gt;Distancia&lt;/th&gt;&lt;th&gt;Tiempo estimado&lt;/th&gt;&lt;th&gt;Observaciones&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&#34;files/posts/2024-05-31_campus_aula_dei_en_bici/Juslibol-Actur---Campus-%28por-San-Gregorio%29.gpx&#34;&gt;Juslibol/Actur - Campus (por San Gregorio)&lt;/a&gt;&lt;/td&gt;&lt;td&gt;14,38 km&lt;/td&gt;&lt;td&gt;40m-1h&lt;/td&gt;&lt;td&gt;Hay que cruzar la carretera de Huesca pero se puede hacer por paso elevado. 🚧&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&#34;files/posts/2024-05-31_campus_aula_dei_en_bici/Arrabal-Picarral---Campus-%28por-Corbera-Alta%29.gpx&#34;&gt;Arrabal/Picarral - Campus (por Corbera Alta)&lt;/a&gt;&lt;/td&gt;&lt;td&gt;13,05 km&lt;/td&gt;&lt;td&gt;35m-55m&lt;/td&gt;&lt;td&gt;🚧&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&#34;files/posts/2024-05-31_campus_aula_dei_en_bici/Cogullada---Campus-%28Carretera-Cogullada%29.gpx&#34;&gt;Cogullada - Campus (Carretera Cogullada)&lt;/a&gt;&lt;/td&gt;&lt;td&gt;9,95 km&lt;/td&gt;&lt;td&gt;30m-45m&lt;/td&gt;&lt;td&gt;Poco tráfico. 🚧&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&#34;files/posts/2024-05-31_campus_aula_dei_en_bici/Azud---Campus-%28por-margen-der.-G%C3%A1llego%29.gpx&#34;&gt;Azud - Campus (por margen der. Gállego)&lt;/a&gt;&lt;/td&gt;&lt;td&gt;13,00 km&lt;/td&gt;&lt;td&gt;35m-55m&lt;/td&gt;&lt;td&gt;La más divertida. 🚧&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&#34;files/posts/2024-05-31_campus_aula_dei_en_bici/Azud---Campus-%28margen-izq.-G%C3%A1llego%2C-asfalto%29.gpx&#34;&gt;Azud - Campus (margen izq. Gállego, asfalto)&lt;/a&gt;&lt;/td&gt;&lt;td&gt;12,05 km&lt;/td&gt;&lt;td&gt;35m-50m&lt;/td&gt;&lt;td&gt;En mi opinión la mejor, buen equilibrio entre rapidez, pocos coches, limpieza de bici y opción a terminar del todo por asfalto.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&#34;files/posts/2024-05-31_campus_aula_dei_en_bici/Azud---Campus-%28margen-izq.-G%C3%A1llego%2C-caminos%29.gpx&#34;&gt;Azud - Campus (margen izq. Gállego, caminos)&lt;/a&gt;&lt;/td&gt;&lt;td&gt;11,73 km&lt;/td&gt;&lt;td&gt;35m-50m&lt;/td&gt;&lt;td&gt;Paralela a la anterior, sin coches pero ensucia más la bicicleta. 🚧&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&#34;files/posts/2024-05-31_campus_aula_dei_en_bici/Azud---Campus-%28todo-asfalto%29.gpx&#34;&gt;Azud - Campus (todo asfalto)&lt;/a&gt;&lt;/td&gt;&lt;td&gt;13,08 km&lt;/td&gt;&lt;td&gt;35m-55m&lt;/td&gt;&lt;td&gt;Tramo compartido con tráfico rodado desde Montañanesa hasta entrada a Camino el Saso.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&#34;files/posts/2024-05-31_campus_aula_dei_en_bici/Azud---Campus-%28todo-asfalto-2%29.gpx&#34;&gt;Azud - Campus (todo asfalto 2)&lt;/a&gt;&lt;/td&gt;&lt;td&gt;12,12 km&lt;/td&gt;&lt;td&gt;35m-50m&lt;/td&gt;&lt;td&gt;Tramo compartido con tráfico rodado desde Santa Isabel hasta Montañana.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&#34;files/posts/2024-05-31_campus_aula_dei_en_bici/Azud---Campus-%28todo-asfalto-3%29.gpx&#34;&gt;Azud - Campus (todo asfalto 3)&lt;/a&gt;&lt;/td&gt;&lt;td&gt;13,02 km&lt;/td&gt;&lt;td&gt;35m-55m&lt;/td&gt;&lt;td&gt;Sólo discurre por la carretera de Montañana un pequeño tramo con arcén.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;El emoji 🚧 en las observaciones de algunas de las rutas de la tabla significa que hay que hacer el paso por el acueducto sobre la acequia de Urdán. Se trata del acueducto de la foto. Puede ser un poco complicado de pasar junto a la bici, sobre todo cuando transporta agua o está mojado, ya que se vuelve resbaladizo y es estrecho. En caso de no verlo claro, se puede pasar al otro lado de la acequia por un paso a nivel que hay más adelante a unos 400m.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Acueducto sobre acequia de Urdán&#34; src=&#34;images/posts/2024-05-31_campus_aula_dei_en_bici/acueducto_acequia_urdan.jpg&#34; /&gt;&lt;/p&gt;&lt;iframe width=&#34;100%&#34; height=&#34;300px&#34; frameborder=&#34;0&#34; allowfullscreen allow=&#34;geolocation&#34; src=&#34;https://umap.openstreetmap.fr/es/map/vias-zaragoza-campus-en-bicicleta_1071113?scaleControl=false&amp;miniMap=false&amp;scrollWheelZoom=false&amp;zoomControl=true&amp;editMode=disabled&amp;moreControl=true&amp;searchControl=null&amp;tilelayersControl=null&amp;embedControl=null&amp;datalayersControl=true&amp;onLoadPanel=none&amp;captionBar=false&amp;captionMenus=true&#34;&gt;&lt;/iframe&gt;&lt;p&gt;&lt;a href=&#34;https://umap.openstreetmap.fr/es/map/vias-zaragoza-campus-en-bicicleta_1071113?scaleControl=false&amp;miniMap=false&amp;scrollWheelZoom=true&amp;zoomControl=true&amp;editMode=disabled&amp;moreControl=true&amp;searchControl=null&amp;tilelayersControl=null&amp;embedControl=null&amp;datalayersControl=true&amp;onLoadPanel=none&amp;captionBar=false&amp;captionMenus=true&#34;&gt;Ver a pantalla completa&lt;/a&gt;&lt;/p&gt;</description><link>https://apuntes.eduardofilo.es/2024-05-31_campus_aula_dei_en_bici.html</link> <pubDate>Fri, 31 May 2024 08:00:00 +0200</pubDate><source url="https://apuntes.eduardofilo.es/rss.xml">Apuntes de eduardófilo</source><guid isPermaLink="true">https://apuntes.eduardofilo.es/2024-05-31_campus_aula_dei_en_bici.html</guid> <enclosure url="https://apuntes.eduardofilo.es/images/posts/2024-05-31_campus_aula_dei_en_bici/peloton.jpg" type="image/jpeg" length="259405" /> </item> <item> <title>Zaragoza - Campus routes by bike</title> <description>&lt;p&gt;&lt;img alt=&#34;Cycling peloton&#34; src=&#34;../images/posts/2024-05-31_campus_aula_dei_en_bici/peloton.jpg&#34; /&gt;Photo by Javier Rodrigo&lt;/p&gt;&lt;div class=&#34;admonition warning&#34;&gt;&lt;p class=&#34;admonition-title&#34;&gt;Right margin route closed&lt;/p&gt;&lt;p&gt;The path that runs along the right bank of the Gállego River (the route named &#34;Azud - Campus (right bank of Gállego)&#34; in the final table) is blocked by landslides between waypoints 14 and 15, where it passes next to a wall enclosing a plot of land very close to the river itself, at least as of 2025-02-18. One option to bypass this point is to temporarily exit onto the Cogullada road, which runs opposite the walled plot of land.&lt;/p&gt;&lt;/div&gt;&lt;p&gt;Currently, I work at the Aula Dei Campus, about 15 km from Zaragoza. Although there are several options for getting to the campus by bus, in my particular case, the combination of routes and schedules is not favorable, so from the beginning, I chose to go by bike. After a few days of testing, I adjusted the route and equipment to make it more convenient and safe. In this post, I list the different options I have come to know and describe, in my opinion, their pros and cons.&lt;/p&gt;&lt;h2 id=&#34;problems-and-solutions&#34;&gt;Problems and solutions&lt;a class=&#34;headerlink&#34; href=&#34;#problems-and-solutions&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;It should be noted from the beginning that unfortunately, access to the campus by bike is not very favorable. On one hand, there are natural barriers such as the Urdán canal and especially the Gállego river, for which there are very few crossings. If we don&#39;t consider the road bridges, there are only the pedestrian walkways of &lt;a href=&#34;https://osm.org/go/b_84LYjOF-?m=&#34;&gt;Santa Isabel&lt;/a&gt; and the one &lt;a href=&#34;https://osm.org/go/b_85hJ7oE-?m=&#34;&gt;near San Juan de Mozarrifar&lt;/a&gt;, as indicated on the following map. The photo below the map is of the second walkway.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Gállego walkways&#34; src=&#34;../images/posts/2024-05-31_campus_aula_dei_en_bici/pasarelas_gallego.png&#34; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;San Juan de Mozarrifar pedestrian walkway&#34; src=&#34;../images/posts/2024-05-31_campus_aula_dei_en_bici/paso_peatonal_san_juan.jpg&#34; /&gt;&lt;/p&gt;&lt;p&gt;On the other hand, the access road to the campus (A-123) lacks a shoulder for most of its route, has a speed limit of 70 km/h, many entry and exit points, and considerable traffic from tractors, trucks, and buses (especially at the start and end of the workday), which makes it unsuitable for cyclists in my opinion. However, avoiding the roads brings some drawbacks that we are going to analyze.&lt;/p&gt;&lt;h4 id=&#34;bike-dirt-accumulation&#34;&gt;Bike dirt accumulation&lt;a class=&#34;headerlink&#34; href=&#34;#bike-dirt-accumulation&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;The paths are very dusty in summer and become muddy with puddles in winter. Both situations dirty the bike, especially the dust in summer, which affects the transmission (chain, chainrings, and cogs), hubs and pedal axle. For mud and puddles, the best solution is to have fenders on the bike, although in my particular case, I cannot (nor do I want to) install them.&lt;/p&gt;&lt;p&gt;Considering both problems, I have still chosen to use the rural paths and clean the bike as often as needed. However, there are certain times, after several days of rain for example, when it’s useful to have an asphalt alternative. For this situation, and in my particular case, I use the road that connects San Gregorio with San Juan de Mozarrifar, which ends at the Cogullada road, another good alternative if accessing from an area northwest of Zaragoza. Both road sections have little traffic and a speed limit of 50 km/h. From the Cogullada road, you can access the &lt;a href=&#34;https://osm.org/go/b_85hJ7oE-?m=&#34;&gt;walkway near San Juan&lt;/a&gt; by heading towards the San Juan football field.&lt;/p&gt;&lt;p&gt;In any case, in terms of minimizing cleaning and bike maintenance, the best route in my opinion is the one shown to me by my colleague Magí, which uses the &lt;a href=&#34;https://osm.org/go/b_84LYjOF-?m=&#34;&gt;Santa Isabel walkway&lt;/a&gt; to cross the Gállego river and follows asphalt up to above Montañanesa. It&#39;s called &lt;code&gt;Azud - Campus (left bank of Gállego, asphalt)&lt;/code&gt; in the final route table. Shortly before reaching the Urdán canal (at &lt;a href=&#34;https://osm.org/go/b_8406Z8?m=&#34;&gt;this point&lt;/a&gt;), we have the options of finishing on rural paths to the left or turning right to exit in &lt;a href=&#34;https://osm.org/go/b_842C5~g-?m=&#34;&gt;front of Montañanesa&lt;/a&gt; onto the Montañana road, which we will follow for a short distance before taking the &lt;a href=&#34;https://osm.org/go/b_842ylME-?m=&#34;&gt;Camino el Soaso&lt;/a&gt; to reach the campus entirely on asphalt and on low-traffic roads. The reason I don&#39;t personally use this route is because I have to make a bit of a detour to access it and because I enjoy riding on rural paths with the mountain bike.&lt;/p&gt;&lt;p&gt;Another route, slightly longer but entirely on asphalt and minimizing traffic on the Montañana road, is the one my colleague Ricardo showed me. From Santa Isabel, it runs entirely on roads parallel to the Montañana road. It is listed as &lt;code&gt;Azud - Campus (all asphalt 3)&lt;/code&gt; in the final route table.&lt;/p&gt;&lt;p&gt;As for cleaning the bike itself, I’ve come to the compromise of focusing exclusively on the drivetrain (chain, chainrings, and cogs). I ended up using a wax-based lubricant, which has the downside of needing to be reapplied every few days (3 or 4), but in return, the chain doesn’t accumulate the typical grime mix of grease and dust. I use the &lt;a href=&#34;https://www.amazon.es/dp/B01CXILFJ6&#34;&gt;X-sauce&lt;/a&gt; brand (it costs half as much in local stores as it does on Amazon).&lt;/p&gt;&lt;p&gt;Once a month, I take the bike to a car wash. I start by cleaning the chain with a &lt;a href=&#34;https://www.decathlon.es/es/p/limpiador-cadena-bicicleta/_/R-p-334700?mc=8651030&#34;&gt;chain cleaner tool&lt;/a&gt;, which I fill with biodegradable degreaser (the &lt;a href=&#34;https://www.amazon.es/dp/B084S7C3PX&#34;&gt;BLUB&lt;/a&gt; brand, in particular, works excellently for me). After that, I remove the brake pads to prevent contamination and hose down the bike. At home, I dry it, apply &lt;a href=&#34;https://www.amazon.es/dp/B00K7XZEZ6&#34;&gt;WD-40&lt;/a&gt; to the derailleur joints, and lubricate the chain with the previously mentioned product.&lt;/p&gt;&lt;h4 id=&#34;puddles-and-mud&#34;&gt;Puddles and mud&lt;a class=&#34;headerlink&#34; href=&#34;#puddles-and-mud&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;The issue of puddles may seem minor, but at least during the last cold season (2023/2024), from October to April, there were three difficult-to-pass areas at various points on my usual route, meaning the problem goes beyond just getting the bike dirty. One of these points is the &lt;a href=&#34;https://osm.org/go/b_841ChW5?m=&#34;&gt;railroad bridge&lt;/a&gt; that accesses Montañanesa as it crosses the path running along the right bank of the Gállego. Fortunately, I discovered that shortly before that point, a path branches off to the right, allowing you to pass under the bridge through &lt;a href=&#34;https://osm.org/go/b_840dYW?m=&#34;&gt;one of its smaller arches&lt;/a&gt; further ahead.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Montañanesa railroad underpass&#34; src=&#34;../images/posts/2024-05-31_campus_aula_dei_en_bici/paso_bajo_ferrocarril_montananesa.jpg&#34; /&gt;&lt;/p&gt;&lt;p&gt;Another even worse crossing, given that there is no alternative once you are there (it is between a fence and a field that is sometimes non-cyclable), is at a &lt;a href=&#34;https://osm.org/go/b_84fr992?m=&#34;&gt;point on the path very close to the previously mentioned bridge&lt;/a&gt;. Throughout these cold months, there were ponds whose edges remained permanently muddy due to the water displaced by passing vehicles. In the worst moments, the alternative was to take a slight detour up the Cogullada road to access the path that runs on the other side of the railway and thereby avoid the bridge.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Ponds&#34; src=&#34;../images/posts/2024-05-31_campus_aula_dei_en_bici/lagunas.jpg&#34; /&gt;&lt;/p&gt;&lt;h4 id=&#34;cold-and-night&#34;&gt;Cold and Night&lt;a class=&#34;headerlink&#34; href=&#34;#cold-and-night&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;In winter, the main enemies are cold hands and lighting. For the former, I’ve tried many models of gloves, both heated and non-heated, and it wasn’t until I purchased the latest ones that I managed to solve the problem. Unfortunately, at the time of writing this article, they are not available for sale, although this might be due to the winter season not yet starting. They are the &#34;HEAT CONCEPT BIKE&#34; model from the brand &lt;a href=&#34;https://www.ekoi.es&#34;&gt;Ekoi&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;As for lighting, some time ago I bought a powerful light (similar to &lt;a href=&#34;https://es.aliexpress.com/item/1005007131009248.html&#34;&gt;this one&lt;/a&gt;) for summer night rides. I started having problems with the battery, but from what I’ve seen, the battery format is quite standard or popular (8.4V), so I was able to easily find a &lt;a href=&#34;https://es.aliexpress.com/item/32877254810.html&#34;&gt;replacement&lt;/a&gt;.&lt;/p&gt;&lt;h4 id=&#34;increased-risk-of-punctures&#34;&gt;Increased risk of punctures&lt;a class=&#34;headerlink&#34; href=&#34;#increased-risk-of-punctures&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Here, I can only offer the natural recommendation to carry a pump with you, at least to be able to inflate the tire in case of a puncture until reaching your destination. In my case, I have my tires set up tubeless, which I recommend despite the inconveniences it has (it requires maintenance and it&#39;s much more cumbersome to remove the tire). Thanks to this, I have been able to forget about punctures for years (except for a couple of dramatic episodes where the tire would have been destroyed regardless of the tire type).&lt;/p&gt;&lt;h4 id=&#34;longer-travel-times&#34;&gt;Longer travel times&lt;a class=&#34;headerlink&#34; href=&#34;#longer-travel-times&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Using rural paths takes more time, partly due to the slower travel speed and partly due to detours required to connect tracks. Although, as can be seen on the final map with the routes, most are quite direct.&lt;/p&gt;&lt;h4 id=&#34;initial-orientation&#34;&gt;Initial orientation&lt;a class=&#34;headerlink&#34; href=&#34;#initial-orientation&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Related to the previous point, there&#39;s the possibility of getting lost, at least during the first few days, especially when using rural paths, as there&#39;s no signage and the paths/fields look similar. The first day I attempted to bike to the campus was a disaster. I had to improvise near the campus because the route I had pre-mapped with Google Maps led me to a blocked fence. &lt;a href=&#34;https://connect.garmin.com/modern/activity/11031310117&#34;&gt;That day&lt;/a&gt; I spent an extra hour circling through wild terrain between the Gállego river and the campus area, and later on, crossing some waterlogged fields that seemed like a good shortcut option 🤦.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;The death trap&#34; src=&#34;../images/posts/2024-05-31_campus_aula_dei_en_bici/trampa.png&#34; /&gt;&lt;/p&gt;&lt;p&gt;To avoid this problem, on one hand, it&#39;s advisable to use the appropriate tool to plan the route, which is not Google Maps as my colleague Miguel taught me, but another based on &lt;a href=&#34;https://www.openstreetmap.org/&#34;&gt;OpenStreetMap&lt;/a&gt; like &lt;a href=&#34;https://graphhopper.com/maps&#34;&gt;GraphHopper&lt;/a&gt; where the campus perimeter is correctly mapped. On the other hand, it&#39;s advisable to carry a GPS device that allows us to follow the route without having to stop and check the map. In my case, I started using an old Garmin Edge 305. Now that I know all the different options by heart, I can lend it to other people who are encouraged to bike to the campus so they can learn the route. If you have a handlebar mount for a smartphone, you can also use a navigation app like &lt;a href=&#34;https://play.google.com/store/apps/details?id=net.osmand&#34;&gt;OsmAnd&lt;/a&gt; with preloaded tracks.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;GPS&#34; src=&#34;../images/posts/2024-05-31_campus_aula_dei_en_bici/gps.jpg&#34; /&gt;&lt;/p&gt;&lt;h2 id=&#34;routes&#34;&gt;Routes&lt;a class=&#34;headerlink&#34; href=&#34;#routes&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Below is the collection of routes I have selected. One of the objectives of the selection has been to cover different starting points scattered throughout the northeast of Zaragoza. Another objective is to have options that run entirely on asphalt, either for days when the paths are muddy or for people who only have road bikes. The estimated time shown in the table is an approximation that may vary depending on physical fitness, bike type, and weather conditions (hello Zaragoza wind!). The observations column indicates any problematic points or factors to consider on each route. Finally, the first column contains a link to download the GPX tracks so they can be installed in applications such as the mentioned &lt;a href=&#34;https://play.google.com/store/apps/details?id=net.osmand&#34;&gt;OsmAnd&lt;/a&gt;.&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Route&lt;/th&gt;&lt;th&gt;Distance&lt;/th&gt;&lt;th&gt;Estimated time&lt;/th&gt;&lt;th&gt;Observations&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&#34;../files/posts/2024-05-31_campus_aula_dei_en_bici/Juslibol-Actur---Campus-%28por-San-Gregorio%29.gpx&#34;&gt;Juslibol/Actur - Campus (by San Gregorio)&lt;/a&gt;&lt;/td&gt;&lt;td&gt;14,38 km&lt;/td&gt;&lt;td&gt;40m-1h&lt;/td&gt;&lt;td&gt;You have to cross the Huesca road, but it can be done via an overpass. 🚧&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&#34;../files/posts/2024-05-31_campus_aula_dei_en_bici/Arrabal-Picarral---Campus-%28por-Corbera-Alta%29.gpx&#34;&gt;Arrabal/Picarral - Campus (by Corbera Alta)&lt;/a&gt;&lt;/td&gt;&lt;td&gt;13,05 km&lt;/td&gt;&lt;td&gt;35m-55m&lt;/td&gt;&lt;td&gt;🚧&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&#34;../files/posts/2024-05-31_campus_aula_dei_en_bici/Cogullada---Campus-%28Carretera-Cogullada%29.gpx&#34;&gt;Cogullada - Campus (Cogullada road)&lt;/a&gt;&lt;/td&gt;&lt;td&gt;9,95 km&lt;/td&gt;&lt;td&gt;30m-45m&lt;/td&gt;&lt;td&gt;Low traffic. 🚧&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&#34;../files/posts/2024-05-31_campus_aula_dei_en_bici/Azud---Campus-%28por-margen-der.-G%C3%A1llego%29.gpx&#34;&gt;Azud - Campus (right bank of Gállego)&lt;/a&gt;&lt;/td&gt;&lt;td&gt;13,00 km&lt;/td&gt;&lt;td&gt;35m-55m&lt;/td&gt;&lt;td&gt;The most fun. 🚧&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&#34;../files/posts/2024-05-31_campus_aula_dei_en_bici/Azud---Campus-%28margen-izq.-G%C3%A1llego%2C-asfalto%29.gpx&#34;&gt;Azud - Campus (left bank of Gállego, asphalt)&lt;/a&gt;&lt;/td&gt;&lt;td&gt;12,05 km&lt;/td&gt;&lt;td&gt;35m-50m&lt;/td&gt;&lt;td&gt;In my opinion the best option, offers a good balance between speed, few cars, bike cleanliness, and the possibility to finish entirely on asphalt.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&#34;../files/posts/2024-05-31_campus_aula_dei_en_bici/Azud---Campus-%28margen-izq.-G%C3%A1llego%2C-caminos%29.gpx&#34;&gt;Azud - Campus (left bank of Gállego, rural paths)&lt;/a&gt;&lt;/td&gt;&lt;td&gt;11,73 km&lt;/td&gt;&lt;td&gt;35m-50m&lt;/td&gt;&lt;td&gt;Parallel to the previous one, without cars but it dirties the bike more. 🚧&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&#34;../files/posts/2024-05-31_campus_aula_dei_en_bici/Azud---Campus-%28todo-asfalto%29.gpx&#34;&gt;Azud - Campus (all asphalt)&lt;/a&gt;&lt;/td&gt;&lt;td&gt;13,08 km&lt;/td&gt;&lt;td&gt;35m-55m&lt;/td&gt;&lt;td&gt;It has a section shared with road traffic from Montañanesa to the entrance of Camino el Saso.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&#34;../files/posts/2024-05-31_campus_aula_dei_en_bici/Azud---Campus-%28todo-asfalto-2%29.gpx&#34;&gt;Azud - Campus (all asphalt 2)&lt;/a&gt;&lt;/td&gt;&lt;td&gt;12,12 km&lt;/td&gt;&lt;td&gt;35m-50m&lt;/td&gt;&lt;td&gt;It has a section shared with road traffic from Santa Isabel to Montañana.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&#34;../files/posts/2024-05-31_campus_aula_dei_en_bici/Azud---Campus-%28todo-asfalto-3%29.gpx&#34;&gt;Azud - Campus (all asphalt 3)&lt;/a&gt;&lt;/td&gt;&lt;td&gt;13,02 km&lt;/td&gt;&lt;td&gt;35m-55m&lt;/td&gt;&lt;td&gt;There is only a small section along the Montañana road but have a shoulder.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;The emoji 🚧 in the observations of some routes in the table means that you have to cross the aqueduct over the Urdán canal. This is the aqueduct in the photo. It can be a bit tricky to pass with the bike, especially when it&#39;s carrying water or wet, as it becomes slippery and it is narrow. If it&#39;s not clear, you can cross to the other side of the canal via a level crossing further ahead, about 400m away.&lt;/p&gt;&lt;p&gt;&lt;img alt=&#34;Aqueduct over the Urdán canal&#34; src=&#34;../images/posts/2024-05-31_campus_aula_dei_en_bici/acueducto_acequia_urdan.jpg&#34; /&gt;&lt;/p&gt;&lt;iframe width=&#34;100%&#34; height=&#34;300px&#34; frameborder=&#34;0&#34; allowfullscreen allow=&#34;geolocation&#34; src=&#34;https://umap.openstreetmap.fr/es/map/vias-zaragoza-campus-en-bicicleta_1071113?scaleControl=false&amp;miniMap=false&amp;scrollWheelZoom=false&amp;zoomControl=true&amp;editMode=disabled&amp;moreControl=true&amp;searchControl=null&amp;tilelayersControl=null&amp;embedControl=null&amp;datalayersControl=true&amp;onLoadPanel=none&amp;captionBar=false&amp;captionMenus=true&#34;&gt;&lt;/iframe&gt;&lt;p&gt;&lt;a href=&#34;https://umap.openstreetmap.fr/es/map/vias-zaragoza-campus-en-bicicleta_1071113?scaleControl=false&amp;miniMap=false&amp;scrollWheelZoom=true&amp;zoomControl=true&amp;editMode=disabled&amp;moreControl=true&amp;searchControl=null&amp;tilelayersControl=null&amp;embedControl=null&amp;datalayersControl=true&amp;onLoadPanel=none&amp;captionBar=false&amp;captionMenus=true&#34;&gt;Full screen view&lt;/a&gt;&lt;/p&gt;</description><link>https://apuntes.eduardofilo.es/en/2024-05-31_campus_aula_dei_en_bici.html</link> <pubDate>Fri, 31 May 2024 08:00:00 +0200</pubDate><source url="https://apuntes.eduardofilo.es/rss.xml">Apuntes de eduardófilo</source><guid isPermaLink="true">https://apuntes.eduardofilo.es/en/2024-05-31_campus_aula_dei_en_bici.html</guid> <enclosure url="https://apuntes.eduardofilo.es/images/posts/2024-05-31_campus_aula_dei_en_bici/peloton.jpg" type="image/jpeg" length="259405" /> </item> </channel></rss>