Google Cloud Print en ArchLinux vía CUPS

image host

A pesar de que no es algo nuevo, no había tenido la oportunidad de probar Google Cloud Print, y ahora que lo hice, estoy seguro que es algo que estaré usando con extrema frecuencia practicamente todos los días.

Al principío me frustró el hecho de que en ArchLinux tenía que usar necesariamente Google Chrome para imprimir con esta tecnología, y tampoco quería tener que entrar su web para subir los archivos que necesitaba imprimir, así que investigando descubrí la existencia de un driver para CUPS, el cual puede instalarse fácilmente pues ofrece repositorios para las distros principales, ¡incluyendo a ArchLinux!

Dicho ésto, sólo debemos editar nuestro /etc/pacman.conf y agregar:

[niftyrepo]
Server = https://niftyrepo.niftiestsoftware.com/arch
SigLevel = Required TrustAll

Entonces, ejecutamos:

pacman -Syu cupscloudprint

Nos pedirá que aceptemos su llave PGP (2048R/C5541D9D), ¡háganlo!

Luego, ejecutamos su script de configuración (sigan sus instrucciones):

/usr/share/cloudprint-cups/setupcloudprint.py

¡Eso es todo! Más sencillo imposible.

Cabe aclarar, que para que todo lo anterior funcione, debemos previamente tener configurado Google Print Cloud.

Finalmente, si no usas ArchLinux, puedes seguir las intrucciones correspondientes para otras distros.

Share

Urxvt y la nueva extensión selection-to-clipboard

Nota » Este post es básicamente un complemento al previo “Copiando y Pegando texto entre Vim y X Window“.

Un poco de background: Hace tiempo que no uso Openbox (tengo meses con KDE), y hoy me dispuse a usarlo nuevamente, así como algunas aplicaciones ligeras, en particular Urxvt. Entonces, surge de nuevo un problema al usar el portapapeles (clipboard). Me explico a continuación…

X Server tiene 3 “portapapeles” (selection buffers): PRIMARY, SECONDARY y CLIPBOARD. El denominado PRIMARY es el que guarda el texto de la selección actual, cuyo contenido se accede para “pegarlo” usando el botón medio del mouse. Por otro lado, CLIPBOARD es usado principalmente por las aplicaciones para copiar la selección de texto de manera explícita, normalmente con los atajos de teclado Ctrl-c, Ctrl-x, Ctrl-v. El problema es que, de manera “natural”, Urxvt usa PRIMARY para su copiado y pegado, y si voy a usar esta terminal, usar el mouse no es lo óptimo.

La solución a este “contratiempo”, ha sido por mucho tiempo el uso de extensiones o scripts de terceros, pero hoy investigando un poco, me entero que la última versión de Urxvt, la 9.20 (liberada el 26 de abril del presente año 2014, o sea, hace poco más de un mes), ya incluye una extensión propia, llamada selection-to-clipboard, que soluciona el problema mencionado, además de que ahora también permite el uso de los atajos de teclado Ctrl-Meta-c y Ctrl-Meta-v.

Para habilitar esta nueva extensión, agregar al archivo ~/.Xresources lo siguiente:

URxvt.perl-ext: ... , selection-to-clipboard , ...

Finalmente, no olvidar cargar nuevamente la configuración:

xrdb ~/.Xresources

¡Eso es todo! :-)

Share

Solucionar problemas al actualizar a Apache 2.4 en ArchLinux

¡Ha llegado Apache 2.4 a ArchLinux! Es un cambio importante y requiere nuestra intervención manual para hacer que nuestro servidor LAMP vuelva a funcionar sin problemas.

Con la actualización, tenemos nuevos archivos httpd.conf, php.ini y magic, por lo que primero debemos hacer un respaldo de nuestros viejos archivos:

sudo mv /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.old
sudo mv /etc/httpd/conf/magic /etc/httpd/conf/magic.old
sudo mv /etc/php/php.ini /etc/php/php.ini.old

Entonces, renombramos los nuevos archivos:

sudo mv /etc/httpd/conf/httpd.conf.pacnew /etc/httpd/conf/httpd.conf
sudo mv /etc/httpd/conf/magic.pacnew /etc/httpd/conf/magic
sudo mv /etc/php/php.ini.pacnew /etc/php/php.ini

Apache viene con una serie de Módulos de MultiProcesamiento (Multi-Processing Modules o MPMs) que son responsables de conectar con los puertos de red de la máquina, acceptar las peticiones, y generar los procesos hijo que se encargan de servirlas. En el “nuevo” Apache 2.4 se usa el event MPM (previamente se usaba el prefork, que era más lento y consumía más memoria), que proporciona escalabilidad y buen soporte para alto tráfico de sitios web.

Por lo anterior, hay dos posibles soluciones: Volver a habilitar el prefork, o hacer los cambios necesarios para que el event MPM funcione adecuadamente.

Solución 1: Regresar a mod_mpm_prefork

Si no quieres romperte la cabeza con la migración a las novedades de Apache 2.4, lo que necesitas es volver a habilitar mod_mpm_prefork. Para ello, vamos a abrir el archivo /etc/httpd/conf/httpd.conf

sudo vim /etc/httpd/conf/httpd.conf

… y ahí, reemplazaremos la línea

LoadModule mpm_event_module modules/mod_mpm_event.so

con

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

Además, debemos incluir dos líneas adicionales, muy conocidas por nosotros. La primera debemos colocarla en la lista de carga de módulos (LoadModule list) después de LoadModule dir_module modules/mod_dir.so:

LoadModule php5_module modules/libphp5.so

La segunda, al final de la lista de configuraciones adicionales (Include list):

Include conf/extra/php5_module.conf

Y reiniciamos Apache para reflejar los cambios:

sudo systemctl restart httpd.service

Solución 2: Usar el nuevo mod_mpm_event

Si queremos aprovechar todas las bondades y novedades de Apache 2.4, ésta es la solución que debemos seguir.

Como primer paso, vamos a instalar php-fpm desde los repos oficiales:

sudo pacman -S php-fpm

Adicionalmente, instalaremos mod_proxy_handler desde AUR (esperemos que pronto lo agreguen a los repos oficiales):

yaourt -S mod_proxy_handler

En el archivo /etc/php/php-fpm.conf, descomentar la línea (quitar ; del principio):

listen = 127.0.0.1:9000

y comentar la línea (agregar ; al principio):

listen = /run/php-fpm/php-fpm.sock

En el mismo archivo, también debemos descomentar la línea:

listen.allowed_clients = 127.0.0.1

En el archivo /etc/httpd/conf/httpd.conf, agregar al final:

LoadModule proxy_handler_module modules/mod_proxy_handler.so
<FilesMatch \.php$>
    SetHandler "proxy:fcgi://127.0.0.1:9000/"
</FilesMatch>
<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

Finalmente, en el archivo /etc/php/php.ini debemos asegurarnos de que la siguiente línea está habilitada (descomentada):

cgi.fix_pathinfo=1

Reiniciar los daemons involucrados:

sudo systemctl restart php-fpm.service
sudo systemctl restart httpd.service

¿Y MySQL / MariaDB? Al usar el nuevo archivo php.ini, debemos volver a decirle a PHP de la existencia del servidor de base de datos. Vamos a abrir el archivo /etc/php/php.ini con tu editor favorito …

sudo vim /etc/php/php.ini

… y descomentar (eliminar el ; al inicio) las siguientes líneas:

extension=mysqli.so
extension=mysql.so
extension=pdo_mysql.so

Finalmente, reiniciemos Apache y MariaDB para aplicar los cambios realizados.

sudo systemctl restart httpd.service
sudo systemctl restart mysqld.service

Fuentes: 1, 2, 3.

Share

Bash Script Magic

Si algo hace a Linux poderoso es el manejo adecuado de la terminal, y cuando se usan bash scripts la magia se hace presente. Es por ello, que he querido compartir con ustedes algunos de esos scripts que uso día con día, estoy seguro a más de uno le serán útiles.

Cabe mencionar que todos los scripts abajo mencionados se aplican a todos los archivos (del tipo en cuestión respectivamente) del directorio actual.

Convertir imágenes PNG en JPG

Para este script (y el siguiente) es necesario tener instalado imagemagick.

#!/bin/bash
for file in *.png; do
    convert "$file" "${file%.png}.jpg"
    rm "$file"
done

Redimensionar imágenes JPG

#!/bin/bash
for f in *.jpg; do convert $f -resize 1024 $f; done;

El número 1024 representa en nuevo ancho (width) de la imagen, pueden cambiarlo obviamente.

Convierte archivos de texto de ISO-8859-1 a UTF-8

#!/bin/bash
for file in *.srt; do
    iconv -f ISO-8859-1 -t utf-8 "$file" -o "${file%.srt}.utf8.srt"
    rm "$file"
done
rename .utf8.srt .srt *.utf8.srt

En este caso particular, estoy indicando el uso de archivos SRT (.srt), utilizados como subtítulos en videos, que normalmente se encuentran en la web en formato ISO-8859-1.

¿Cómo saber qué formato tienen tus archivos? Usa el comando file:

file *.srt

Convertir archivos de subtítulos SRT a SSA

Para este script, es necesario tener ffmpeg instalado.

#!/bin/bash
for file in *.srt; do
    ffmpeg -v quiet -i "$file" "${file%.srt}.ssa"
done

Tener los subtítulos en SSA tiene algunos beneficios (más delante menciono uno de ellos).

Crear video MKV a partir del video MP4 y del subtítulo SRT

Para los últimos scripts, es necesario tener instalado MKVToolNix (en ArchLinux » mkvtoolnix-cli)

#!/bin/bash
for video in *.mp4; do
    mkvmerge -o "${video%.mp4}.mkv" \
        --forced-track 0:no --compression 0:none --language 1:eng \
        --forced-track 1:no --compression 1:none -a 1 -d 0 -S -T \
        --no-global-tags --no-chapters "(" "$video" ")" --language 0:spa \
        --forced-track 0:no --compression 0:none -s 0 -D -A -T \
        --no-global-tags --no-chapters "(" "${video%.mp4}.srt" ")" \
        --track-order 0:0,0:1,1:0 --clusters-in-meta-seek \
        --engage no_cue_duration --engage no_cue_relative_position
done

Nota: Los subtítulos ya deben estar en UTF-8 (usar script arriba mencionado).

Este script (y el siguiente) tienen opciones adicionales para que los videos MKV sean compatibles con la mayoría de los reproductores de DVD / Bluray caseros.

Crear video MKV a partir del video MP4 y de los subtítulos SRT y SSA

#!/bin/bash
for video in *.mp4; do
    mkvmerge -o "${video%.mp4}.mkv" \
        --language 0:eng --default-track 0:yes --forced-track 0:no --compression 0:none \
        --language 1:eng --default-track 1:yes --forced-track 1:no --compression 1:none \
        -a 1 -d 0 -S -T --no-global-tags --no-chapters "(" "$video" ")" \
        --language 0:spa --default-track 0:yes --forced-track 0:no --compression 0:none \
        -s 0 -D -A -T --no-global-tags --no-chapters "(" "${video%.mp4}.srt" ")" \
        --language 0:spa --default-track 0:no --forced-track 0:no --compression 0:none \
        -s 0 -D -A -T --no-global-tags --no-chapters "(" "${video%.mp4}.ssa" ")" \
        --track-order 0:0,0:1,1:0,2:0 --clusters-in-meta-seek \
        --engage no_cue_duration --engage no_cue_relative_position
done

El video MKV resultante con este último script, pueden abrirlo en HandBrake y crear un video MP4 redimensionado y con los subtítulos pegados (¡gracias al uso de SSA!), para que puedan verlo en cualquier dispositivo móvil (por ejemplo, en mi ZTE Open con Firefox OS los veo con una resolución 480×320 perfectamente bien).

Share

Inminente llegada del Kernel 3.13 a ArchLinux, ahora con soporte modular para PS/2

Teclado PS/2 en ArchLinux

Luego de una buena espera, el Kernel Linux 3.13 está a unas horas de llegar al repo [core] de ArchLinux, pero los desarrolladores nos avisan de un detallito que podría ocasionar problemas en algunos equipos: Ahora el soporte para teclados (keyboards) y ratones (mouse) con interfaz PS/2 será modular, o sea, ya no formará parte predeterminada del kernel.

¿Aún usas algún dispositivo de entrada PS/2? ¡Yo sí! ¿Qué debemos hacer? Antes que nada, no hay que dejar que panda el cúnico (como diría el gran Chespirito, ¡que casualmente hoy cumple 85 años!), sólo basta seguir los siguientes pasos:

  1. ¡Aún no actualices al nuevo kernel! Si lo haces, luego del reboot no podrás acceder a tu teclado o mouse PS/2.
  2. Antes que nada, cerciórate que en la línea HOOKS= del archivo /etc/mkinitcpio.conf tienes agregado keyboard. Si no es así, agrégalo, guarda el archivo (necesitas ser root), y ejecuta mkinitcpio -P.
  3. Ejecuta el siguiente comando:
    dmesg -t | grep '^i8042'
  4. Si aparece un mensaje que diga: “i8042: PNP: No PS/2 controller found. Probing ports directly.“, entonces debes agregar atkbd a la línea MODULES= en el archivo mkinitcpio.conf y ejecutar mkinitcpio -P.
  5. Si luego de reiniciar, aún no tienes acceso a tus dispositivos PS/2, debes agregar earlymodules=atkbd modules-load=atkbd a tu línea del kernel en tu bootloader instalado (GRUB, Syslinux, etc).

Eso es todo, no es un procedimiento complicado, pero repito: Si tienes un teclado o mouse PS/2, DEBES verificar el procedimiento mencionado ANTES de actualizar al Kernel Linux 3.13 (el cual debe llegar en unas pocas horas al repo [core] de ArchLinux).

Share

Opera para Linux ha muerto :-(

Opera para Linux ha muerto

Hace unos momentos leía el post oficial sobre la liberación de la versión 19 del navegador web Opera, y con tristeza volvía a confirmar que aún no sacaban una versión para Linux. La esperanza aún seguía viva.

Sin embargo, minutos después el colega @Zagurito de PortalLinux, me informaba de una pésima noticia: Opera para Linux ha muerto :-(

La noticia publicada por Andreas Tolfsen (ex trabajador en Opera, como podemos corroborar en su website), dice textualmente:

At my previous employer, a small browser vendor that decided to abandon its own rendering engine and browser stack, I stopped using our product because Linux wasn’t a priority. Numerous reasons were given, such as low market share, “only geeks use it”, all journalists use Macs, &c.

This was to the point of ridiculing the platform and the people working on it, frequently citing “Linux jokes” such as “you’ll probably have to recompile your kernel first” whenever the question was seriously raised about when we’d start at least getting the core libraries working.

And when I say it wasn’t a priority, I mean that we didn’t even have something that was in a compilable state. A few people had started fixing up the broken code to get something that would compile on Linux in their own free time. After a few weeks of hacking, they were told by management to stop what they were doing and instead focus their volunteer efforts on the project goals, being to ship a Windows and Mac version.

So the company began the process of forcefully moving developers who’d worked on Linux for over 15 years to platforms they felt uncomfortable and unproductive working on.

This is a much longer tale, but it tells the story of a company alienating not only their loyal user base, but also a significant proportion of their own developers. The result? Lack of motivation and resignations.

Well done.

Ustedes, los lectores de este humilde blog, saben de mi gusto por Opera, he escrito sobre él bastante, y me entristece mucho esta noticia. A partir de hoy para mí, Opera se va al basurero de recuerdos tristes, donde le hará compañía a IE.

Share

Copiando y Pegando texto entre Vim y X Window

Vim LogoUna de las cosas más frustrantes con las que me encontré hace mucho tiempo, al conocer Vim, es el dolor de cabeza que implicaba el copiar/cortar y pegar texto desde Vim a cualquier otra aplicación bajo X Window en Linux, y viceversa. Recuerdo haber instalado varios plugins, haber configurado de diversas maneras URxvt para lograr el objetivo, pero ninguna de estas “soluciones” me dejaba satisfecho.

Hace apenas pocas semanas, por fin me decidí a usar exclusivamente Vim para toda edición de texto (luego de varios intentos frustrados en el pasado), y todos los días Vim me sorprende con su poder, cada día descubro algo nuevo… pero había dejado pendiente el detalle arriba mencionado. Hoy por fin me puse a investigar más a fondo, y no paro de reirme de lo sencillo que es solucionar el bendito problema, ¡sin plugins ni trucos raros!

Primer problema: ¡Vim no tiene soporte para xterm_clipboard!

Dentro de Vim, ejecuta

:version

En la salida se muestran todas las opciones con las que Vim ha sido compilado, algunas precedidas con “+” (opción habilitada) y otras con “-” (opción no habilitada). La opción que nos interesa en este caso, es xterm_clipboard, ¿tienes “+” o “-” en ella? Si tienes “+”, ¡no tienes nada de qué preocuparte!. ¿Tienes “-“? Entonces lo lógico es que debes compilar Vim con dicha opción.

¿Odias compilar a mano? La mayoría lo hacemos, no te apures, ¿y entonces? ¡Hay una solución sencilla! En vez de tener instalado el paquete vim, ¡instala el paquete gvim! Con Gvim instalado, aún puedes ejecutar Vim en la terminal, ¡y ya incluye el soporte a xterm_clipboard!

Segundo problema: ¡Nunca recuerdo usar el registro +!

Vim usa registros para almacenar texto, y el registro + es el usado para compartir texto desde y para X Window (sea cual sea el entorno de escritorio que estés usando). O sea, para copiar texto deberíamos usar "+y y para pegar texto el respectivo "+p, ¡lo cual es muy común de olvidar!, ya que estamos muy acostumbrados a sólo usar y y p para ello.

¿La solución? Si usas una versión reciente de Vim (7.3.74 en adelante), ¡estás de suerte!, basta con agregar lo siguiente a tu ~/.vimrc para crear un alias entre ambos registros:

set clipboard=unnamedplus

¡Eso es todo! ¡No más dolores de cabeza al copiar, cortar y pegar texto entre Vim y las aplicaciones de tu entorno de escritorio favorito!

Share

The Original Hacker: Jugando con la Inteligencia

The Original Hacker

Vaya sorpresa que nos dió mi amiga Eugenia Bahit el día de hoy, presentando su nuevo proyecto The Original Hacker: Jugando con la Inteligencia, una revista mensual en formato PDF, sobre temas que interesarán a todo verdadero hacker.

Si no conocen a Eugenia, les puedo comentar que es argentina, Arquitecta de Software y hacker especializada en tecnologías GLAMP (GNU/Linux, Apache, MySQL, Python y PHP) y eXtreme Programming; además, es la fundadora de Hackers & Developers Magazine.

Para no sonar repetitivo, los invito a leer el anuncio oficial en Debian Hackers de la mano de la propia Eugenia, para que tengan una idea más exacta del genial contenido que veremos mes a mes.

¿Qué esperas? ¡Descarga ya el No. 1 de The Original Hacker!

Share

¿Copia lenta de archivos a memorias USB?

Algo que me encanta de ArchLinux es que cada vez que me enfrento a un problema, siempre encuentro información al respecto en la wiki y/o en los foros; desde el primer día en que empecé a utilizar esta maravillosa distro, todos los días he aprendido algo nuevo… y esta ocasión no es la excepción.

El problema: Pobre desempeño al copiar o mover archivos (en particular los “pesados”, pero no es exclusivo) a una memoria USB o pendrive, en especial al usar KDE (de nuevo, el Desktop Environment tampoco es exclusivo).

La solución: En la wiki se menciona un procedimiento, pero editando el archivo /etc/rc.local, el cual sabemos ya no existe con la llegada de systemd, así que tuve que “modernizarlo” basándome en un par de guías. El resultado a continuación.

Paso 0

No usen sudo para crear/editar los archivos de los pasos siguiente, mejor entren al usuario root con el comando su -:

[gespadas@localhost ~]$ su -
Contraseña: ******
[root@localhost ~]#

Ahora si, pueden seguir leyendo.

Paso 1

Vamos a crear el archivo /etc/tmpfiles.d/disable-hugepage.conf (realmente puede llamarse como gusten). Para ello usaré:

vim /etc/tmpfiles.d/disable-hugepage.conf

¿No les gusta vim? ¡Muy mal! Ok ok, pueden usar el editor que deseen ;-)

Ahí, el contenido del archivo será el siguiente:

w /sys/kernel/mm/transparent_hugepage/enabled - - - - madvise
w /sys/kernel/mm/transparent_hugepage/defrag - - - - madvise
w /sys/kernel/mm/transparent_hugepage/khugepaged/defrag - - - - 0

Las primeras dos líneas están escribiendo el valor madvise al archivo indicado (algo como hacer un echo madvise > /sys/.../archivo), y la última línea hace lo mismo, pero escribiendo el valor 0.

No quiero profundizar en lo que significa lo anterior (¡lean las referencias que pongo!), pero brevemente les comento que estamos estableciendo durante el booteo (por eso usamos tmpfiles) los parámetros transparent hugepages y hugepage defragmentation del kernel.

Paso 2

Adicionalmente, editen el archivo /etc/sysctl.conf (ese si existe, su función es la de establecer parámetros del kernel en tiempo de ejecúción):

vim /etc/sysctl.conf

Y al final pongan lo siguiente:

kernel.shmmax=134217728
vm.dirty_background_bytes = 4194304
vm.dirty_bytes = 4194304

¿Por qué esos números? 134,217,728 bytes = 128 MB y 4,194,304 bytes = 4 MB.

¿Y por qué esos parámetros? Ayudan a reducir el efecto freeze en KDE.

¿Les da miedo editar un archivo que se mete directamente con el kernel? ¡Deberían! Es por eso que una solución más elegante, más acorde a la filosofía de systemd, es crear un archivo .conf dentro de la carpeta /etc/sysctl.d/ (similar a lo que hicimos en el paso 1). Por ejemplo, el archivo podría llamarse /etc/sysctl.d/disable-freeze.conf, cuyo contenido serían las tres líneas antes descritas.

Paso Extra

Si el desempeño mejoró, pero no lo suficiente, repitan el paso 1, pero usando el valor never en vez de madvise. ¡Atención! Hay efectos colaterales, y el más molesto es que la hibernación del sistema ya no funcionará.

Share