Trucs GNU/Linux

"En el taller del sabio hasta las virutas tienen valor"

Leonardo da Vinci

Instal·lar jupyter al nostre GNU/Linux

Fem càlcul científic amb python i documentem-lo correctament

Aquesta instal·lació l'he comprovada amb Debian 10 i Ubuntu 20.04. Si voleu fer un petit cluster amb un grapat de orange pi one, us recomano Debian 10, ja que no dona problemes de comunicació MPI amb Armbian.

Primer instal·lem les biblioteque científiques, després jupyter

sudo apt install python3-pip
sudo python3 -m pip install --upgrade pip
sudo pip3 install sympy
sudo apt-get install python3-matplotlib
sudo apt-get install python3-scipy -y
sudo apt-get install python3-numpy -y
sudo pip3 install jupyter

També interessa instal·lar Latex, ja que ens permetrà exportar el nostre document a PDF

sudo apt-get install texlive-xetex texlive-fonts-recommended texlive-generic-recommended

Ara ja podrem crear una carpeta a l'usuari que executarà el servidor jupyter per desar els arxius, i executarem des d'aquesta carpeta jupyter, que obrira un navegador amb el webide

mkdir ~/jupyter
cd ~/jupyter
jupyter notebook

Si el volem tenir a un servidor, caldrà evitar que intenti obrir el navegador i haurem d'autoritzar el seu ús des d'altres màquines a la xarxa

Primer hem de crear un fitxer de configuració

jupyter notebook --generate-config

Aquest fitxer el trobarem a ~/.jupyter/jupyter_notebook_config.py. L'haurtem de modificar amb les línies

c.NotebookApp.open_browser = False
c.NotebookApp.ip = '*'

I haurem de generar una contrasenya per evitar treballar amb tokens

jupyter notebook password

TestDisk i ddrescue: recuperació de discs durs i targetes de memòria

Dues eines de terminal que ens permeten recuperar dades d'unitats d'emmagatzenament defectuoses

De vegades ens trobem que una unitat de disc o un llapis o targeta SD s'ha espatllat, amb dades de les que no hem fet còpia de seguretat.

TestDisk és un programa de terminal que ens permet recuperar la taula de particions del disk

El paquet el trobem a Ubuntu, i inclou PhotoRec un programa que ens permet recupear no només fotografies, també molt tipus de fitxers com ara els .zip, .pdf ... Podeu consultar un llistat dels formats reconeguts, que moltes vegades es poden recuperar encara que esborrem el fitxer.

Si ens trobem amb problemes de maquinari, podem fer servir ddrescue, també disponible a Ubuntu.

Amb ddrescue podem fer una còpia de la unitat defectuosa a una altra unitat o un fitxer imatge. Aquest programa farà tot el possible per recuperar les vostres dades, però pot arribar a ser molt lent, donada la mida actual dels discs durs, i especialment quan tenim problemes mecànics que fan baixar a kB/s la velocitat de lectura que hauria de ser de molts MB/s. En aquest cas podem estar parlant de dies o setmanes!

Per sort ddrescue permet aturar un rescat i tornar més tard, sempre quie fem servir un fitxer mapfile. Aquest fitxer mapfile es pot isualitzar amb el paquet ddrescueview

La combinació d'aquestes eines són d'una potència increïble. En el meu cas, un disc dur de 500 GB, ple de fotografies, he iniciat una recuperació de dades que trigarà mesos, però que en un parell de dies ja dona resultats.

Com el meu disc bloqueja l'engegada de l'equip si el conecto al bus SATA, l'he posat en una unitat externa USB 3.0. Aquest disc, fícicament danyat, té una velocitat de transferència molt lenta, amb una mitjana de 30 kB/s, i no he pogut escriure la taula de particions, ja que em dona error d'escriptura.

El que vaig fer va ser localitzar l'inici de la partició NTFS que volia recuperar amb la funció Analyse de TestDisk i començar amb ddrescue una mica abans d'aquesta posició, reservant espai per tot el disk a un fitxer imatge:

ddrescue -d -p -i OFFSETPARTITION /dev/sdX imatgedisc.img imatgedisc.map

Després de deixar-li treballar una estona, el vaig aturar amb ^C i vaig recuperar i escriure la taula de particions al fitxer imatge amb TestDisk. D'aquesta forma podem utilitzar PhotoRec sobre la imatge del disc, conforme l'anem recuperant.

Com el nom dels fitxers recuperats per PhotoRec no és especialment descriptiu, els vaig renombrar amb el programa exiv2, disponible a Ubuntu, i que permet posar un nom d'acord amb les dades EXIF de la fotografia

exiv2 -r'%Y%m%d-%H%M_:basename:' rename $(ls)

HandBrake-cli: tot terreny per a la manipulació de vídeos des del terminal

Convertir formats de vídeos, extreure vídeos d'un DVD ... fàcil i des del terminal

Molts coneixen HandBrake amb la seva GUI, està disponible per a tots els sistemes operaius i és programari lliure.

Però també existeix la versió per terminal, igual de potent i que podem utilitzar al nostre servidor domèstic. Es diu HandBrakeCLI i segur que el trobaràs a la teva distribució Linux favorita. Jo tinc Debian 10 al meu servidor domèstic, i per instal·lar-la faig

apt install handbrake-cli

Si volem extreure vídeos de DVDs, recomano instal·lar libdvd-pkg, que ens permetrà baixar, compilar i instal·lar libdvdcss2, llibreria necessària per llegir DVDs encriptats (la majoria de DVDs comercials). Una vegada instal·lat libdvdcss2, caldrà fer

dpkg-reconfigure libdvd-pkg

Ara ja podem llegir el contingut d'un DVD i extreure la part que en interessi. Per exemple:

HandBrakeCLI -i /dev/sr0 -t 0 ➡ Ens llista el contingut del DVD: tracks, idiomes d'audio ...
HandBrakeCLI -i /dev/sr0 -o SH1.mp4 -t 1 ➡ Extreu el títol 1 del DVD i el desa en format mp4 a SH1.mp4

També és molt útil utilitzar qualsevol dels formats predefinits, que podem llistar amb

HandBrakeCLI --preset-list

El programa el podem utilitzar no només amb DVDs, sino amb també qualsevol vídeo. Per exemple:

HandBrakeCLI -i 20200708_210848A.mp4 -o TowerOfPi.mp4 --preset="Android 480p30"

Ens transforma el fitxer 20200708_210848A.mp4 en el fitxer TowerOfPi.mp4 amb un format H.264 video (up to 480p30) and AAC stereo audio, in an MP4 container. Compatible with Android devices.

Enregistrant imatges ISO des del terminal

Si el nostre servidor domèstic té una unitat CD/DVD, podem remotament baixar/enregistrar/comprovar imatges ISO

Fa poc vaig recuperar un antic PC com a servidor domèstic. Com té una unitat DVD, vaig voler utilitzar-la per baixar imatges ISO d'internet, enregistrar-les i comprovar la imatge.

Necessitarem el programa wodim

apt install wodim

Per altra banda he creat un parell d'uilitats BASH per realitzar la comprovació de la imatge enregistrada, ja que cal utilitzar el nombre de blocs correctes de l'enregistramet. Aquestes utilitats les he desades a /usr/local/bin amb permisos d'execució. Veiem el cas d'una comprovació sha256sum:

#!/bin/bash
#
# /usr/local/bin/sha256sr0
#

if [ "$1" != "" ]; then
blocks=$(expr $(ls -l $1 | awk '{print $5}') / 2048)
dd if=/dev/sr0 bs=2048 count=$blocks | sha256sum
else
echo "Cal posar el nom arxiu ISO original"
fi

Igualment faríem pel sistema md5, canviant sha256sum per md5sum.

Tenim al nostre abast tot un seguit de comandes de consola per treballar amb les imatges ISO:

Veiem un exemple complet amb una imatge de la web d'Ubuntu

eject -t ➡ obrim la lectora DVD
wget http://cdimage.ubuntu.com/ubuntu-mate/releases/20.04/release/ubuntu-mate-20.04-desktop-amd64.iso ➡ baixem la imatge ISO
sha256sum ubuntu-mate-20.04-desktop-amd64.iso ➡ comprovem la descàrrega
wodim -v dev=/dev/sr0 -dao ubuntu-mate-20.04-desktop-amd64.iso ➡ enregistrem la imatge ISO
eject -t ➡ expulsem el DVD
eject ➡ el tornem a carregar
sha256sr0 ubuntu-mate-20.04-desktop-amd64.iso ➡ comprovem el DVD
eject ➡ expulsem el DVD, ja el tenim llest
eject -t ➡ tanquem la lectora DVD

També poden ser interessants les comandes

Port sèrie a GNU/Linux i Arduino

Com enviar comandes via sèrie de de Linux al nostre Arduino. Programació remota de l'Arduino.

Quan tenim diversos dispositius conectats per USB, potser interessant distingir quin és el nostre Arduino, especialment si és un clònic que genera un /dev/ttyUSB en lloc del /dev/ttyACM. A més a més volem evitar que en enviar una comanda pel canal sèrie al nostre Arduino es generi un RST en manipular la línia DTR. També voldrem configurar la velocitat del port sèrie, i donar accés a tots els usuaris del sistema.

Tot això ho podem fer amb un petit fitxer que hem de posar com a root a la carpeta /etc/udev/rules.d. En el meu cas tinc un clònic Arduino amb un xip CHG340. Aquest és el contingut del meu fitxer /etc/udev/rules.d/50-my-rules

KERNEL=="ttyACM[0-9]*",MODE="0666"
KERNEL=="ttyUSB[0-9]*",MODE="0666"
SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", SYMLINK+="arduino", MODE="0666", RUN+="/bin/stty -F /dev/arduino -hupcl 115200".

Per altra banda potser ens interessarà reprogramar el nostre Arduino de forma remota. En el meu cas està connectat a un servidor domèstic sense teclat ni pantalla, amb una distribució Debian 10. Podem instal·lar el programa arduino-mk, tal com s'explica en el següent vídeo:

Raspberry virtual amb KVM/QEMU

Amb KVM podem tenir tota una raspberry al nostre escriptori

Si tenim instal·lat KVM al nostre ordinador, podem baixar imatge Desktop de la pròpia web de Raspberry i instal·lar-la en una imatge de disc:

Primer comprovem que la imatge baixada és correcta, calculan el seu hash

sha256sum 2020-02-12-rpd-x86-buster.iso

Col·loquem la imatge a una carpeta nova i obrim un terminal en aquesta carpeta. Ara hem de crear la imatge de disc

qemu-img create -f qcow2 raspi.qcow2 10G

I comencem la instal·lació

kvm -hda raspi.qcow2 -cdrom 2020-02-12-rpd-x86-buster.iso -m 1024 -net nic -net user

Ara ja la nostra Raspberry virtual és operativa. Per iniciar-la hem d'obrir un terminal a la carpeta i executar

kvm -hda raspi.qcow2 -m 1024 -net nic -net user

Imprimir calendaris amb pcal

En un món cada vegada més digital de vegades volem apuntar en paper la nostra agenda

Amb pcal podem generar calendaris PostScript, i amb ps2pdf convertir-los a PDF:

pcal -a ca -F 1 4 2020 3 |ps2pdf - 2T2020.pdf

Importar arxius Cuaderno digital Inves

Podem utilitzar el Cuadeno digital Inves per prendre apunts i desar a la SD la feina. Des de Windows ha estat fàcil llegir ls fitxers de la SD, però no tant des de Linux

Fa temps vaig aconseguir de rebaixes un Cuaderno Digital de Inves, un sistema que permet prendre apunts i digitalitzar-los.

El problema és que, si bé en connectar l'aparell a l'ordinador aquest es podia utilitzar com a tableta digitalitzadora, i poder accedir a les diferents carpetes com si fos un pendrive USB, no era capaç de llegir els arxiu emmagatzemats.

Podem aprofitar els arxius .TOP que genera aquest aparell amb un script PERL que fa la conversió d'arxius a SVG. Una vegada que tenim aquesta informació en un format conegut no és difícil fer una conversió amb inkscape a PNGs o PDFs des de la linía d'ordres, que podem juntar en un unic PDF amb pdftk.

Amb tot això tenim tres scripts, que recomano desar a /usr/local/bin:

Reduir el pes dels fitxers PDF

Moltes vegades els programes, especialment els que incorporen fotografies, generen PDFs que ocupen molt espai. GhostScript pot ser la solució per reduir la seva mida.

Font: internetLan i Nauj Gómez

Amb el GhostScript instal·lat obrim el terminal a la carpeta on es troba l'arxiu i executem:

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=pdf_reducido.pdf pdf_original.pdf

Amb -dPDFSettings ajustem la qualitat i pes de la sortida:

Dreceres de teclat al terminal

La majoria d'usuaris saben que amb TAB podem autocompletar ordres i noms de fitxer, o amb les fletxes UP i DOWN navegar per l'històric. Però oblidem moltes altres drecres de teclat molt interessants.

Font: Blog Bitix

CTRL+r: Ens permet fer cerques a l'històric d'ordres, teclejant part de l'ordre que busquem

CTRL+k: Esborra des de la posició del cursor fins al final de línia

CTRL+a: Porta el cursor a l'inici de la línia

CTRL+e: Portar el cursor al final de la línia

CTRL+l: Neteja el terminal (ordre clear)

Pissarra per a aules virtuals

La combinació tableta gràfica/Xournal permet disposar d'una còmoda pissarra virtual

Una bona eina per la nostra aulavirtual amb jitsi és el "cuaderno digital inves".

Amb xournal puc explicar com si tingués una pissarra i després compartir el document generat amb pdf.

Crec que aquest perifèric ja no es troba al mercat, però si busqueu per internet "cuaderno digital inves" el podreu trobar per 20€

El "IOGEAR Mobile Digital Scribe" també funciona perfectament com a tableta digitalitzadora. Només cal canviar al script la identificació del dispositiu per "Pegasus Technologies Ltd. NoteTaker FW Ver 3.03"

Si tens dos monitor pots limitar l'abast del llapis al monitor de l'esquerra, on tinc xournal a pantalla completa, amb xinput:

#!/bin/bash
xinput set-prop ' Digital Ink Pad' 'Coordinate Transformation Matrix' 0.4 0 0 0 1 0 0 0 1

La Coordinate Transformation Matrix transforma les coordenades de la tableta a pantalla. La meva trasformació és:

0.400
010
001

Si necessiteu ajustar els paràmetres de xinput feu una ullada a https://wiki.ubuntu.com/X/InputCoordinateTransformation.

Fins i tot podeu girar la tauleta.

Jo només he reduït l'abast horitzontal, d'aquí el factor 0.4 al primer valor de la matriu. Així la tableta queda limitada al monitor esquerra, on tinc xournal. Potser només us caldrà tocar aquest valor.

Realment Xournal és una eina molt completa. Ens permet inserir imatges, inserir text des del teclat, resaltar zones, escriure amb el llapis de la tauleta, recolocar cada un dels elements, treballar per capes, afegir pàgines ...

Actualització 17/07/2020: Ubuntu 20.04

Amb aquesta versió d'Ubuntu el "cuaderno digital inves" m'ha deixat de funcionar (en canvi "IOGEAR Mobile Digital Scribe" funciona perfectament).

El problema ve del canvi de evdev per libinput per gestionar les entrades en aquesta versió.

Una solució ràpida és copiar, com a root, l'arxiu /usr/share/X11/xorg.conf.d/10-evdev.conf amb el nom 80-inves.conf a la mateixa carpeta. Potser us caldrà instal·lar prèviament evdev amb

sudo apt install xserver-xorg-input-evdev

Quan torneu a entrar a l'entorn gràfic veureu com torna a funcionar.

Actualització 24/10/2020: Escollir monitor

Amb la comanda

xinput set-prop ' Digital Ink Pad' 'Coordinate Transformation Matrix' 0.4 0 0 0 1 0 0 0 1

només podiem limitar la tableta al monitor esquerra, i havíem de calcular el factor de reducció horitzontal.

He trobat una solució més elegant a la wiki d'Archlinux

Primer identifiquem la tableta

jordi@estudio:~$ xinput list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Trust Wireless Mouse id=11 [slave pointer (2)]
⎜ ↳ Digital Ink Pad id=9 [slave pointer (2)]
⎜ ↳ Digital Ink Pad Mouse id=10 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Power Button id=8 [slave keyboard (3)]
↳ CHICONY USB Keyboard id=12 [slave keyboard (3)]
↳ CHICONY USB Keyboard System Control id=13 [slave keyboard (3)]
↳ CHICONY USB Keyboard Consumer Control id=14 [slave keyboard (3)]
↳ UVC Camera (046d:0802) id=15 [slave keyboard (3)]
jordi@estudio:~$

i identifiquem els monitors:

jordi@estudio:~$ xrandr
Screen 0: minimum 8 x 8, current 3200 x 1080, maximum 16384 x 16384
VGA-0 connected 1280x1024+0+28 (normal left inverted right x axis y axis) 376mm x 301mm
1280x1024 60.02*+ 75.02
1280x960 60.00
1152x864 75.00
1024x768 75.03 70.07 60.00
800x600 75.00 72.19 60.32 56.25
640x480 75.00 72.81 59.94
DVI-D-0 disconnected (normal left inverted right x axis y axis)
HDMI-0 connected primary 1920x1080+1280+0 (normal left inverted right x axis y axis) 521mm x 293mm
1920x1080 60.00*+ 59.94 50.00
1680x1050 59.95
1600x900 60.00
1440x900 59.89
1280x1024 75.02 60.02
1280x800 59.81
1280x720 60.00 59.94 50.00
1152x864 75.00
1024x768 75.03 70.07 60.00
800x600 75.00 72.19 60.32 56.25
720x576 50.00
720x480 59.94
640x480 75.00 72.81 59.94
jordi@estudio:~$

Ara podem limitar la tableta al monitor esquerra (VGA-0) amb l'ordre

jordi@estudio:~$ xinput --map-to-output ' Digital Ink Pad' VGA-0

o al monitor dret (HDMI-0) amb la comanda

jordi@estudio:~$ xinput --map-to-output ' Digital Ink Pad' HDMI-0