More HSP/HFP bluetooth headset woes (WH-XB700) [SOLVED]

Updated! In late 2022, GNOME, Ubuntu and Debian have switched to Pipewire as their default audio server. PipeWire solves many of the issues with Bluetooth hardware and codecs.
It has a compatibility layer for PulseAudio (pipewire-pulse), allowing existing applications to seamlessly benefit from PipeWire improvements.

I’ve been using pipewire along with the wireplumber session manager since version 0.3.x, so if you still have problems and haven’t switched to it, I highly recommend you to do so. There are many guides online, but this one from Baeldung is the best one IMHO.

This means that most of the information in this article is now obsolete, but I will keep it just for reference.

Well, I think you have seen the previous posts (below) where I rambled about connection problems with bluetooth headphones/headsets on Debian.

If you’ve already read it, be aware that they don’t reflect the current situation. I’ll elaborate…

After moving back to Debian Bullseye a few months ago, I was given (a delightful gift from a lovely person, I must say) a pair of Sony WH-XB700 headphones which are now working great on that platform, BUT be aware that you may run into some problems while setting them up.

This is my current configuration:

$ inxi -F
System: Host: hp-laptop Kernel: 5.10.0-11-amd64 x86_64 bits: 64 Desktop: Cinnamon 4.8.6
Distro: Debian GNU/Linux 11 (bullseye)
...
Audio: Device-1: Intel Sunrise Point-LP HD Audio driver: snd_hda_intel
Sound Server: ALSA v: k5.10.0-11-amd64
...
Bluetooth: Device-1: Intel Bluetooth wireless interface type: USB driver: btusb
Report: ID: hci0 state: up running bt-v: 2.1 address: [REDACTED]
...

$ apt list --installed bluez blueman pulseaudio pulseaudio-module-bluetooth
blueman/stable,now 2.1.4-1+b1 amd64 [installed]
bluez/stable,now 5.55-3.1 amd64 [installed,automatic]
pulseaudio-module-bluetooth/stable,now 14.2-2 amd64 [installed,automatic]
pulseaudio/stable,now 14.2-2 amd64 [installed]

After connecting the headphones, sound is great with the a2dp_sink [High Fidelity Playback (A2DP Sink)] profile. HOWEVER, while trying to switch to headset_head_unit [Headset Head Unit (HSP/HFP)] profile to use the built-in microphone for calls and meets, pulseaudio kept hanging, crashing and restarting with the following errors (hidden on pulseaudio’s journal):

$ journalctl --user -u pulseaudio   # run this as normal user
...
Mar 05 12:28:14 hp-laptop pulseaudio[1290]: q overrun, queuing locally
Mar 05 12:28:15 hp-laptop pulseaudio[1290]: q overrun, queuing locally
Mar 05 12:28:15 hp-laptop pulseaudio[1290]: q overrun, queuing locally
...

Also, bluetooth logs showed problems while trying to set up the audio AVCTP / AVRCP protocols:

# journalctl -u bluetooth   # run this as root user
...
Mar 05 12:28:42 hp-laptop bluetoothd[840]: Starting SDP server
Mar 05 12:28:42 hp-laptop bluetoothd[840]: Bluetooth management interface 1.18 initialized
Mar 05 12:28:42 hp-laptop bluetoothd[840]: profiles/audio/avctp.c:avctp_server_socket() setsockopt(L2CAP_OPTIONS): Invalid argument (22)
Mar 05 12:28:42 hp-laptop bluetoothd[840]: avrcp-controller: Protocol not supported (93)
Mar 05 12:28:42 hp-laptop bluetoothd[840]: profiles/audio/avctp.c:avctp_server_socket() setsockopt(L2CAP_OPTIONS): Invalid argument (22)
Mar 05 12:28:42 hp-laptop bluetoothd[840]: audio-avrcp-target: Protocol not supported (93)
Mar 05 12:28:42 hp-laptop bluetoothd[840]: profiles/sap/server.c:sap_server_register() Sap driver initialization failed.
Mar 05 12:28:42 hp-laptop bluetoothd[840]: sap-server: Operation not permitted (1)
Mar 05 12:28:45 hp-laptop bluetoothd[840]: Endpoint registered: sender=:1.50 path=/MediaEndpoint/A2DPSink/sbc
Mar 05 12:28:45 hp-laptop bluetoothd[840]: Endpoint registered: sender=:1.50 path=/MediaEndpoint/A2DPSource/sbc
Mar 05 12:29:03 hp-laptop bluetoothd[840]: Endpoint unregistered: sender=:1.50 path=/MediaEndpoint/A2DPSink/sbc
Mar 05 12:29:03 hp-laptop bluetoothd[840]: Endpoint unregistered: sender=:1.50 path=/MediaEndpoint/A2DPSource/sbc
Mar 05 12:29:03 hp-laptop bluetoothd[840]: Endpoint registered: sender=:1.83 path=/MediaEndpoint/A2DPSink/sbc
Mar 05 12:29:03 hp-laptop bluetoothd[840]: Endpoint registered: sender=:1.83 path=/MediaEndpoint/A2DPSource/sbc
...

Well, after a lot of headaches and dead ends, it turned out that some process (I haven’t figured out which one, yet) was stealthily switching off the ERTM (Enhanced ReTransmission Mode) and ESCO (Enhanced SCO) protocols of my Bluetooth stack.

So if you have a similar problem, verify that your stack does not have them disabled by looking at /sys/module/bluetooth/parameters/

# grep --color . /sys/module/bluetooth/parameters/disable_e*
/sys/module/bluetooth/parameters/disable_ertm:N
/sys/module/bluetooth/parameters/disable_esco:N

If you see a Y there, you might want to try re-enabling ERTM and ESCO by issuing the following commands:

echo N > /sys/module/bluetooth/parameters/disable_ertm
echo N > /sys/module/bluetooth/parameters/disable_esco
systemctl restart bluetooth

After doing that, switching to headset_head_unit profile should work fine and the headset can be used without any problem.

I’ll try to test the same setup with the new pipewire stack in the following days, but in the meantime, kudos to Juan Pablo Lassala for describing the proper solution to this tricky problem on pulseaudio issue tracker.

Support for HSP/HFP headset profiles on Ubuntu and Debian

Updated! In late 2022, GNOME, Ubuntu and Debian have switched to Pipewire as their default audio server. PipeWire solves many of the issues with Bluetooth hardware and codecs.
It has a compatibility layer for PulseAudio (pipewire-pulse), allowing existing applications to seamlessly benefit from PipeWire improvements.

I’ve been using pipewire along with the wireplumber session manager since version 0.3.x, so if you still have problems and haven’t switched to it, I highly recommend you to do so. There are many guides online, but this one from Baeldung is the best one IMHO.

This means that most of the information in this article is now obsolete, but I will keep it just for reference.

A few months ago I was given a “remote work toolset” that includes a bluetooth headset simply referred as “EC717”.

To be honest, they come in handy for me, because I was using the hands-free kit of my phone, and it is not the same in quality or comfort.

However, I found it impossible to get them to work on Ubuntu 20.04 and Debian 10, two of the platforms that I regularly use. They do work for listening to music, as A2DP profile, but they don’t work as a microphone for video calls, thus losing their main function. When trying to set the profile from a2dp_sink to headset_head_unit, I get this error:

W: [pulseaudio] module-bluez5-device.c: Refused to switch profile to headset_head_unit: Not connected

This issue is extensively documented in lots of bugs and pulseaudio tickets at bugs.freedesktop.org (93898, 9731673325) and in the new gitlab.freedesktop.org (84, 122, 742, 776, 960).

In short, there’s no complete support for the variety of HandSet Profile / Hands Free Profile / HSP&HFP profiles by which the audio and control channels are coordinated in Bluetooth. Actually there was support, but changes to the architecture of Bluez and PulseAudio made it disappear. And this affects some headsets that implement only one of these profiles.

Around 2017, James Bottomley coded support for those profiles in pulseaudio 11, 12 and 13, but unfortunately those patches were not incorporated into the stable branch of the pulseaudio library when he published them, and they were only added a few days ago, thus they are not available in current releases of modern distributions.

Fortunately, he segmented two branches of work in which he neatly documents the code changes in order to make this type of headsets work with pulseaudio 12 and pulseaudio 13, and from them I was able to modify and compile two versions of the pulseaudio-module-bluetooth package with HSP/HFP support for both Debian and Ubuntu:

By the way, and before you complain, according to the Bluetooth specification the HSP/HFP profile is single channel (mono) and in 8 khz (Volume 2, Section 6.12, of the Bluetooth Core 2.0 specification), so the audio quality is similar to that of a landline phone (well, that’s the spirit of HSP). In short, it sounds awful just like an analog phone. If you want to listen to music, use the A2DP profile, but with this profile it is not possible to use the headset as a microphone. Newer versions of the patch bring support for multiple codecs that improve audio quality, but of course these improvements are only available on newer, higher-quality hardware.

As for me, I also opted to make a passthru module using python3-bluez and pulseaudio virtual sources/sinks, in a script of about 600 lines, so as to communicate directly with the headset and pass the audio as new inputs and outputs on the pulseaudio stack, but the latency it added to the spoken voice made it unusable. Bottomley patches, on the other hand, worked great.

Finally, regarding code quality, if you’ve worked on SCSI, Secure Boot, TPMs and UEFI, then there is a very high probability that you’ve come across James code. So, James, cheers to you!

Soporte para headsets HSP/HFP en Ubuntu y Debian

¡Aviso! A finales de 2022, GNOME, Ubuntu y Debian cambiaron a Pipewire como su servidor de audio predeterminado. PipeWire resuelve muchos de los problemas con el hardware y los códecs de Bluetooth. Incluye una capa de compatibilidad con PulseAudio (pipewire-pulse), permitiendo que las aplicaciones existentes aprovechen las mejoras sin realizar cambios y sin inconvenientes.

Vengo usando pipewire junto con wireplumber session manager desde la versión 0.3.x, por lo que si aún está utilizando pulseaudio y sigue con problemas con bluetooth, la mejor opción es migrarlo. Hay muchas guías en línea, pero esta de Baeldung es IMHO la mejor.

Esto significa que la mayor parte de la información de este artículo es obsoleta, pero lo mantendré solo a fines de referencia.

Hace unos meses me obsequiaron un set de trabajo remoto que incluye unos auriculares bluetooth denominados simplemente “EC717”.

La verdad que me vienen muy bien, pues estaba utilizando el manos libres del celular, y no es lo mismo en calidad ni comodidad.

Sin embargo, encontré imposible hacerlos funcionar en Ubuntu 20.04 y en Debian 10, dos de las plataformas que utilizo habitualmente. En realidad sí funcionan para escuchar música, con el perfil A2DP, pero no funcionan como micrófono para videollamadas, con lo cual pierde bastante el sentido de ser un “set de trabajo remoto”. Al intentar establecer el perfil de a2dp_sink a headset_head_unit, obtengo este error:

W: [pulseaudio] module-bluez5-device.c: Refused to switch profile to headset_head_unit: Not connected

Este problema está documentado ampliamente en un montón de bugs y tickets de pulseaudio en bugs.freedesktop.org (93898, 9731673325) y en el nuevo gitlab.freedesktop.org (84, 122, 742, 776, 960)

Básicamente, no hay soporte completo para la variedad de HandSet Profile / Hands Free Profile / HSP&HFP profiles mediante los cuales se coordinan los canales de audio y control en Bluetooth. En realidad lo había, pero cambios en la arquitectura de Bluez y PulseAudio hicieron que desaparezcan. Y esto afecta de forma variada a algunos headset que implementan uno solo de dichos perfiles.

James Bottomley estuvo trabajando en 2017 en la incorporación de soporte para las versiones de pulseaudio 11, 12 y 13, pero lamentablemente esos parches no llegaron a incorporarse a la rama estable de la biblioteca pulseaudio cuando los publicó, y recién fueron incorporados hace pocos días, con lo cual no figuran ni de casualidad en las releases actuales de las distribuciones modernas.

Afortunadamente, él ha segmentado dos ramas de trabajo en las cuales marca prolijamente cuales son los cambios a incorporar para poder hacer andar este tipo de headsets con pulseaudio 12 y pulseaudio 13 , y a partir de ellos pude modificar y compilar dos versiones del paquete pulseaudio-module-bluetooth con soporte para HSP/HFP tanto en Debian como en Ubuntu:

Por cierto, y antes de que se quejen, el perfil HSP/HFP según la especificación Bluetooth es monocanal y en 8 khz (Volume 2, Section 6.12, de la especificación Bluetooth Core 2.0), por lo cual la calidad de audio es similar a la de un teléfono de línea (bueno, que en espíritu eso es HSP). En resumen, se escucha feo como en un teléfono analógico. Si quieren escuchar música, establezcan perfil A2DP, pero con ese perfil no es posible utilizar el headset como micrófono. Las versiones más nuevas del parche incorporan soporte para múltiples codecs que mejoran la calidad de audio, pero desde luego estas mejoras sólo están disponibles en hardware más moderno y de mejor calidad.

Por mi parte, también opté por hacer un passthru mediante python3-bluez y sources/sinks virtuales de pulseaudio, un script de unas 600 líneas, de forma tal de dialogar directamente con el headset y pasar el audio como entradas y salidas nuevas en el stack de la biblioteca de sonido, pero la latencia que incorporaba al sonido lo hacía inusable. Los parches de Bottomley, en cambio, funcionan perfecto.

Finalmente, respecto a la calidad del código, si estuvieron trabajando en cuestiones de SCSI, Secure Boot, TPMs y UEFI, hay una muy alta probabilidad de que estén utilizando y se hayan cruzado con código de James. Va mi agradecimiento por todos sus aportes.

Kernels nuevos en Debian Buster

Continuando con la serie de posts con versiones estables, en este artículo publico la última versión disponible del kernel de Linux, compilada, empaquetada y fácilmente instalable como .deb sobre cualquier sistema Debian GNU/Linux 10 Buster de 64 bits sin quilombo de dependencias.

En cada directorio encontrarán los paquetes con la imagen del kernel, los encabezados, el changelog y la configuración utilizada en la compilación, que está basada en la publicada de Debian.

Si les interesa saber qué hay de nuevo, les dejo el link al post sobre novedades del kernel en Phoronix y el clásico resumen hecho por la gente de KernelNewbies.

A medida que vayan saliendo nuevas versiones iré actualizando este pequeño “repositorio” para mantenerlo al día.

Kernel with KPTI and full Retpoline for Debian Stretch

Durante enero salieron a la luz –al menos para nosotros, simples mortales– las vulnerabilidades meltdown y spectre, que ya son ampliamente conocidas. Las mitigaciones tardaron en aparecer –y aún están trabajando en ello–, pero teniendo en cuenta que los bugs ya están siendo aprovechados in the wild, conviene tener a mano algunos parches para zafar.

Por ello aquí dejo el último kernel con los parches KPTI y full Retpoline, construido con un compilador compatible con -mindirect-branch, para ser instalado directamente sobre Debian GNU/Linux 9 Stretch:

Kernels nuevos en Debian Stretch

Actualización 2019: Este post ha quedado obsoleto. En Kernels nuevos en Debian Buster encontrarán núcleos compilados para la nueva versión estable de Debian.

Continuando con la serie de posts con versiones estables del kernel de Linux, dejo disponible la última versión que compilé en casa. Todas estas son directamente instalables sobre Debian GNU/Linux 9.0 Stretch de 64 bits sin quilombo de dependencias. Cada directorio contiene los paquetes con la imagen del kernel, los encabezados y la configuración utilizada en la compilación.

Si les interesa saber qué hay de nuevo, les dejo el link al post sobre novedades del kernel en Phoronix y el clásico resumen hecho por la gente de KernelNewbies.


Post instalación Debian GNU/Linux 9 (Stretch)

Más o menos cada dos años (aunque debería decir “when ready“) sale una nueva versión de la rama estable de Debian, y así fue el caso en junio del corriente, pues liberaron Debian 9 “Stretch”.
Para continuar la secuencia de recomendaciones post-instalación que inició con un post de Tomás, es buen momento de llevar mi humilde sugerencia de paquetes para obtener un escritorio usable en esta última versión.

Haciendo un copy-paste del post previo, éste tiene dos destinatarios principales:

  • para el que quiera tener una instalación de debian stretch (estable) usable, vale decir, con algunas aplicaciones más modernas que las que trae por defecto pero tratando de no salir demasiado de los repos oficiales;
  • y para mí, para no perder tiempo haciendo memoria en el caso de tener que reinstalar el sistema.

Y en la constante búsqueda de comodidad digital, cambio nuevamente de entorno de escritorio. Ahora el elegido es Cinnamon (las veces anteriores fueron GNOME y KDE) por tres cuestiones principales:

  • en primer lugar -y fundamentalmente- porque el explorador de archivos Nemo tiene árbol de directorios. Nautilus no lo tiene y eso lo hace inutilizable;
  • en segundo lugar, porque el entorno es estéticamente agradable y razonablemente liviano;
  • y finalmente, porque a diferencia de Mate, está hecho con GTK3 e integra adecuadamente la mayoría de las aplicaciones de escritorio.

Podría haber seguido utilizando KDE, la verdad es que está muy bien armado también, pero me di cuenta que sigo utilizando aplicaciones gtk (gedit, evince, meld) y pareció razonable el cambio.

Bueno, sin mas charla, vamos a lo que nos trae.

Paso 1

Esta instalación ocupará al menos 6 GB, por lo que tengan en cuenta cuanto desean dejar libre para los directorios de usuario y para el crecimiento/mantenimiento del sistema. Para comenzar, partimos de la instalación base de Debian Stretch. Para que se den una idea, hay que seguir la instalación tradicional y cuando presenta el uso que se dará (escritorio, servidor, etc) desmarcar todas las opciones y continuar normalmente.

Paso 2

Una vez instalado y hecho el primer arranque, luego de iniciar sesión lo que suelo hacer al toque es deshabilitar la opción de instalación de paquetes recomendados, puesto que pocas veces son necesarios y además engordan sobremanera el espacio ocupado por el sistema. Para ello basta con ejecutar la línea siguiente para que las próximas instalaciones eviten instalarlos.

echo "APT::Install-Recommends \"false\";" > \
    /etc/apt/apt.conf.d/90-powerup-disable-recommends.conf

Paso 3

Luego, sólo si están detrás de un proxy, hay varias formas de configurarlo: puede ser globalmente mediante las variables de entorno http_proxy y https_proxy o bien mediante la configuración de APT para aquellos casos donde dispongan de un servidor de caché como APT-Cacher. Por ejemplo:

PROXY="http://proxy.miorganizacion.com.ar:8080/"
export http_proxy=$PROXY
export https_proxy=$PROXY
echo "Acquire::http::Proxy \"$PROXY\";" > /etc/apt/apt.conf.d/90-powerup-proxy.conf

Paso 4

Verificar que están configurados los repositorios oficiales de la distribución. Para ello, el archivo /etc/apt/sources.list debería listar, al menos, los siguientes:

deb http://debian.unnoba.edu.ar/debian/ stretch main contrib non-free
deb http://security.debian.org/debian-security/ stretch/updates main contrib non-free
deb http://debian.unnoba.edu.ar/debian/ stretch-updates main contrib non-free
deb http://deb.debian.org/debian/ stretch-backports main contrib non-free

Aquí utilizo el mirror que cordialmente provee la UNNOBA pues gracias a la Asociación Redes de Interconexión Universitaria estamos a pocos saltos de distancia. Traten de no atosigarla de peticiones o utilicen cualquier otro de los mirrors listados oficialmente.

Paso 5

Agregar repositorios externos (no oficiales) que contienen software útil. Este paso es un tanto complejo pues a partir de Stretch es necesario incorporar las claves públicas para poder descargar software adicional. Además, algunas aplicaciones sólo están disponibles para arquitectura de 64 bits. Desde luego, tengan en cuenta que adicionar un repositorio no oficial implica confiar en lo que sus administradores publiquen allí.

Paso 5.1. Paquetes requeridos para las operaciones posteriores

apt install apt-transport-https ca-certificates gnupg wget

Paso 5.2. Instalar las claves públicas de los repositorios

El nombre final indica qué aplicación contiene cada repositorio. Las claves deben alojarse en el directorio siguiente:

cd /etc/apt/trusted.gpg.d/
wget -q https://dl.google.com/linux/linux_signing_key.pub -O- | gpg --dearmor > google-chrome.gpg
wget -q https://packages.microsoft.com/keys/microsoft.asc -O- | gpg --dearmor > vscode.gpg
wget -q "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xFC918B335044912E" -O- | gpg --dearmor > dropbox.gpg
wget -q "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xA87FF9DF48BF1C90" -O- | gpg --dearmor > spotify.gpg
wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | gpg --dearmor > virtualbox.gpg

Paso 5.3. Definir los repositorios externos

Van todos en el directorio siguiente:

cd /etc/apt/sources.list.d/
# software solo disponible para amd64
echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" > google-chrome.list
echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" > vscode.list
# software disponible para i386 y amd64
echo "deb [arch=i386,amd64] http://linux.dropbox.com/debian sid main" > dropbox.list
echo "deb http://repository.spotify.com stable non-free" > spotify.list
echo "deb http://download.virtualbox.org/virtualbox/debian stretch contrib" > virtualbox.list

Paso 6

Clásico: actualizar la lista de paquetes. Utilizaremos apt en vez de apt-get sólo por cuestión de gusto. Ustedes utilicen el que prefieran.

apt update

Paso 7

Instalar un entorno gráfico. Para la interfaz gráfica hay varios metapaquetes que se corresponden a cada entorno de escritorio: para Cinnamon instalaremos task-cinnamon-desktop; para KDE, instalen kde-plasma-desktop; para GNOME supongo que gnome-core alcanza (no lo sé con certeza); para XFCE instalen xfce4; para LXQT (lo que antes era LXDE) instalen lxqt; y para Mate el paquete mate-desktop-environment . Si alguno quedó afuera me avisan.

Tengo entendido que para placas GPU AMD/ATI ya no es necesario ningún driver privativo, pues el driver open-source Radeon alcanza, pero eventualmente podría ser necesario para placas GPU nVidia, donde el paquete a instalar es xserver-xorg-video-nvidia o alguno de los drivers que aparecen con el nombre nvidia-legacy. Si tienen un chipset Intel, con lo que viene por defecto suele alcanzar.

Sobre el entorno gráfico, como comentaba al inicio del artículo, mi recomendación esta vez es utilizar Cinnamon, pero instalo Openbox también pues suele ser útil para casos de urgencia. Los demás componentes de nombre extraño son bibliotecas que evitan que Cinnamon arroje advertencias o aplicaciones que se prefieren antes de las que vendrían por defecto.

apt install xorg lightdm mesa-utils openbox xserver-xorg-input-all \
    xserver-xorg-input-synaptics

apt install task-cinnamon-desktop cinnamon-l10n desktop-base \
    gir1.2-gtop-2.0 gir1.2-nmgtk-1.0 network-manager-gnome \
    pulseaudio firefox-esr firefox-esr-l10n-es-ar thunderbird \
    thunderbird-l10n-es-ar

Superpaso 8

Instalar paquetes desde los repositorios oficiales. Como en la línea anterior, cada paquete está enlazado a su descripción en el sitio de Debian.

Paso 8.1. Controladores y servicios útiles

apt install acpi-support amd64-microcode cifs-utils dkms fail2ban \
    intel-microcode ntfs-3g ssh unattended-upgrades uptimed

Paso 8.2. Herramientas útiles de línea de comando

apt install acpi alsa-utils aptitude buku bash-completion clamav \
    curl deborphan dialog ffmpeg file fish flac hexedit htop \
    iotop imagemagick iptraf-ng irqbalance jmtpfs less lftp \
    livestreamer manpages markdown mc mlocate nano \
    netcat-openbsd nethogs nmap p7zip-full pv pxz qemu-kvm \
    screen smbclient sshfs tcpdump trickle tshark unrar unzip \
    vbindiff w3m wavemon wget youtube-dl zip

Paso 8.3. Lenguajes de programación, herramientas y documentación

apt install build-essential git git-doc git-man idle3 ipython3 \
    pylint3 python3 python3-doc sqlite3 sqlite3-doc

Paso 8.4. Programas gráficos para fines variados (editores, reproductores, etc)

apt install default-jre filezilla fslint gufw hardinfo keepassx \
    mpv pavucontrol sound-theme-freedesktop sqlitebrowser \
    synaptic vlc wireshark-gtk xdg-user-dirs-gtk xterm

apt install baobab blueman brasero cheese gnome-font-viewer \
    gnome-system-monitor gnote gvfs-backends gvfs-fuse \
    nemo-fileroller rhythmbox transmission-gtk audacious \
    file-roller gedit-plugins ghex gimp gksu gucharmap leafpad \
    meld sound-juicer 

Paso 8.5. Soporte y drivers para impresoras

apt install cups cups-browsed foomatic-db-compressed-ppds \
    foomatic-db-engine openprinting-ppds printer-driver-cups-pdf \
    system-config-printer system-config-printer-udev

Paso 8.6. Iconos y temas de escritorio

apt install arc-theme breeze-icon-theme clearlooks-phenix-theme \
    faba-icon-theme gnome-colors lxde-icon-theme mate-icon-theme \
    mate-icon-theme-faenza tango-icon-theme

Paso 8.7. Versión más moderna del kernel (4.17) y encabezados

Reemplacen amd64 por i386 si su arquitectura es de 32 bits. La primera línea instala la versión de kernel de Estable. La segunda línea (que dice stretch-backports) instala adicionalmente una versión más moderna.

apt install firmware-linux linux-headers-amd64 linux-image-amd64 \
    linux-doc
apt -t stretch-backports install firmware-linux \
    linux-headers-amd64 linux-image-amd64 linux-doc

Paso 8.8. Versión más moderna de la suite LibreOffice (6.1)

apt -t stretch-backports install libreoffice \
    libreoffice-help-es libreoffice-l10n-es \
    libreoffice-gtk3 hunspell-es \
    libreoffice-style-breeze libreoffice-style-sifr \
    libreoffice-style-tango libreoffice-gnome \
    libreoffice-style-colibre \
    libreoffice-style-elementary

Paso 8.9. Firefox más moderno

Omitido pues la que viene por defecto (ERS 52) es una versión bastante moderna.

Paso 8.10. Tipografías

apt install fonts-cantarell fonts-croscore fonts-crosextra-caladea \
    fonts-crosextra-carlito fonts-dejavu fonts-dkg-handwriting \
    fonts-awesome fonts-humor-sans fonts-liberation fonts-noto \
    fonts-oxygen fonts-roboto

Paso 9

Instalar paquetes desde repositorios externos.

apt install dropbox spotify-client virtualbox-5.2

Las aplicaciones siguientes sólo están disponibles en versión de 64 bits, por lo que si su arquitectura es 32… lo siento…

apt install code google-chrome-stable

Con eso queda listo prácticamente todo lo que proviene por fuera de Debian. Lo único queda pendiente es PyCharm, que como no tiene paquete disponible hay que bajarse el comprimido y alojarlo donde crean conveniente.

Paso 10

Listo, con eso les queda un sistema operativo, a mi juicio, casi perfecto.

El tema de escritorio de las capturas es Arc Darker, el conjunto de iconos es Gnome Wine y fuentes son Noto Sans UI Regular en su mayoría.

Todo lo documentado aquí está disponible en un sencillo script que instala Cinnamon y ejecuta todos estos pasos de un saque. Lo dejo disponible por si les sirve: stretch-powerup.sh (20180802)

Algunos consejos adicionales:

  • Para iniciar un programa rápidamente, usen la tecla Win y escriban parte del nombre. Alt+F2 también funciona, pero no tiene autocompletado.
  • La fuente Noto tiene un montón de variantes para distintos idiomas y por ello los cuadros de dialogo de selección de fuente se hacen eternos. Como usualmente uno sólo utiliza los alfabetos latinos, es posible desactivar aquellas fuentes que no se utilizan y reducir el listado. Para ello, descarguen este archivo 95-powerup-restrict-noto.conf y guardenlo en el directorio /etc/fonts/conf.d/
  • Para tener la tipografía clásica en las terminales Fx, ejecuten dpkg-reconfigure console-setup y en “Tipo de letra para la consola” seleccionen “No cambie la tipografía del arranque”.

Falta un paso adicional (súmamente útil) para mejorar toda la tipografía del sistema, pero eso queda para el post del mes que viene. Mientras tanto, si me olvido de algo, o ven algo que sobra, abajo están los comentarios…

Recuperar el icono desaparecido de Dropbox en Linux

Recientemente he tenido algunos choques con Dropbox en Linux. El más incómodo es que en los escritorios modernos de Linux, léase KDE Plasma, Cinnamon, XFCE y otros, no aparece el ícono de Dropbox en el panel de notificaciones, aunque sí funciona la sincronización.

La resolución es bastante sencilla. Tan sencilla, de hecho, que es extraño que no la hayan agregado en el paquete oficial. Según Web Upd8, hay que hacer lo siguiente:

  1. Renombrar el archivo de autoinicio de Dropbox, ubicado en ~/.config/autostart/ y cambiar la línea donde dice Exec por Exec=dbus-launch dropbox start
  2. Copiar el archivo recién editado a ~/.local/share/applications/
  3. Desactivar el inicio automático de Dropbox, usando el comando dropbox autostart n para que no se vuelva a generar el archivo incorrecto. No se preocupen, Dropbox iniciará automáticamente de todas formas.

Toda esta secuencia de pasos se puede realizar rápidamente, como usuario común, con estas líneas:

cd ~/.config/autostart/
sed -i 's/^Exec=.*/Exec=dbus-launch dropbox start/' dropbox.desktop
cp dropbox.desktop start-dropbox.desktop
mkdir -p ~/.local/share/applications/
mv dropbox.desktop ~/.local/share/applications/
dropbox autostart n

Y listo. Prueben cerrar y volver a iniciar la sesión, y con eso tendrán el clásico ícono indicador del estado de la sincronización.

WireGuard, una VPN rápida, moderna y (esperemos) segura

Desde su presentación hace unas semanas atrás le estoy siguiendo el hilo a la nueva implementación de túnel VPN denominada WireGuard que, básicamente, y copypasteando el marketing de su sitio web,

WireGuard es una VPN extremadamente sencilla, aunque rápida y moderna que utiliza técnicas de criptografía avanzadas. Apunta a ser más rápida, más simple, más reducida y más útil que IPSec, evitando a la vez los dolores de cabeza [de su implementación]. Además, busca ser considerablemente más performante que OpenVPN…

Los puntos fuertes de este software son:

  • Sencillez y facilidad de uso: Busca ser tan fácil de configurar y desplegar como SSH. Una conexión VPN requiere el intercambio de claves públicas sencillas -tal como el intercambio de claves SSH- y todo lo demás se maneja en forma transparente por el software.
  • Criptográficamente robusto: Utiliza criptografía moderna: Noise protocol framework y los algoritmos Curve25519, ChaCha20, Poly1305 (estos últimos de la mente de D. J. Bernstein), BLAKE2, SipHash24, HKDF, con decisiones conservadoras y razonables, y ha sido revisado por criptógrafos [aunque no sabemos quienes].
  • Mínima superficie de ataque: Fue diseñado teniendo en mente la sencillez y la facilidad de implementación, siendo implementable fácilmente con pocas líneas de código, y fácilmente auditable por vulnerabilidades de seguridad.
  • De alto rendimiento: Utiliza instrucciones criptográficas disponibles en los procesadores modernos y está implementado en el propio núcleo de Linux, con lo que permite armar una red segura manteniendo altas tasas de transferencia. Puede ser usado tanto en smartphones como en routers de backbone.
  • Bien definido y estudiado: WireGuard es el resultado de un extenso proceso académico detallado y extenso, cuyo resultado es un documento de investigación técnica que define claramente el protocolo y las consideraciones que se tomaron en cuenta en cada decisión.

Más allá de la propaganda del sitio web, además de su pequeño tamaño (en líneas de código) y de estar implementado sobre UDP, lo más relevante de esta implementación es que corre enteramente en el kernel, evitando los cambios de contexto de las implementaciones tradicionales de VPN. WireGuard parece haber sido desarrollado inicialmente por una sola persona: Jason A. Donenfeld, y está licenciado como GPLv2. A él agradecemos, entonces, haberse tomado este tremendo trabajo.

Al dia de hoy es posible probarlo en Debian gracias al trabajo de Daniel Kahn Gillmor (dkg), quien se encargó de empaquetarlo muy responsablemente.

En principio se requiere un kernel Linux igual o mayor a 4.1, pero eso se consigue fácilmente desde backports:

echo "deb http://httpredir.debian.org/debian/ jessie-backports main" \
    > /etc/apt/sources.list.d/jessie-backports.list
apt update
apt -t jessie-backports install linux-image-amd64 linux-headers-amd64

Luego de reiniciar con el kernel nuevo, descargar e instalar los paquetes wireguard-dkms y wireguard-tools desde el repositorio experimental. Esto instalará el código fuente del módulo y la aplicación de configuración. La infraestructura de compilación dkms se encarga de compilar el código a un módulo usable.

echo "deb http://httpredir.debian.org/debian/ experimental main" \
    > /etc/apt/sources.list.d/experimental.list
apt update
apt install dkms
apt -t experimental install wireguard-dkms wireguard-tools

En caso de no disponer de una instalación de Debian a mano, hay otras opciones, como también está el último recurso de compilarlo a la vieja usanza.

Finalmente, una vez que está todo listo,

Quick Start Walkthrough

Para todo lo demás, los remito a la documentación en línea, y al paper que detalla el protocolo.

Vale decir que esto aún está en los principios de su desarrollo. No hay una versión estable y su implementación real aún no ha tenido análisis relevantes desde la comunidad de seguridad en redes, pero vale decir que suena prometedor. Desde luego, si están interesados en participar/desarrollarlo/probarlo/documentarlo, el grupo acepta nueva gente.

Actualización 08/02/2017: Jason ha publicado en el sitio web los videos y slides de sus últimas presentaciones, de las cuales recomiendo particularmente la de FOSDEM 2017: Next Generation Secure Kernel Network Tunnel como visión rápida del proyecto y actualización del estado del mismo.

Renombrando archivos con mc

Este ticket en el bug tracker de Midnight Commander es oro puro.

Tendría que haberlo encontrado muchos años atrás!

PD: Shift+F6, no lo olvides.

Copyright © All Rights Reserved · Green Hope Theme by Sivan & schiy · Proudly powered by WordPress