index.html (8276B)
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 5 <meta name="viewport" content="width=device-width, initial-scale=1" /> 6 <title>Del emulador de terminal urxvt</title> 7 <link rel="icon" type="image/png" href="/favicon.png" /> 8 <link rel="stylesheet" type="text/css" href="../article.css" /> 9 </head> 10 <body> 11 <header> 12 <p class="title">Del emulador de terminal urxvt</p> 13 <p class="date">20 de julio de 2024 • fjbalon</p> 14 </header> 15 <p>El emulador de terminal es el programa que proporciona una interfaz de texto que imita el comportamiento de una terminal hardware-física, de tal forma que el usuario interactúe con el sistema operativo mediante la ejecución de comandos. Generalmente, los entornos de escritorio ofrecen su propia versión, vitaminada y adaptada al funcionamiento general del ecosistema gráfico. Así, el vulgo usará las clásicas como la terminal de Gnome o la de KDE.</p> 16 <p>Sin embargo, existen terminales de uso menos frecuente; al menos en un uso más profundo; tanto en recursos del sistema, personalización, eficiencia, velocidad... Que es necesario conocer.</p> 17 <p>En mi caso concreto, utilizo regularmente xterm, urxvt y st, siendo el segundo el que nos ocupa en éste artículo.</p> 18 <p>urxvt (ó rxvt-unicode); o en adelante urxvtd como me gusta denominarla, es un emulador de terminal customizable bifurcado de rxvt, añadiendo soporte para extensiones perl. Es uno de los emuladores más conocidos del cosmos Unix, especialmente por en Unixporn por su alta configurabilidad estética. Además, es un emulador muy ligero y muy rápido.</p> 19 <p>Sin embargo, la característica que me hizo decantarme por ella hace ya varios años, es sin lugar a dudas su capacidad de terminal demonizable.</p> 20 <p>Esto significa que puede correr en modo demonio (daemon), lo que permite compartir una única instancia de terminal entre múltiples ventanas, reduciendo el uso de memoria y mejorando el rendimiento. En palabras más técnicas, ejecutaríamos una instancia o demonio en segundo plano, que serviría como servidor de <emb>urxvtd</emb>, al que los clientes de <emb>urxvtc</emb> se conectan como hijos, en lugar de crear cada uno un nuevo proceso completo de <emb>urxvt</emb>.</p> 21 <p>Ejecutarlo es tan sencillo como usar el comando:</p> 22 <pre><code>urxvtd</code></pre> 23 <p>Y posteriormente, por cada terminal a ejecutar:</p> 24 <pre><code>urxvtc</code></pre> 25 <p>Lo que hago para automatizar esto, es añadir al <emb>.xinitrc</emb> la ejecución de <emb>urxvtd &</emb>, y en el gestor de ventanas indico que la ejecución de terminal se hace mediante <emb>urxvtc</emb>. Tan simple como esto.</p> 26 <pre><code>init(1)─┬─urxvtd(1234)─┬─urxvtc(5678) 27 │ ├─urxvtc(5679) 28 │ └─urxvtc(5680)</code></pre> 29 <p>Como terminal íntimamente ligada al servidor X, que sirve como reemplazo de <emb>xterm</emb>, su configuración estética se realiza mediante los ficheros de configuración utilizados por <emb>X Windows System</emb> para definir los recursos y ajustes de las aplicaciones X, es decir, <emb>~/.Xresources</emb> y <emb>~/.Xdefaults</emb>.</p> 30 <p>De entre ambos, utilizo <emb>.Xresources</emb> por su flexibilidad, ya que permite actualizar configuraciones sobre la marcha sin necesidad de actualizar el servidor; en comparación con <emb>.Xdefault</emb> que es estático. El primero, se carga específicamente mediante el comando <emb>xrdb</emb>, permitiendo una carga condicional y específica de los recursos. Personalmente añado al <emb>.xinitrc</emb>:</p> 31 <pre><code>xrdb -merge ~/.Xresources</code></pre> 32 <p>Para cargar la configuración. Mientras que si emplease el segundo, se carga automáticamente al iniciar la aplicación X, siendo que no se aplica para las aplicaciones en ejecución; y puede requerir un reinicio de todo el servidor X para que los cambios surtan efecto.</p> 33 <p>He aquí ejemplos de parametrización estética y funcional empleadas por mí:</p><ul> 34 <li>Fuente<pre><code>URxvt*font: xft:inconsolata:size=9:antialias=true</code></pre></li> 35 <li>Colores 36 <p>El uso del color de fondo y de letra se realiza mediante:</p> 37 <pre><code>URxvt*background: #000000 38 URxvt*foreground: #f7f7f7</code></pre> 39 <p>De tal modo que el fondo negro puro contraste con un blanco no demasiado brillante. Por otro lado, la paleta de colores:</p> 40 <pre><code>!black 41 URxvt*color0: #101010 42 URxvt*color8: #404040 43 !red 44 URxvt*color1: #e5211d 45 URxvt*color9: #ad3430 46 !green 47 URxvt*color2: #77a026 48 URxvt*color10: #94db43 49 !yellow 50 URxvt*color3: #d2dd30 51 URxvt*color11: #ddef56 52 !blue 53 URxvt*color4: #2e97ba 54 URxvt*color12: #77c6e5 55 !magenta 56 URxvt*color5: #c42b7f 57 URxvt*color13: #ef6bd5 58 !cyan 59 URxvt*color6: #25b1c6 60 URxvt*color14: #70e0ef 61 !white 62 URxvt*color7: #dddddd 63 URxvt*color15: #ffffff 64 </code></pre> 65 <p>De tal forma que mantengo una coherencia colorestética de mi agrado. El resultado, es algo como:</p> 66 <div style="display: flex; flex-wrap: wrap; justify-content: center; align-items: center; margin: 0;"> 67 <div style="width: 50px; height: 50px; background-color: #101010;"></div> 68 <div style="width: 50px; height: 50px; background-color: #404040;"></div> 69 <div style="width: 50px; height: 50px; background-color: #e5211d;"></div> 70 <div style="width: 50px; height: 50px; background-color: #ad3430;"></div> 71 <div style="width: 50px; height: 50px; background-color: #77a026;"></div> 72 <div style="width: 50px; height: 50px; background-color: #94db43;"></div> 73 <div style="width: 50px; height: 50px; background-color: #d2dd30;"></div> 74 <div style="width: 50px; height: 50px; background-color: #ddef56;"></div> 75 <div style="width: 50px; height: 50px; background-color: #2e97ba;"></div> 76 <div style="width: 50px; height: 50px; background-color: #77c6e5;"></div> 77 <div style="width: 50px; height: 50px; background-color: #c42b7f;"></div> 78 <div style="width: 50px; height: 50px; background-color: #ef6bd5;"></div> 79 <div style="width: 50px; height: 50px; background-color: #25b1c6;"></div> 80 <div style="width: 50px; height: 50px; background-color: #70e0ef;"></div> 81 <div style="width: 50px; height: 50px; background-color: #dddddd;"></div> 82 <div style="width: 50px; height: 50px; background-color: #ffffff;"></div> 83 </div> 84 </li> 85 <li>Activado buffer interno, lo que puede mejorar el rendimiento al reducir el parpadeo de la pantalla.<pre><code>URxvt*buffered: true</code></pre></li> 86 <li>Parpadeo del cursor en la terminal.<pre><code>URxvt*cursorBlink: true</code></pre></li> 87 <li>Color de subrayados.<pre><code>URxvt*underlineColor: yellow</code></pre></li> 88 <li>Profundidad de color de la ventana a 32 bits<pre><code>URxvt*depth: 32</code></pre></li> 89 <li>Sin bordes externos y definimos el tamaño del borde interno (margen) en píxeles. El valor por defecto es 3.<pre><code>URxvt*borderless: 1 90 URxvt.internalBorder: 20</code></pre></li> 91 <li>Desactivada barra estética de desplazamiento y mantenemos el estilo tradicional de urxvt<pre><code>URxvt*scrollBar: false 92 URxvt.scrollStyle: rxvt</code></pre></li> 93 <li>Hace que urxvt inicie un shell de login, que leerá los archivos de inicialización específicos de login del shell.<pre><code>URxvt*loginShell: true</code></pre></li> 94 <li>Habilita el desplazamiento con Shift-PageUp/PageDown, útil cuando se usa screen o tmux.<pre><code>Urxvt*secondaryScroll: true</code></pre></li> 95 <li>Definida a 5000 el número de líneas que se guardan en el historial de desplazamiento.<pre><code>URxvt*saveLines: 5000</code></pre></li> 96 <li>Establece el nombre del terminal (valor de $TERM), que es importante para la compatibilidad con aplicaciones que detectan el tipo de terminal.<pre><code>URxvt*termName: rxvt-unicode</code></pre></li> 97 <li>Habilita extensiones Perl comunes, incluyendo la detección de URLs (<emb>matcher</emb>), manejo del portapapeles (<emb>clipboard</emb>), y la copia de selecciones al portapapeles (<emb>selection-to-clipboard</emb>).<pre><code>URxvt.perl-ext-common: default,matcher,clipboard,selection-to-clipboard</code></pre></li> 98 <li>Definimos Firefox como el navegador a llamar al clickar una url y especificamos el botón del ratón (1 es el botón izquierdo) que debe ser utilizado para llamar al click.<pre><code>URxvt.urlLauncher: firefox 99 URxvt.matcher.button: 1</code></pre></li> 100 </ul> 101 </body> 102 </html>