From 84aec9ef343da7a2aeddc817ac01074f2f64db30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Alvari=C3=B1o?= Date: Mon, 27 Jan 2025 18:18:33 +0100 Subject: [PATCH] dev: Add missing output files in Xia Also, add some detail on 'flameshot' and 'ksnip' installation. --- README.md | 30 +- out/LinuxMintXia.dw | 3028 ++++++++++++++++++++++++++++ out/LinuxMintXia.epub | Bin 0 -> 111884 bytes out/LinuxMintXia.mw | 2703 +++++++++++++++++++++++++ out/LinuxMintXia.odt | Bin 0 -> 85236 bytes out/LinuxMintXia.pdf | Bin 0 -> 257386 bytes out/LinuxMintXia.tex | 4340 +++++++++++++++++++++++++++++++++++++++++ src/500_graph.md | 4 +- 8 files changed, 10086 insertions(+), 19 deletions(-) create mode 100644 out/LinuxMintXia.dw create mode 100644 out/LinuxMintXia.epub create mode 100644 out/LinuxMintXia.mw create mode 100644 out/LinuxMintXia.odt create mode 100644 out/LinuxMintXia.pdf create mode 100644 out/LinuxMintXia.tex diff --git a/README.md b/README.md index 13aa89e..e434e81 100644 --- a/README.md +++ b/README.md @@ -766,13 +766,6 @@ Un fork de *Firefox* con menos chorradas. Instalado con el paquete `deb` descargado de su [página web](https://software.opensuse.org/download.html?project=home:stevenpusser&package=palemoon) -``` bash -curl -fsSL https://download.opensuse.org/repositories/home:stevenpusser/xUbuntu_22.10/Release.key | gpg --dearmor | sudo tee /usr/local/share/keyrings/palemoon.gpg > /dev/null -echo 'deb [ signed-by=/usr/local/share/keyrings/palemoon.gpg ] http://download.opensuse.org/repositories/home:/stevenpusser/xUbuntu_20.04/ /' | sudo tee /etc/apt/sources.list.d/palemoon.list -sudo apt update -sudo apt install palemoon -``` - ## LibreWolf Instalado el paquete flatpak desde el Software Manager @@ -795,6 +788,8 @@ disponible [aqui](https://librewolf-community.gitlab.io/docs/addons/). ## Netsurf +**NOTA**: Aún no instalado en Xia + Un navegador ultraligero (aunque no funciona con muchas páginas, solo para webs austeras) Instalado via flathub con `flatpak install netsurf` @@ -805,6 +800,8 @@ desde su [página web](https://git.skyjake.fi/gemini/lagrange) ## Castor +**NOTA**: Aún no instalado en Xia + Otro navegador para el protocolo *Gemini* programado en *Rust*. Instalado desde las fuentes siguiendo instrucciones de su [página web](https://sr.ht/~julienxx/Castor/) @@ -1039,7 +1036,7 @@ Ahora podemos instalar el paquete con `dpkg` También conviene instalar instalar *lmodern*. sudo apt install texinfo - sudo dpkg -i texlive-local_2020-1_all.deb + sudo dpkg -i texlive-local_2024-1_all.deb Todo listo, ahora podemos instalar cualquier paquete debian que dependa de *texlive* sin problemas de dependencias, aunque no hayamos instalado @@ -1137,6 +1134,8 @@ o hacer alguna modificación viene bien tenerlas. ## Quarto +**NOTA**: Aún no instalado en Xia + Un sistema de generación de documentación que usa *Pandoc*, instalado con el paquete `.deb` descargado desde [la página web del proyecto](https://quarto.org/docs/get-started/) @@ -1149,7 +1148,7 @@ Dos editores opcionales para hacer pruebas: Obsidian Instalado con *appimage* descargado desde la [página -web](https://obsidian.md/) +web](https://obsidian.md/) **NOTA**: Aún no instalado en Xia Zettlr Instalado con fichero `.deb` descargado desde [su página @@ -1238,11 +1237,6 @@ he instalado los paquetes: Y ahora funciona correctamente. -## Foliate: lector de libros electrónicos - -Se puede instalar el paquete deb desde [su propio -github](https://github.com/johnfactotum/foliate/releases) - ## Zotero: Gestor de referencias bibliográficas Por cortesía de [Emiliano @@ -2594,12 +2588,14 @@ con *Menulibre*. ## Capturas de pantalla El [*flameshot*](https://flameshot.org) cubre el 99% de mis necesidades: -`sudo apt install flameshot` funciona bien pero podemos instalar la -última version descargando el paquete `.deb` desde la página web. +`sudo apt install flameshot` instala la última versión, parece que el +desarrollo se detuvo en 2022. El [*ksnip*](https://github.com/DamirPorobic/ksnip) por si tenemos que hacer una captura con retardo, puede instalarse también bajando el -paquete `.deb` desde la página web. +paquete `.deb` desde la página web. O bien instalando con apt (la +versión estable no ha cambiado desde el 2023, en el momento de escribir +esto) Shutter vuelve a estar disponible, al instalar desde este ppa ya queda con las opciones de edición habilitadas: diff --git a/out/LinuxMintXia.dw b/out/LinuxMintXia.dw new file mode 100644 index 0000000..ccee595 --- /dev/null +++ b/out/LinuxMintXia.dw @@ -0,0 +1,3028 @@ +====== Introducción ====== + +Mis portatiles son: + + * +Un ordenador Acer 5755G con las siguientes características: + * Core i5 2430M 2.4GHz + * NVIDIA Geforce GT 540M (+ intel integrada) + * 8Gb RAM + * 750Gb HD +Este portátil equipa una tarjeta //Nvidia Geforce GT540M// que resulta pertenecer a una rama muerta en el árbol de desarrollo de Nvidia. +Esta tarjeta provocaba todo tipo de problemas de sobrecalientamiento, pero en las últimas versiones de Linux instalando el driver de Nvidia parece funcionar correctamente. + + * Un Lenovo Legion + * Core i7-9750H + * Nvidia GTX1650-4Gb (+ intel integrada) + * 16Gb RAM + * 512Gb SSD + 1Tb HDD + +====== Instalación de Linux Mint ====== + +Lanzamos el programa de instalación desde una memoria USB con la ISO de la versión Mate. + +Al arrancar el USB podemos conectarnos a internet (en mi caso, me conecto a la wifi) + +Mis opciones de instalación: + + * Escojo el idioma //Inglés// (manias mias, suelo dejar mi Linux en inglés) + * Teclado: //Español// + * Marco la opción de instalar codecs + +Generalmente hago particiones: + + * 540 Mb para EFI + * 90 Gb para //root//, es decir ''%%/%%'' + * El resto del disco SSD para ''%%/home%%'' + * El disco HDD lo monto en una sola partición en ''%%/store%%'' + +====== Programas básicos ====== + +Lo primero de todo es hacer una actualización completa del sistema: + + +sudo apt update +sudo apt upgrade + + +===== Linux Mint ===== + +Linux Mint incluye ''%%sudo%%'' y las aplicaciones que uso habitualmente para gestión de paquetes por defecto (//aptitude// y //synaptic//). + +Instalo (por costumbre) el paquete //ppa-purge// (''%%sudo apt install ppa-purge%%''). Sirve para eliminar ppas junto con los programas instalados desde ese ppa. + +Cambiamos los origenes del software con la utilidad de Linux Mint que nos mide la velocidad de cada posible origen para tener información para elegir. + +===== Firmware ===== + +Ya no es necesario intalar los paquetes de //microcode// la instalación de Linux Mint se encargó de instalar: + + * ''%%amd64-microcode%%'' + * ''%%intel-microcode%%'' + +Instalamos el driver de Nvidia recomendado, después de la instalación inicial el //Mint// nos avisará de que tenemos que revisar la instalación de los drivers. + +El driver de Nvidia viene muy mejorado. Merece la pena ver todas las opciones del menú del driver. + +Una vez instalado el driver de Nvidia, el comando ''%%prime-select query%%''debe indicarnos la tarjeta activa y podremos cambiar de tarjeta ejecutando ''%%prime-select [nvidia|intel]%%''. También podremos acceder a las funciones de Nvidia a través del applet en la barra de estado de nuestro escritorio. + +===== Control de configuraciones con git ===== + +Una vez instalado el driver de Nvidia y antes de seguir con la instalación instalamos el ''%%git%%'' y el ''%%etckeeper%%'' para que todos los cambios que se produzcan en el directorio ''%%/etc%%'' durante nuestra instalación queden reflejados en el git. + +Yo nunca almaceno esta información en la nube (por seguridad), pero me permite tener controlados los cambios de configuración y ayuda en caso de problemas. + +==== Instalación de etckeeper ==== + +¡Ojo!, nos hacemos ''%%root%%'' para ejecutar: + + +sudo su - +git config --global init.defaultBranch main +git config --global user.email xxxxx@whatever.com +git config --global user.name "Name Surname" +apt install etckeeper + + +//etckeeper// hará un control automático de tus ficheros de configuración en ''%%/etc%%'' + +Para echar una mirada a los //commits// creados puedes ejecutar: + + +cd /etc +sudo git log + + +==== Controlar dotfiles con git ==== + +Vamos a crear un repo de git para controlar nuestros ficheros personales de configuración. + +Creamos el repo donde queramos, yo suelo usar el directorio ''%%~/work/repos%%''. + + +mkdir usrcfg +cd usrcfg +git init +git config core.worktree "/home/salvari" + + +Y ya lo tenemos, un repo de git, en la localización que queramos y que tiene el directorio de trabajo apuntando a nuestro //$HOME//. + +Podemos añadir los ficheros de configuración que queramos al repo: + + +git add .bashrc +git commit -m "Add some dotfiles" + + +Una vez que tenga añadidos los ficheros que quiero tener controlados pondré ''%%*%%'' en el fichero ''%%.git/info/exclude%%'' de mi repo para que ignore todos los ficheros de mi ''%%$HOME%%''. + +Cuando instalo algún programa nuevo añado a mano los ficheros de configuración que quiero tener controlados al repo. + +Yo no tengo información confidencial en este repositorio (claves ssh por ejemplo) así que no tengo problemas en almacenarlo en la nube. Facilita mucho las cosas en casos de upgrade del sistema o copiar configuraciones entre ordenadores. + +===== Editor desde linea de comandos ===== + +Hasta que instalemos nuestro editor favorito (//Emacs// en mi caso) podemos usar //nano// desde la linea de comandos para editar cualquier fichero. + +===== Parámetros de disco duro ===== + +Tengo un disco duro ssd y otro hdd normal. + +El area de intercambio la hemos creado en el disco duro hdd, no se usará mucho (mejor dicho: no se usará nunca) pero evitamos multiples operaciones de escritura en el disco ssd en caso de que se empiece a tirar del swap. + +Añadimos el parámetro ''%%noatime%%'' para las particiones de ''%%root%%'' y ''%%/home%%'', que si que se han creado en el ssd. + + +# /etc/fstab: static file system information. +# +# Use 'blkid' to print the universally unique identifier for a +# device; this may be used with UUID= as a more robust way to name devices +# that works even if disks are added and removed. See fstab(5). +# +# +# / was on /dev/sda5 during installation +UUID=d96a5501-75b9-4a25-8ecb-c84cd4a3fff5 / ext4 noatime,errors=remount-ro 0 1 +# /home was on /dev/sda7 during installation +UUID=8fcde9c5-d694-4417-adc0-8dc229299f4c /home ext4 defaults,noatime 0 2 +# /store was on /dev/sdc7 during installation +UUID=0f0892e0-9183-48bd-aab4-9014dc1bd03a /store ext4 defaults 0 2 +# swap was on /dev/sda6 during installation +UUID=ce11ccb0-a67d-4e8b-9456-f49a52974160 none swap sw 0 0 +# swap was on /dev/sdc5 during installation +UUID=11090d84-ce98-40e2-b7be-dce3f841d7b4 none swap sw 0 0 + + +Una vez modificado el ''%%/etc/fstab%%'' no hace falta arrancar, basta con ejecutar lo siguiente: + + +systemctl daemon-reload + +mount -o remount / +mount -o remount /home +mount + + +==== Ajustes adicionales para Firefox ==== + +Las diferencias de rendimiento del Firefox con estos ajustes son bastante notables. + +Seguimos [[https://easylinuxtipsproject.blogspot.com/p/ssd.html#ID10|esta referencia]] + +Visitamos ''%%about:config%%'' con el navegador. + +Cambiamos + + * ''%%browser.cache.disk.enable%%'' **false** + * ''%%browser.cache.memory.enable%%'' **true** + * ''%%browser.cache.memory.capacity%%'' **204800** + * ''%%browser.sessionstore.interval%%'' **15000000** + +TODO: Comprobar //trim// en mi disco duro. Y mirar [[https://easylinuxtipsproject.blogspot.com/p/speed-mint.html|esto]] + +Y siguiendo [[https://linuxreviews.org/HOWTO_Make_Mozilla_Firefox_Blazing_Fast_On_Linux|esta otra referencia]] cambiamos: + + * ''%%gfx.x11-egl.force-enabled%%'' **true** + * **IMPORTANTE** Ajustar el parámetro ''%%network.IDN_show_punycode%%'' a **true** (para evitar ataques de URL falsas con caracteres Unicode) + +Reiniciamos nuestro //Firefox// (podemos visitar ''%%about:restartRequired%%'') + +===== Fuentes (tipográficas) adicionales ===== + +Instalamos algunas fuentes desde los orígenes de software: + + +sudo apt install ttf-mscorefonts-installer +sudo apt install fonts-noto + + +Y la fuente [[https://robey.lag.net/2010/06/21/mensch-font.html|Mensch]] la bajamos directamente al directorio ''%%~/.local/share/fonts%%'' + +Para visualizar las fuentes podemos usar el programa //MATE Font Viewer// + +Instaladas varias de las [[https://github.com/ryanoasis/nerd-fonts|nerd-fonts]] en ''%%~/.local/share/fonts%%''. Simplemente descargamos las fuentes interesantes y ejecutamos ''%%sudo fc-cache -f -v%%'' + +Fuentes interesantes: + + * [[https://github.com/ryanoasis/nerd-fonts|nerd-fonts]] + * [[https://github.com/powerline/fonts|Powerline fonts]] + * [[https://github.com/ProgrammingFonts/ProgrammingFonts|Programming fonts]] + +===== Firewall ===== + +''%%ufw%%'' y ''%%gufw%%'' vienen instalados por defecto, pero no activados. + + +ufw default deny +ufw enable +ufw status verbose + + + +---- + +> **Nota**: Ojo con el log de ''%%ufw%%'', tampoco le sienta muy bien al ssd esa escritura masiva. Yo normalmente lo dejo desactivado desde el //gufw// excepto cuando valido una nueva configuración. + + +---- + +===== Aplicaciones variadas ===== + + * **KeepassXC** Para mantener nuestras contraseñas a buen recaudo + * **Gnucash** Programa de contabilidad, la versión de los repos está bastante atrasada habrá que probar la nueva que puede instalarse desde la web o desde el flathub. + * **Deluge** Programa de descarga de torrents (acuérdate de configurar tus cortafuegos) + * **rsync, grsync** Para hacer backups de nuestros ficheros + * **Descompresores variados** Para lidiar con los distintos formatos de ficheros comprimidos + * **mc** Midnight Comander, gestor de ficheros en modo texto + * **most** Un ''%%less%%'' mejorado + * **tree** Para ver estructuras de directorios + * **neofetch** Este solo vale para presumir de ordenador creo ¬_¬ + * **fasd** Para cambiar entre directorios rápidamente + * **silversearcher-ag** Una alternativa mejorada al clásico //grep// + * **ack** Otro grep mejorado + * **ncdu** Un analizador de uso de disco alternativa a ''%%du%%'' + * **mate-tweak** Para //customizar// nuestro escritorio Mate + * **filezilla** Un interfaz gráfico para transferencia de ficheros + * **rofi** Un conmutador de ventanas capaz de automatizar muchas tareas + * **Chromium** Como Chrome pero libre, en Linux Mint no hay snaps, puedes instalarlo directamente con ''%%apt%%'' + +Para instalar todos los programas ejecutamos: + + +sudo apt install keepassxc gnucash deluge rsync grsync rar unrar \ +zip unzip unace bzip2 lzop p7zip p7zip-full p7zip-rar \ +most mc tree neofetch fasd silversearcher-ag ack ncdu mate-tweak filezilla \ +rofi chromium + + +===== Algunos programas de control del sistema ===== + +Son útiles para control de consumo. + + +sudo apt install tlp tlp-rdw htop powertop + + +**btop** también está muy bien, así que descargamos los binarios desde [[https://github.com/aristocratos/btop|su página web]] dentro del binario tenemos el ejecutable y un fichero ''%%.desktop%%''. En mi caso hago una cutre-instalación con el ejecutable en ''%%~/apps/system/btop/bin/btop%%'' y el fichero ''%%.desktop%%'' copiado en mi ''%%~/.local/share/applications%%'' (ver la sección [[#varias-aplicaciones-instaladas-de-binarios|Varias aplicaciones instaladas de binarios]]). En ''%%~/.local/bin%%'' dejo un enlace simbólico al binario. + +===== Programas de terminal ===== + +Instalo dos programas de terminal: + + +sudo apt install guake terminator + + +//terminator// lo dejamos como aplicación terminal preferida del sistema. + +**TODO:** asociar //Guake// a una combinación apropiada de teclas. + +También instalo //rxvt// teoricamente más ligero y que puedes complementar con //tmux//. + + +sudo apt install rxvt-unicode + + +==== tmux ==== + +//tmux// combinado por ejemplo con //rxvt// nos da la misma funcionalidad que //Terminator//, además merece la pena aprender a usarlo por que instalado en servidores remotos es increíblemente útil. + + +sudo apt install tmux + + + * [[https://leanpub.com/the-tao-of-tmux/read|El tao de tmux]] + * [[https://www.askapache.com/linux/rxvt-xresources/|rxvt customizations]] + +===== Dropbox ===== + +Lo instalamos desde el software manager. Previamente debemos instalar el paquete ''%%python3-gpg%%'' y desde el software manager instalamos también el paquete ''%%Caja-dropbox%%'', para tener las integraciones de Dropbox en el gestor de ficheros. + +===== pCloud ===== + +Instalado desde su página web. + +===== Chrome ===== + +No lo he instalado. + +Puede instalarse desde [[https://www.google.com/chrome/|la página web de Chrome]] + +===== Thorium ===== + +Bajamos los binarios desde [[https://thorium.rocks/|su página web]]. Descomprimimos en ''%%~/apps%%'' y ajustamos los ficheros ''%%.desktop%%'' para que apunten a los binarios. (ver la siguiente sección [[#varias-aplicaciones-instaladas-de-binarios|Varias aplicaciones instaladas de binarios]]) + +===== Varias aplicaciones instaladas de binarios ===== + +Lo recomendable en un sistema POSIX es instalar los programas adicionales en ''%%/usr/local%%'' o en ''%%/opt%%''. Yo soy más chapuzas y suelo instalar en ''%%~/apps%%'' por que el portátil es personal e intrasferible. En un ordenador compartido es mejor usar ''%%/opt%%''. + +En general cuando instalo en el directorio ''%%~/apps%%'' sigo los siguientes pasos: + + - Descargamos los binarios o //appimage// desde la web + - Descomprimo en un nuevo directorio para la aplicación, tomamos como ejemplo freeplane, así que el directorio se llamará: ''%%~/apps/mi_aplicacion%%'' en nuestro ejemplo ''%%~/apps/freeplane%%'' + - +Creamos enlace simbólico al que llamamos ''%%current%%''. Esto es para no editar los ficheros ''%%.desktop%%'' cada vez que actualicemos la versión del programa. El enlace puede apuntar a un directorio o a un binario, depende de como obtengamos la aplicación. En el caso de freeplane yo tengo la siguiente estructura + +freeplane +├── current -> freeplane-1.7.11 +├── freeplane-1.7.10 +└── freeplane-1.7.11 + + +Vemos que el enlace apunta a la versión más reciente de //freeplane//. + + - Añadimos la aplicación a los menús, al hacer esto se creará un fichero ''%%.desktop%%'' en el directorio ''%%~/.local/share/applications%%'' + +==== Freeplane ==== + +Para hacer mapas mentales, presentaciones, resúmenes, apuntes… La versión incluida en LinuxMint está un poco anticuada, descargamos el programa desde [[https://docs.freeplane.org/|la página web]]. + +==== Treesheets ==== + +Está bien para hacer chuletas rápidamente. Descargamos el //appimage// desde [[http://strlen.com/treesheets/|la web]] + +==== Telegram Desktop ==== + +Cliente de Telegram, descargado desde la [[https://desktop.telegram.org/|página web]]. El programa de instalación de Telegram ya se encarga de crear el fichero ''%%.desktop%%'' + +==== Tor browser ==== + +Descargamos desde la [[https://www.torproject.org/|página oficial del proyecto]] Descomprimimos en ''%%~/apps/%%'' y ejecutamos desde terminal: + + +cd ~/apps/tor-browser +./start-tor-browser.desktop --register-app + + +Tor se encarga tanto de crear el fichero ''%%.desktop%%'' como de mantenerse actualizado a la última versión. + +==== Brave browser ==== + +Instalamos siguiendo las instrucciones de la [[https://brave-browser.readthedocs.io/en/latest/installing-brave.html#linux|página web oficial]] + + +sudo apt install curl + +sudo curl -fsSLo /usr/local/share/keyrings/brave-browser-archive-keyring.gpg https://brave-browser-apt-release.s3.brave.com/brave-browser-archive-keyring.gpg + +echo "deb [signed-by=/usr/local/share/keyrings/brave-browser-archive-keyring.gpg] https://brave-browser-apt-release.s3.brave.com/ stable main"|sudo tee /etc/apt/sources.list.d/brave-browser-release.list + +sudo apt update + +sudo apt install brave-browser + + +==== TiddlyDesktop ==== + +Descargamos desde la [[https://github.com/Jermolene/TiddlyDesktop|página web]], descomprimimos y generamos la entrada en el menú. + +==== Joplin ==== + +Una herramienta libre para mantener notas sincronizadas entre el móvil y el portátil. + +Instalamos siguiendo las instrucciones de la [[https://joplinapp.org/|página web]] + + + wget -O - https://raw.githubusercontent.com/laurent22/joplin/master/Joplin_install_and_update.sh | bash + + +Joplin se instala en el directorio ''%%~/.joplin%%'' y crea su propia entrada en el menú. + +La primera vez que configuremos la sincronización de Joplin conviene hacer un borrado local con download desde el remoto. + +===== Terminal y shells ===== + +Por defecto tenemos instalado ''%%bash%%''. + +==== bash-git-promt ==== + +Para dejar configurado el //bash-git-prompt// seguimos las instrucciones de [[https://github.com/magicmonty/bash-git-prompt|este github]] + +==== zsh ==== + +Nos adelantamos a los acontecimientos, pero conviene tener instaladas las herramientas de entornos virtuales de python antes de instalar //zsh// con el plugin para //virtualenvwrapper//. + + +apt install python-is-python3 +apt install python3-all-dev +apt install python3-virtualenv python3-virtualenvwrapper +apt install pipx python3-poetry + + +Para //zsh// vamos a usar [[https://github.com/zsh-users/antigen|antigen]], así que nos lo clonamos en ''%%~/apps/%%'' + + +cd ~/apps +git clone https://github.com/zsh-users/antigen + + +También vamos a usar [[https://github.com/olivierverdier/zsh-git-prompt|zsh-git-prompt]], así que lo clonamos también: + + +cd ~/apps +git clone https://github.com/olivierverdier/zsh-git-prompt + + +Para el ''%%zsh-git-prompt%%'' clonamos el fichero ''%%zshrc.sh%%'' desde nuestro repo de configuraciones. + +Clonamos el fichero ''%%~/.zshrc%%'' desde nuestro repo de configuraciones. De momento es mejor comentar la linea del tema : + + +antigen theme gnzh + + +Para usar //virtualenvwrapper// hay que decidir en que directorio queremos salvar los entornos virtuales. El obvio seria ''%%~/.virtualenvs%%'' la alternativa sería ''%%~/.local/share/virtualenvs%%''. + +El que escojamos lo tenemos que crear y añadirlo a nuestro ''%%~/.profile%%'' con las líneas: + + +# WORKON_HOME for virtualenvwrapper +if [ -d "$HOME/.virtualenvs" ] ; then + WORKON_HOME="$HOME/.virtualenvs" +fi + + +Después de seguir estos pasos basta con arrancar el //zsh// + +//Antigen// ya se encarga de descargar todos los plugins que queramos utilizar en zsh. Todos el software se descarga en ''%%~/.antigen%%'' + +Para configurar el [[https://github.com/olivierverdier/zsh-git-prompt|zsh-git-prompt]], que inspiró el bash-git-prompt. + +He modificado el fichero ''%%zshrc.sh%%'' de ''%%zsh-git-prompt%%'' cambiando la linea `echo “$STATUS”: + + +#echo "$STATUS" +if [[ "$__CURRENT_GIT_STATUS" == ": 0 0 0 0 0 0" ]]; then + echo "" +else + echo "$STATUS" +fi + + +También he cambiado el fichero del tema //gnzh// en ''%%~/.antigen/bundles/robbyrussell/oh-my-zsh/themes/gnzh.zsh-theme%%'' por que me interesa ver la versión python asociada a cada virtualenv. + +//zsh// viene por defecto en mi instalación, en caso contrario: + + +apt install zsh + + +Cuando estemos contentos con nuestro ''%%zsh%%'' tendremos que ejecutar ''%%chsh -s /usr/bin/zsh%%'' + +====== Utilidades ====== + +===== Utilidades variadas ===== + + * **gpick con** +//Agave// y //pdftk// ya no existen, nos pasamos a //gpick// y //poppler-utils// +''%%sudo apt install gpick%%'' + + * **graphviz** +Una utilidad de generación de gráficos que uso a veces. También es útil para ''%%web2py%%'' y para `org-roam +''%%sudo apt install graphviz%%'' + + * **sqlite3** +Un motor de bases de datos sencillo que se uso a menudo +''%%sudo apt install sqlite3%%'' + + * **cheat** Chuletas de comandos habituales, se instala desde los fuentes ejecutando ''%%go install github.com/cheat/cheat/cmd/cheat@latest%%'' (ver [[https://github.com/cheat/cheat/|su github]]) + * **cheat.sh** Echa una mirada a su página web: http://cheat.sh/, es casi idéntico al anterior pero disponible desde cualquier ordenador con conexión. + * **gparted** +Instalamos //gparted// para poder formatear memorias usb +''%%sudo apt install gparted%%'' + + * **wkhtmltopdf** +Para pasar páginas web a pdf +''%%sudo apt install wkhtmltopdf%%'' + + * **lsd** ''%%ls%%'' potenciado, instalamos el paquete desde los fuentes con ''%%cargo install lsd%%'' (ver [[https://github.com/Peltoche/lsd|la página del proyecto]] + * **bat** ''%%cat%%'' potenciado, instalamos el paquete desde los fuentes con ''%%cargo install bat%%'' [[https://github.com/sharkdp/bat|ver la página del proyecto]] + * **nmap ndiff ncat** +''%%nmap%%'' nos permite realizar mapeos de subredes en nuestras redes locales. Por ejemplo para localizar dispositivos enganchados a nuestra red. ''%%ndiff%%'' nos permite comparar escaneos realizados con ''%%nmap%%'' y ''%%ncat%%'' hace todo tipo de cosas (mira en la red) +''%%sudo apt install nmap ndiff ncat%%'' + + * **rofi** +El super conmutador de ventanas (y muchas más cosas). +Creamos el fichero ''%%~/.config/rofi/config.rasi%%'' con el siguiente contenido + +configuration { + modi: "drun,run,ssh,combi"; + font: "mensch 16"; + combi-modi: "window,drun,ssh"; +} +@theme "fancy" + + +Asociamos un atajo de teclado al comando: ''%%rofi -show drun%%'' + + +===== autokey ===== + +Instalamos [[https://github.com/autokey/autokey|autokey]] siguiendo [[https://github.com/autokey/autokey/wiki/Installing#debian-and-derivatives|las instrucciones para instalarlo con paquetes debian]] + +Me he descargado la última estable en el Legion y la beta en el Acer. + +Después de descargar los paquetes Debian ejecutamos los siguientes comandos (para la estable): + + +VERSION=0.95.10-0 +sudo dpkg --install autokey-common_0.95.10-0_all.deb autokey-gtk_0.95.10-0_all.deb +sudo apt --fix-broken install + + +El único paquete que se instala a mayores en el python del sistema sería ''%%python3-pyinotify%%'' + +Si estamos usando un entorno virtual con pyenv creo que sería mejor usar la instalación con ''%%pip%%'' ([[https://github.com/autokey/autokey/wiki/Installing#pip-installation|ver documentación]]) + +Para lanzar la aplicación ejecutamos: ''%%python3 -m autokey.gtkui%%'' + +====== Internet ====== + +===== Rclone ===== + +Instalamos desde la página web(https:%%//%%rclone.org/), descargando el fichero ''%%.deb%%''. + +==== Recetas rclone ==== + +Copiar directorio local en la nube: + + +rclone copy /localdir hubic:backup -vv + + +Si queremos ver el directorio en la web de Hubic tenemos que copiarlo en //default//: + + +rclone copy /localdir hubic:default/backup -vv + + +Sincronizar una carpeta remota en local: + + +rclone sync hubic:directorio_remoto /home/salvari/directorio_local -vv + + +==== Referencias ==== + + * [[https://elblogdelazaro.gitlab.io//articles/rclone-sincroniza-ficheros-en-la-nube/|Como usar rclone (blogdelazaro)]] + * [[https://elblogdelazaro.gitlab.io//articles/rclone-cifrado-de-ficheros-en-la-nube/|y con cifrado (blogdelazaro)]] + * [[https://rclone.org/docs/|Documentación]] + +===== Syncthing ===== + +Seguimos las instrucciones en [[https://apt.syncthing.net/|su página web]]: + + +sudo curl -L -o /etc/apt/keyrings/syncthing-archive-keyring.gpg https://syncthing.net/release-key.gpg +# Add the "stable" channel to your APT sources: +echo "deb [signed-by=/etc/apt/keyrings/syncthing-archive-keyring.gpg] https://apt.syncthing.net/ syncthing stable" | sudo tee /etc/apt/sources.list.d/syncthing.list +sudo apt update +sudo apt install syncthing + + +===== Nyxt ===== + +Instalado desde el Software Manager (via flathub) + +===== Qutebrowser ===== + +Instalamos desde los repos con ''%%sudo apt install qutebrowser%%''. + +===== Palemoon ===== + +Un fork de //Firefox// con menos chorradas. Instalado con el paquete ''%%deb%%'' descargado de su [[https://software.opensuse.org/download.html?project=home:stevenpusser&package=palemoon|página web]] + +===== LibreWolf ===== + +Instalado el paquete flatpak desde el Software Manager + +==== Plugins instalados ==== + +Conviene estudiar la documentación de los //add-ons// recomendados, disponible [[https://librewolf-community.gitlab.io/docs/addons/|aqui]]. + + * KeepassXC-Browser + * Necesitamos instalar el KeepassXC, el que viene en los repos es un poco antiguo podemos instalar desde PPA + * Es imprescindible hacer un link con ''%%ln -s ~/.mozilla/native-messaging-hosts ~/.librewolf/native-messaging-hosts%%'' + * Clear URLs + * Mozilla Multiaccount Containers + +===== Netsurf ===== + +**NOTA**: Aún no instalado en Xia + +Un navegador ultraligero (aunque no funciona con muchas páginas, solo para webs austeras) Instalado via flathub con ''%%flatpak install netsurf%%'' + +===== Lagrange ===== + +Un navegador para el protocolo //Gemini//. Instalado con la //appimage// desde su [[https://git.skyjake.fi/gemini/lagrange|página web]] + +===== Castor ===== + +**NOTA**: Aún no instalado en Xia + +Otro navegador para el protocolo //Gemini// programado en //Rust//. Instalado desde las fuentes siguiendo instrucciones de su [[https://sr.ht/~julienxx/Castor/|página web]] + +===== Whalebird: Cliente de Mastodon ===== + +Descargada //appimage// desde [[https://whalebird.social/en|la página web de la aplicación]]. + +===== Sengi: Cliente de Mastodon ===== + +Instalada //appimage// desde su [[https://github.com/NicolasConstant/sengi|github]] + +====== Window Managers adicionales ====== + +===== i3wm ===== + +Añadimos el repo: + + +cd ~/tmp +/usr/lib/apt/apt-helper download-file https://debian.sur5r.net/i3/pool/main/s/sur5r-keyring/sur5r-keyring_2021.02.02_all.deb keyring.deb SHA256:cccfb1dd7d6b1b6a137bb96ea5b5eef18a0a4a6df1d6c0c37832025d2edaa710 + +sudo dpkg -i ./keyring.deb +sudo echo "deb http://debian.sur5r.net/i3/ $(grep '^DISTRIB_CODENAME=' /etc/lsb-release | cut -f2 -d=) universe" >> /etc/apt/sources.list.d/sur5r-i3.list +sudo apt update +sudo apt install i3 + + +===== qtile ===== + +Vamos a describir la instalación del //Qtile// en un //virtualenv// dedicado. Si te bajas la versión estable de //Qtile// desde su [[http://qtile.org|página web]] en el paquete vienen un montón de script auxiliares que te permiten hacer la instalación aislada en un //virtualenv// pero lo voy a hacer a mano para tenerlo controlado con ''%%pyenv%%''. + + * Creamos el //virtualenv// ''%%qtile%%'' basado en la versión 3.10.0 que teniamos instalada previamente: + + +# Creamos el directorio de trabajo +mkdir /qtile +cd /qtile + +# OPCIONAL: Descargamos el qtile estable de la página web +# sólo si quieres curiosear los scripts auxiliares +wget https://github.com/qtile/qtile/archive/v0.18.1.tar.gz +tar xvzf v0.18.1.tar.gz +rm v0.18.1.tar.gz + +# Creamos el entorno virtual +pyenv virtualenv 3.10.0 qtile +pyenv local qtile +# Instalamos los paquetes iniciales (comunes a mis entornos) +pip install --upgrade pip setuptools wheel + +# instalamos los requisitos +pip install --no-cache-dir xcffib +pip install --no-cache-dir cairocffi + +# Instalamos la versión estable de qtile +pip install --no-cache-dir qtile + + +Con esto ya estamos listos, podríamos arrancar //Qtile// con ''%%qtile start%%'', pero no puede funcionar claro. Para que arranque correctamente, tenemos que lanzarlo en un servidor X. (ver el punto “[[#lanzar-window-managers-con-xephyr|Lanzar Window Managers con Xephyr]]”) + +==== Configurar Qtile en virtualenv para arrancer desde el Lightdm ==== + +Como ''%%root%%'' nos creamos un script ''%%launch_qtile%%'' en ''%%/usr/local/bin%%'', con el siguiente contenido + + +#!/bin/bash +source '/home/user/.pyenv/versions/3.10.0/envs/qtile/bin/activate' +qtile start + + +Le damos permisos de ejecución con ''%%chmod 755 launch_qtile%%'' (ojo a los permisos para //all// que si no son estos no le gusta a //Lightdm//) + +También como ''%%root%%'' creamos el fichero ''%%/usr/share/xsessions/qtile.desktop%%'' con el contenido: + + +[Desktop Entry] +Name=Qtile +Comment=Qtile Session +Exec=launch_qtile +Type=Application +Keywords=wm;tiling + + +Y con esto tendremos Qtile disponible en //Lightdm//. + +===== Lanzar Window Managers con Xephyr ===== + +Para probar (o configurar) los //Window Managers// sin salir de nuestra sesión de Mate podemos usar Xephyr, si no lo tienes instalado ejecuta: + + +sudo apt update +sudo apt install xserver-xephyr + + +Para lanzar un //Xserver// usaríamos un comando como: + + +Xephyr -ac -screen 800x600 -br -reset -terminate 2> /dev/null :1 & + + + * ****-ac**** Autorizar conexiones de clientes indiscriminadamente (//disable access restrictions//) + * ****-screen**** Especificar la geometría de la pantalla. + * ****-br**** La ventana raiz tendrá fondo negro + * ****-reset**** Reset al terminar el último cliente + * ****-terminate**** Finalizar cuando se resetee el servidor + * ****2> /dev/null**** Mandar los mensajes de error al limbo (alias **NE** en nuestro pc) + * ****:1**** Arrancar el server en el DISPLAY=1 + +Asi que si queremos arrancar por ejemplo el //i3wm// podríamos hacer un script con las siguientes lineas: + + +Xephyr -ac -screen 800x600 -br -reset -terminate 2> /dev/null :1 & +export DISPLAY=:1 +i3 + + +Para //Qtile// bastaria con cambiar ''%%i3%%'' por ''%%qtile start%%'' + +====== Comunicación con dispositivos Android ====== + +===== scrcpy ===== + +''%%sudo apt install scrcpy%%'' + +===== Heimdall ===== + +Para flashear roms en moviles + + +sudo apt install heimdall-flash heimdall-flash-frontend + + +====== Documentación ====== + +===== Vanilla LaTeX ===== + +Para instalar la versión más reciente de LaTeX hago la instalación desde [[https://www.ctan.org/|ctan]] + +Una vez instalado usamos //equivs// para generar un paquete ''%%deb%%'' y que nuestro sistema sepa que tenemos //texlive// instalado. + + +cd ~ +mkdir tmp +cd tmp +wget http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz +tar xzf install-tl-unx.tar.gz +cd install-tl-xxxxxx + + +La parte xxxxxx varía en función del estado de la última versión de LaTeX disponible. + + +sudo ./install-tl + + +Una vez lanzada la instalación podemos desmarcar las opciones que instalan la documentación y las fuentes. Eso nos obligará a consultar la documentación on line pero ahorrará practicamente el 50% del espacio necesario. En mi caso sin doc ni src ocupa 2,3Gb + + +mkdir -p /opt/texbin +sudo ln -s /usr/local/texlive/2024/bin/x86_64-linux/* /opt/texbin + + +Por último para acabar la instalación añadimos ''%%/opt/texbin%%'' al //PATH//. Para //bash// y //zsh// basta con añadir al fichero ''%%~/.profile%%'' las siguientes lineas: + + +# adds texlive to my PATH +if [ -d "/opt/texbin" ] ; then + PATH="$PATH:/opt/texbin" +fi + + +En cuanto a //fish// (si es que lo usas, claro) tendremos que modificar (o crear) el fichero ''%%~/.config/fish/config.fish%%'' y añadir la siguiente linea: + + +set PATH $PATH /opt/texbin + + +==== Falsificando paquetes ==== + +Ya tenemos el //texlive// instalado, ahora necesitamos que el gestor de paquetes sepa que ya lo tenemos instalado. + + +sudo apt install equivs --no-install-recommends +mkdir -p /tmp/tl-equivs && cd /tmp/tl-equivs +equivs-control texlive-local + + +Alternativamente para hacerlo más fácil podemos descargarnos un fichero ''%%texlive-local%%''ya preparado, ejecutando: + + +wget http://www.tug.org/texlive/files/debian-equivs-2023-ex.txt +/bin/cp -f debian-equivs-2023-ex.txt texlive-local + + +Editamos la versión (si queremos) y procedemos a generar el paquete //deb//. + + +equivs-build texlive-local + + +Ahora podemos instalar el paquete con ''%%dpkg%%'' También conviene instalar //texinfo// (que hará que se instale //texcommon//) y opcionalmente se puede instalar //lmodern//. + + +sudo apt install texinfo +sudo dpkg -i texlive-local_2024-1_all.deb + + +Todo listo, ahora podemos instalar cualquier paquete debian que dependa de //texlive// sin problemas de dependencias, aunque no hayamos instalado el //texlive// de Debian. + +==== Fuentes ==== + +Para dejar disponibles las fuentes opentype y truetype que vienen con texlive para el resto de aplicaciones: + + +sudo cp $(kpsewhich -var-value TEXMFSYSVAR)/fonts/conf/texlive-fontconfig.conf /etc/fonts/conf.d/09-texlive.conf +sudo nano /etc/fonts/conf.d/09-texlive.conf + + +Borramos la linea: + + +/usr/local/texlive/20xx/texmf-dist/fonts/type1 + + +Y ejecutamos: + + +sudo fc-cache -fsv + + +Actualizaciones Para actualizar nuestro //latex// a la última versión de todos los paquetes: + + +sudo /opt/texbin/tlmgr update --self +sudo /opt/texbin/tlmgr update --all + + +También podemos lanzar el instalador gráfico con: + + +sudo /opt/texbin/tlmgr --gui + + +Para usar el instalador gráfico hay que instalar previamente: + + +sudo apt-get install perl-tk --no-install-recommends + + +Lanzador para el actualizador de //texlive//: + + +mkdir -p ~/.local/share/applications +/bin/rm ~/.local/share/applications/tlmgr.desktop +cat > ~/.local/share/applications/tlmgr.desktop << EOF +[Desktop Entry] +Version=1.0 +Name=TeX Live Manager +Comment=Manage TeX Live packages +GenericName=Package Manager +Exec=gksu -d -S -D "TeX Live Manager" '/opt/texbin/tlmgr -gui' +Terminal=false +Type=Application +Icon=system-software-update +EOF + + +===== Tipos de letra ===== + +Creamos el directorio de usuario para tipos de letra: + + +mkdir ~/.local/share/fonts + + +===== Fuentes Adicionales ===== + +Me he descargado de internet la fuente [[https://robey.lag.net/downloads/mensch.ttf|Mensch]] el directorio de usuario para los tipos de letra: ''%%~/.local/share/fonts%%'' + +Además he clonado el repo [[https://github.com/ProgrammingFonts/ProgrammingFonts|//Programming Fonts//]] aunque parece que las fuentes están un poco anticuadas. + + +cd ~/wherever +git clone https://github.com/ProgrammingFonts/ProgrammingFonts +cd ~/.local/share/fonts +ln -s ~/wherever/ProgrammingFonts/Menlo . + + +La fuente Hack la he instalado directamente desde el [[https://sourcefoundry.org/hack/|sitio web]] + +===== Pandoc ===== + +//Pandoc// es un traductor entre formatos de documento. Está escrito en Haskell y es increiblemente útil. De hecho este documento está escrito con //Pandoc//. + +Instalado el //Pandoc// descargando paquete ''%%.deb%%'' desde [[http://pandoc.org/installing.html|la página web del proyecto]]. + +Además podríamos descargarnos plantillas de Pandoc desde [[https://github.com/jgm/pandoc-templates|este repo]] ejecutando los siguientes comandos: + + +mkdir ~/.pandoc +cd ~/.pandoc +git clone https://github.com/jgm/pandoc-templates templates + + +Las plantillas no son imprescindibles pero si quieres aprender a usarlas o hacer alguna modificación viene bien tenerlas. + +===== Quarto ===== + +**NOTA**: Aún no instalado en Xia + +Un sistema de generación de documentación que usa //Pandoc//, instalado con el paquete ''%%.deb%%'' descargado desde [[https://quarto.org/docs/get-started/|la página web del proyecto]] + +**TODO**: Completar el tutorial inicial + +===== Algunos editores adicionales ===== + +Dos editores opcionales para hacer pruebas: + + * **Obsidian** Instalado con //appimage// descargado desde la [[https://obsidian.md/|página web]] **NOTA**: Aún no instalado en Xia + * **Zettlr** Instalado con fichero ''%%.deb%%'' descargado desde [[https://www.zettlr.com/|su página web]] + +===== Calibre ===== + +La mejor utilidad para gestionar tu colección de libros electrónicos. + +Ejecutamos lo que manda la página web: + + +sudo -v && wget -nv -O- https://download.calibre-ebook.com/linux-installer.sh | sudo sh /dev/stdin + + +El programa queda instalado en ''%%/opt/calibre%%''. Se puede desinstalar con el comando ''%%sudo calibre-unistall%%''. + +Para usar el calibre con el ebook //Kobo Glo//: + + * Desactivamos todos los plugin de Kobo menos el //Kobo Touch Extended// + * En //Preferences::Add your own Columns// creamos una columna //MyShelves// con identificativo ''%%#myshelves%%'', esto es para crear colecciones en el ebook como me apetezca + * En las opciones del plugin: + * //Collections, covers and uploads// + * En la opción //Collection columns// añadimos las columnas ''%%Series,MyShelves%%'' + * Marcamos las opciones //Create collections// y //Delete empty bookshelves// + * Marcamos //Modify CSS// + * //Metadata on device and advanced// + * //Set series information// + * //Extended// + * //Send books as kepubs// + +Algunos enlaces útiles: + + * (https:%%//%%github.com/jgoguen/calibre-kobo-driver) + * (http:%%//%%www.lectoreselectronicos.com/foro/showthread.php?15116-Manual-de-instalaci%C3%B3n-y-uso-del-plugin-Kobo-Touch-Extended-para-Calibre) + * (http:%%//%%www.redelijkheid.com/blog/2013/7/25/kobo-glo-ebook-library-management-with-calibre) + * (https:%%//%%www.netogram.com/kobo.htm) + +===== Scribus ===== + +Scribus es un programa libre de composición de documentos. con Scribus puedes elaborar desde los folletos de una exposición hasta una revista o un poster. + +Instalamos desde los depósitos oficiales de Mint. + +Se podría instalar desde ppa para instalar la última versión: + + +sudo add-apt-repository ppa:ubuntuhandbook1/scribus +sudo apt update +sudo apt install scribus scribus-data scribus-template + + +==== Cambiados algunos valores por defecto ==== + +He cambiado los siguientes valores en las dos versiones, non están exactamente en el mismo menú pero no son díficiles de encontrar: + + * Lenguaje por defecto: **English** + * Tamaño de documento: **A4** + * Unidades por defecto: **milimeters** + * Show Page Grid: **Activado** + * Dimensiones de la rejilla: + * Mayor: **30 mm** + * Menor: **6mm** + * En opciones de salida de //pdf// indicamos que queremos salida a impresora y no a pantalla. Y también que no queremos //spot colors//, que serían sólo para ciertas impresoras industriales, así que activamos la opción //Convert Spot Colors to Process Colors//. + +Siempre se puede volver a los valores por defecto sin mucho problema (hay una opción para ello) + +Referencia [[https://www.youtube.com/watch?v=3sEoYZGABQM&list=PL3kOqLpV3a67b13TY3WxYVzErYUOLYekI|aquí]] + +==== Solucionados problemas de hyphenation ==== + +//Scribus// no hacia correctamente la separación silábica en castellano, he instalado los paquetes: + + * hyphen-es + * hyphen-gl + +Y ahora funciona correctamente. + +===== Zotero: Gestor de referencias bibliográficas ===== + +Por cortesía de [[https://github.com/retorquere/zotero-deb|Emiliano Heyns]] tenemos disponible el paquete de Zotero para Debian y Ubuntu. + + +wget -qO- https://raw.githubusercontent.com/retorquere/zotero-deb/master/install.sh | sudo bash +sudo apt update +sudo apt install zotero + + +A mayores instalamos el //addon// **//Better Bibtex//** descargando la última versión disponible desde [[https://retorque.re/zotero-better-bibtex/installation/|aquí]] e instalando en Zotero con la opción “Instalar desde fichero”. + +====== Desarrollo software ====== + +===== Paquetes esenciales ===== + +Estos son los paquetes esenciales para empezar a desarrollar software en Linux. + + +sudo apt install build-essential checkinstall make automake cmake autoconf \ +git git-core git-crypt dpkg wget + + +===== Git ===== + + +---- + +**NOTA**: Si quieres instalar la última versión de git, los git developers tienen un ppa para ubuntu, si quieres tener el git más actualizado: + + +sudo add-apt-repository ppa:git-core/ppa +sudo apt update +sudo apt upgrade + + + +---- + +Control de versiones distribuido. Imprescindible. Para //Linux Mint// viene instalado por defecto. + +Configuración básica de git: + + +git config --global ui.color auto +git config --global user.name "Pepito Pérez" +git config --global user.email "pperez@mikasa.com" + +git config --global alias.cl clone + +git config --global alias.st "status -sb" +git config --global alias.last "log -1 --stat" +git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %Cblue<%an>%Creset' --abbrev-commit --date=relative --all" +git config --global alias.dc "diff --cached" + +git config --global alias.unstage "reset HEAD --" + +git config --global alias.ci commit +git config --global alias.ca "commit -a" + +git config --global alias.ri "rebase -i" +git config --global alias.ria "rebase -i --autosquash" +git config --global alias.fix "commit --fixup" +git config --global alias.squ "commit --squash" + +git config --global alias.cp cherry-pick +git config --global alias.co checkout +git config --global alias.br branch +git config --global core.editor emacs + + +===== Emacs ===== + +Instalado emacs desde los repos: + + +sudo aptitude install emacs + + +===== Lenguaje de programación D (D programming language) ===== + +El lenguaje de programación D es un lenguaje de programación de sistemas con una sintaxis similar a la de C y con tipado estático. Combina eficiencia, control y potencia de modelado con seguridad y productividad. + +==== D-apt e instalación de programas ==== + +Configurado //d-apt//, instalados todos los programas incluidos + + +sudo wget http://master.dl.sourceforge.net/project/d-apt/files/d-apt.list -O /etc/apt/sources.list.d/d-apt.list +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EBCF975E5BA24D5E +sudo apt update + + +Instalamos todos los programas asociados excepto //textadept// que no uso. + + +sudo apt install dmd-compiler dmd-tools dub dcd dfix dfmt dscanner + + +==== DCD ==== + +Una vez instalado el DCD tenemos que configurarlo creando el fichero ''%%~/.config/dcd/dcd.conf%%'' con el siguiente contenido: + + +/usr/include/dmd/druntime/import +/usr/include/dmd/phobos + + +Podemos probarlo con: + + +dcd-server & +echo | dcd-client --search toImpl + + +==== gdc ==== + +Instalado con: + + +sudo aptitude install gdc + + +==== ldc ==== + +Instalado con: + + +sudo aptitude install ldc + + +Para poder ejecutar aplicaciones basadas en Vibed, necesitamos instalar: + + +sudo apt-get install -y libssl-dev libevent-dev + + +==== Emacs para editar D ==== + +Instalados los siguientes paquetes desde Melpa + + * d-mode + * flymake-d + * flycheck + * flycheck-dmd-dub + * flychek-d-unittest + * auto-complete (desde melpa) + * ac-dcd + +Referencias * (https:%%//%%github.com/atilaneves/ac-dcd) * (https:%%//%%github.com/Hackerpilot/DCD) + +===== C, C++ ===== + +==== Instalación de Gnu Global ==== + +Para instalar las dependencias, previamente instalamos: + + +sudo apt install ncurses-dev id-utils exuberant-ctags python-pygments + + +Con ''%%ctags --version%%'' nos aseguramos de que se llama a Exuberant y no el ctags que instala Emacs. Si no es así habrá que revisar la definición del ''%%PATH%%'' + +''%%python-pygments%%'' no es necesario para C o C++, pero añade funcionalidad a Global (hasta 25 lenguajes de programación más) + +No podemos instalar Global desde los repos de Ubuntu, está muy anticuado y genera bases de datos enormes y lentas. Tendremos que compilarlo. + +Nos bajamos las fuentes del programa desde [[https://www.gnu.org/software/global/|la página oficial]] En el momento de escribir esto se trata de la versión 6.6.4. + +Descomprimimos los fuentes y los compilamos con: + + +./configure --prefix=/usr/local --with-exuberant-ctags=/usr/bin/ctags +make +sudo make install + + +He comprobado que make uninstall funciona correctamente, las librerías quedan instaladas en ''%%/usr/local/lib/gtags%%'' y los ejecutables en ''%%/usr/local/bin%%'' + +===== Rust ===== + +Instalamos siguiendo las instrucciones de [[https://www.rust-lang.org/tools/install|aqui]] (Hacemos la instalación por defecto) + + +curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh + + stable installed - rustc 1.47.0 (18bf6b4f0 2020-10-07) + + +Rust is installed now. Great! + +To get started you need Cargo's bin directory ($HOME/.cargo/bin) in your PATH +environment variable. Next time you log in this will be done +automatically. + +To configure your current shell run source $HOME/.cargo/env + + +Yo comento la linea del fichero ''%%.zprofile%%'' por que mi ''%%.zshrc%%'' ya lee el fichero ''%%.profile%%'' + +Para desinstalar ''%%rust%%'' bastaría con ejecutar ''%%rustup self uninstall%%'' + +Para actualizar la instalación: ''%%rustup update%%'' + +==== RLS ==== + +Seguimos las instrucciones de la página oficial de [[https://emacs-lsp.github.io/lsp-mode/page/lsp-rust/|LSP]] y de [[https://github.com/rust-lang/rls|RLS]] + + +rustup update +rustup component add rls rust-analysis rust-src + + +==== Algunas utilidades de sistema escritas en Rust ==== + +Instalamos: + + +cargo install tealdeer # tldr tldr +cargo install du-dust # tldr dust +cargo install fd-find # tldr fd +cargo install exa # tldr exa +cargo install tokei # tldr tokei +cargo install gitui # gitui --help +cargo install ripgrep # tldr rg +cargo install bat # tldr bat +cargo install lsd # tldr lsd +cargo install git-delta # tldr delta +cargo install --locked navi # navi fn welcome (requires fzf and tldr) +cargo install --locked zoxide # tldr zoxide +cargo install --locked zellij # tldr zellij +cargo install atuin # tldr atuin + + +**Nota**: ''%%fzf%%'' instalado descargando el binario en ''%%~/.local/bin%%'' desde su github + +===== golang ===== + +Bajamos el paquete con la última versión desde [[https://golang.org/dl/|la página oficial]]. + +Descomprimimos como //root// en ''%%/usr/local/%%'' + + +sudo tar -C /usr/local -xvzf go1.15.7.linux-amd64.tar.gz + + +Añadimos al path con las siguientes lineas en ''%%~/.profile%%'': + + +#golang +if [ -d "/usr/local/go" ] ; then + export GOROOT="/usr/local/go" + PATH="$PATH:$GOROOT/bin" +fi +if [ -d "$HOME/work/development/gocode" ] ; then + export GOPATH="$HOME/work/development/gocode" + PATH="$PATH:$GOPATH/bin" +fi + + +==== Instalación de gopls un servidor de LSP para editores: ==== + +Desde un directorio **que no sea el GOPATH** + + +GO111MODULE=on go get golang.org/x/tools/gopls@latest + + +==== golint ==== + + +go get -u golang.org/x/lint/golint + + +==== Utilidades escritas en go ==== + + +go install github.com/jesseduffield/lazygit@latest +go install github.com/cheat/cheat/cmd/cheat@latest + + +===== Processing ===== + +Bajamos el paquete de la [[https://processing.org/|página web]], descomprimimimos en ''%%~/apps/%%'', en las nuevas versiones incorpora un script de instalación que ya se encarga de crear el fichero //desktop//. + +La última versión incorpora varios modos de trabajo, he descargado el modo //Python// para probarlo. + +===== openFrameworks ===== + +Nos bajamos los fuentes para linux 64bits desde [[https://openframeworks.cc|la página web del proyecto]], y las descomprimimos en un directorio para proceder a compilarlas. + +No hay más que seguir [[https://openframeworks.cc/setup/linux-install/|las instrucciones de instalación para linux]]. + +La instalación no es demasiado intrusiva si tienes Ubuntu 18 o mayor y una versión reciente del gcc. + +En la primera pregunta que nos hace es necesario contestar que no. De lo contrario falla la compilación. + +Añade los siguientes paquetes a nuestro sistema + + +installing OF dependencies +OF needs to install the following packages using apt-get: +curl libjack-jackd2-0 libjack-jackd2-dev freeglut3-dev libasound2-dev libxmu-dev libxxf86vm-dev g++ libgl1-mesa-dev libglu1-mesa-dev libraw1394-dev libudev-dev libdrm-dev libglew-dev libopenal-dev libsndfile-dev libfreeimage-dev libcairo2-dev libfreetype6-dev libssl-dev libpulse-dev libusb-1.0-0-dev libgtk-3-dev libopencv-dev libassimp-dev librtaudio-dev libboost-filesystem-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-libav gstreamer1.0-pulseaudio gstreamer1.0-x gstreamer1.0-plugins-bad gstreamer1.0-alsa gstreamer1.0-plugins-base gstreamer1.0-plugins-good gdb libglfw3-dev liburiparser-dev libcurl4-openssl-dev libpugixml-dev libgconf-2-4 libgtk2.0-0 libpoco-dev +Do you want to continue? [Y/n] + + +No te olvides de compilar también el //Project Generator//. + +===== Python ===== + +En Linux Mint Vanessa ya no tenemos //python2// (aunque podemos instalarlo) + +Para dejar a //python3// como python de sistema instalamos el paquete: + +''%%sudo apt install python-is-python3%%'' + +Después podemos comprobar la versión: + + +python -V +Python 3.10.6 + + +==== Paquetes de sistema relacionados con python que instalamos ==== + +Son los que ya comentamos en la sección de instalación de zsh, como ya dijimos conviene que instalemos los paquetes de desarrollo: + + +sudo apt install python3-dev +sudo apt install python3-all-dev +sudo apt install python3-virtualenv python3-virtualenvwrapper python3-virtualenv-clone +sudo apt install pipx +# sudo apt install python3-poetry + + +Ademas añadimos las siguientes lineas al fichero ''%%~/.profile%%'': + + +# WORKON_HOME for virtualenvwrapper +if [ -d "$HOME/.virtualenvs" ] ; then +WORKON_HOME="$HOME/.virtualenvs" +fi + + +[[https://virtualenvwrapper.readthedocs.io/en/latest/command_ref.html|Aquí]] tenemos la referencia de comandos de //virtualenvwrapper//. + +==== pyenv ==== + +Instalamos los pre-requisitos: + + +sudo apt-get update +sudo apt-get install --no-install-recommends make build-essential \ +libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev \ +wget curl llvm libncurses5-dev xz-utils tk-dev \ +libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev + + +Podemos clonar el repo en nuestro ''%%home%%'': + + +git clone https://github.com/pyenv/pyenv.git ~/.pyenv + + +Pero también podemos añadir el //bundle// para //Antigen// en el fichero ''%%.zshrc%%'' y dejar que se encargue de todo. (Este es el camino que yo sigo) + + +antigen bundle mattberther/zsh-pyenv + + +Añadimos al fichero ''%%~/.profile%%'': + + +# pyenv +if [ -d "$HOME/.pyenv" ] ; then + export PYENV_ROOT="$HOME/.pyenv" + export PATH="$PYENV_ROOT/bin:$PATH" +fi + + +Y configuramos en ''%%~/.bashrc%%'' y en ''%%~/.zshrc%%'' (aunque en el último no es necesario tocar nada si usamos el //bundle// para //Antigen//): + + +if command -v pyenv 1>/dev/null 2>&1; then + eval "$(pyenv init -)" +fi + + +Podemos probar que todo funciona con: ''%%pyenv install -l%%'' + +Una vez instalado hay que estudiarse [[https://github.com/pyenv/pyenv/blob/master/COMMANDS.md|la referencia de comandos]] + +==== poetry ==== + +Podríamos instalar con: + + +curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python3 - + + +Dejamos la activación solo en el fichero ''%%~ /.profile%%'', añadiendo las siguientes lineas: + + +# poetry +if [ -d "$HOME/.poetry"] ; then + PATH="$HOME/.poetry/bin:$PATH" +fi + + +Las actualizaciones se realizan con ''%%poetry self update%%'' + +También podríamos instalarlo como un paquete de Ubuntu. + +==== Instalación de bpython y ptpython ==== + +[[https://bpython-interpreter.org/|//bpython//]] instalado desde repos ''%%sudo apt install bpython%%'' + +[[https://github.com/prompt-toolkit/ptpython|//ptpython//]] instalado en un virtualenv para probarlo + +==== Jupyter ==== + +Una instalación para pruebas. + + +mkvirtualenv -p /usr/bin/python3 jupyter +python -m pip install jupyter + + +==== Instalamos python3.11 ==== + +''%%python3.11%%'' está ya disponible en los repos oficiales. + +Para dejarla instalada (yo no lo instalo): + + +sudo apt install python3.11 python3.11-dev python3.11-venv + + +===== neovim ===== + +Vamos a probar //neovim//, ahora mismo la versión de los repos de Ubuntu está actualizada a la penúltima versión (0.4.3). También podemos descargar el appimage desde [[https://github.com/neovim/neovim/releases|la página web]] + +Es de esperar que alguna vez vuelvan a tener el neovim disponible en los repos de la aplicación: + + +sudo apt-add-repository ppa:neovim-ppa/stable +sudo apt update +sudo apt install neovim + + +Para instalar los módulos de python creamos un //virtualev// que más tarde añadiremos al fichero ''%%init.vim%%''. + + +mkvirtualenv -p /usr/bin/python3 neovim3 +sudo pip install --upgrade neovim +deactivate + + +Revisar [[https://neovim.io/doc/user/provider.html#provider-python|esto]] + + +---- + +**NOTA**: El siguiente paso ya no parece necesario, las alternativas se han actualizado con la instalación del //neovim//. + + +---- + +Para actualizar las alternativas: + + +sudo update-alternatives --install /usr/bin/vi vi /usr/bin/nvim 60 +sudo update-alternatives --config vi +sudo update-alternatives --install /usr/bin/vim vim /usr/bin/nvim 60 +sudo update-alternatives --config vim + + +=== Install vim-plug === + +Ejecutamos: + + +curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \ + https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim + + +Configuramos el fichero de configuración de //nvim// (''%%~/.config/nvim/init.vim%%''): + + +" Specify a directory for plugins +" - For Neovim: ~/.local/share/nvim/plugged +" - Avoid using standard Vim directory names like 'plugin' +call plug#begin('~/.local/share/nvim/plugged') + +if has('nvim') + Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' } +else + Plug 'Shougo/deoplete.nvim' + Plug 'roxma/nvim-yarp' + Plug 'roxma/vim-hug-neovim-rpc' +endif + +Plug 'deoplete-plugins/deoplete-jedi' + +" Initialize plugin system +call plug#end() + +let g:deoplete#enable_at_startup = 1 + +" set python enviroments +let g:python_host_prog = '/full/path/to/neovim2/bin/python' +let g:python3_host_prog = '/home/salvari/.virtualenvs/neovim3/bin/python' + + + +La primera vez que abramos //nvim// tenemos que instalar los plugin por comando ejecutando: ''%%:PlugInstall%%'' + +**Instalación de ''%%dein%%''** + +|**Nota**: | +|Solo hay que instalar uno de los dos o //dein// o //plug-vim//. Yo uso | +|//plug-vim// así que esto es sólo una referencia. | + +https://github.com/Shougo/dein.vim + + +" Add the dein installation directory into runtimepath +set runtimepath+=~/.config/nvim/dein/repos/github.com/Shougo/dein.vim + +if dein#load_state('~/.config/nvim/dein') + call dein#begin('~/.config/nvim/dein') + + call dein#add('~/.config/nvim/dein/repos/github.com/Shougo/dein.vim') + call dein#add('Shougo/deoplete.nvim') + call dein#add('Shougo/denite.nvim') + if !has('nvim') + call dein#add('roxma/nvim-yarp') + call dein#add('roxma/vim-hug-neovim-rpc') + endif + + call dein#end() + call dein#save_state() +endif + +filetype plugin indent on +syntax enable + + +===== Firefox developer edition ===== + +El rollo de siempre, descargar desde [[https://www.mozilla.org/en-US/firefox/developer/|la página web]] descomprimir en ''%%~/apps%%'' y crear un lanzador. + +===== Navegadores cli ===== + +Herramientas útiles para depuración web + + +sudo apt install httpie links + + +===== MariaDB ===== + +Ahora siempre uso los servidores de base de datos dockerizados. Pero sigue siendo interesante instalar los clientes en nuestro sistema con ''%%sudo apt install mariadb-client%%'' + +===== Squirrel SQL Client ===== + +Bajamos el zip de estándar desde [[http://www.squirrelsql.org/|la página web de Squirrel]] (yo prefiero no usar el instalador) + +Como de costumbre descomprimimos en ''%%~/apps%%'' y creamos una entrada en nuestro menú de aplicaciones. + +Nos descargamos también el //java connector// para MariaDB. Desde la página oficial. Nos interesa el fichero ''%%maria-java-client-2.6.0.jar%%'' + +Configuramos el driver para que sepa donde está el fichero ''%%.jar%%'' y ya estamos listos para trabajar. + +El fichero ''%%squirrel-sql.sh%%'' necesita que lo lancemos desde el directorio del script. + +===== R y R-studio ===== + +Primero instalamos la última versión de R en nuestro pc: + + +wget -qO- https://cloud.r-project.org/bin/linux/ubuntu/marutter_pubkey.asc \ + |gpg --dearmor -o /usr/local/share/keyrings/cran-archive-keyring.gpg + +. /etc/os-release +sudo echo "deb [signed-by=/usr/local/share/keyrings/cran-archive-keyring.gpg ] \ +https://cloud.r-project.org/bin/linux/ubuntu ${UBUNTU_CODENAME}-cran40/" \ +| sudo tee /etc/apt/sources.list.d/cran.list + +sudo apt update +sudo apt install r-base + + +==== R-studio ==== + +Ojo, tenemos //R-studio Server// y //R-studio Desktop//, en tu portátil casi seguro que quieres el //Desktop// y no el //Server//. + +Para //R-studio Server// descargamos la última versión disponible de //R-studio// desde la [[https://rstudio.com/products/rstudio/download-server/debian-ubuntu/|página web]] + +Instalamos con //gdebi// (basta con clicar sobre el fichero //.deb//) + +Para //R-studio Desktop// descargamos la última versión disponible desde la [[https://www.rstudio.com/products/rstudio/download/#download|página web]] + +Igual que el //Server// instalamos el paquete del //Desktop// con //gedebi//. + +===== Octave ===== + +Instalado desde flatpak + + +sudo flatpak install flathub org.octave.Octave + + +===== go Hugo ===== + +Generador de sitios web estáticos. + +Instalado fichero ''%%.deb%%'' desde las sección de //releases// de la página web: [[https://github.com/gohugoio/hugo|hugo github]] **Asegúrate de instalar el Hugo Extended** + +====== Desarrollo hardware ====== + +===== Arduino IDE ===== + +Bajamos los paquetes de la página [[https://www.arduino.cc|web]], descomprimimimos en //~/apps/arduino//. + +La distribución del IDE incluye ahora un fichero ''%%install.sh%%''que se encarga de hacer la integración del IDE en los menús de Linux. + +Además también incluye un script (''%%arduino-linux-setup.sh%%'') para crear las //devrules// y que además desinstala el driver //modemmanager// y crea grupos nuevos en el sistema si no existen. + +No tengo claro lo de desinstalar el driver así que comentamos la sección que borra el //modemmanager// del fichero ''%%arduino-linux-setup.sh%%'' y lo ejecutamos para que instale el resto. + +Yo añado el fichero 99-arduino.rules que se encarga de inhibir el modemmanager para que no capture al CircuitPlayground Express: + + +# for arduino brand, stop ModemManager grabbing port +ATTRS{idVendor}=="2a03", ENV{ID_MM_DEVICE_IGNORE}="1" +# for sparkfun brand, stop ModemManager grabbing port +ATTRS{idVendor}=="1b4f", ENV{ID_MM_DEVICE_IGNORE}="1" + + +Después de añadir ficheros de reglas podemos recargar las reglas ejecutando: + +''%%udevadm control --reload-rules && udevadm trigger%%'' + +Tenemos que crear los ficheros ''%%.desktop%%''. + +==== Arduino IDE 2 ==== + +Descargamos el fichero //appmimage// de la página de Arduino y creamos el fichero ''%%.desktop%%''. + +==== Añadir soporte para Feather M0 ==== + +Arrancamos el IDE Arduino y en la opción de //Preferences::Aditional Board Managers URLs// añadimos la dirección ''%%https://adafruit.github.io/arduino-board-index/package_adafruit_index.json%%'', si tenemos otras URL, simplemente añadimos esta separada por una coma. + +Ahora desde el //Board Manager// instalamos: + + * Arduino SAMD Boards + * Adafruit SAMD Boards + +==== Añadir soporte para Circuit Playground Express ==== + +Bastaría con instalar //Arduino SAMD Boards// + +==== Añadir soporte para STM32 ==== + +Tenemos varias URL posibles para configurar en las preferencias del IDE Arduino: + + * https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json (esta deber ser la oficial) + +Pero la oficial no da soporte para usar el //st-link//, necesitamos añadir alguna más. + + * http://dan.drown.org/stm32duino/package_STM32duino_index.json (recomendada por Tutoelectro, nos da soporte para el st-link) + + +---- + +**NOTA**: Hasta donde yo se la de arriba es la única URL que permite usar el st-link + + +---- + +He optado por añadir los dos ficheros json al IDE, la oficial tiene buena pinta pero parece que no soporta st-link. Con la otra podremos usarlo sin problemas. + +Instalamos la biblioteca ''%%stm32 cores%%'' que corresponde al origen de software oficial y la biblioteca ''%%STM32F1xx/GD32F1xx%%'', esta última es la que nos dará soporte explícito para el st-link + +Lo probamos con el //Blink// y funciona perfectamente con las opciones de la [[#figura_1|Figura 1]] + +{{src/img/stm32_arduino_opts.jpg|Menu Arduino desplegado}} +Opciones Arduino para STM32 con st-link + + +==== Añadir soporte para ESP32 y ESP8266 ==== + +Añadimos las URL: + + * https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json (soporte para ESP32) + * http://arduino.esp8266.com/stable/package_esp8266com_index.json (soporte para ESP8266) + +Añadimos la librería: + + * ESP32 (de espressif) + +==== Añadir biblioteca de soporte para Makeblock ==== + + +---- + +**Nota**: Pendiente de instalar + + +---- + +Clonamos el [[https://github.com/Makeblock-official/Makeblock-Libraries|repo oficial en github]]. + +Una vez que descarguemos las librerias es necesario copiar el directorio ''%%Makeblock-Libraries/makeblock%%'' en nuestro directorio de bibliotecas de Arduino. En mi caso ''%%~/Arduino/libraries/%%''. + +Una vez instaladas las bibliotecas es necesario reiniciar el IDE Arduino si estaba arrancado. Podemos ver si se ha instalado correctamente simplemente echando un ojo al menú de ejemplos en el IDE, tendríamos que ver los ejemplos de //Makeblock//. + +Un detalle importante para programar el Auriga-Me es necesario seleccionar el micro Arduino Mega 2560 en el IDE Arduino. + +===== Pinguino IDE ===== + + +---- + +**Nota**: Pendiente de instalar + + +---- + +Tenemos el paquete de instalación disponible en su página [[http://pinguino.cc/download.php|web]] + +Ejecutamos el programa de instalación. El programa descargará los paquetes Debian necesarios para dejar el IDE y los compiladores instalados. + +Al acabar la instalación he tenido que crear el directorio //~/Pinguino/v11//, parece que hay algún problema con el programa de instalación y no lo crea automáticamente. + +El programa queda correctamente instalado en ///opt// y arranca correctamente, habrá que probarlo con los micros. + +===== stm32 cubeide ===== + +Nos bajamos el instalador genérico. Tendremos que: + + * aceptar un montón de acuerdos de licencias + * indicarle un directorio de instalación (en mi caso ''%%~/apps/st/st/stm32cubeide_1.4.0%%'') + * darle la password de root para instalar ficheros de udev, concretamente: + * ''%%udev/rules.d/49-stlinkv1.rules%%'' + * ''%%udev/rules.d/49-stlinkv2-1.rules%%'' + * ''%%udev/rules.d/49-stlinkv2.rules%%'' + * ''%%udev/rules.d/49-stlinkv3.rules%%'' + * ''%%udev/rules.d/99-jlink.rules%%'' + +===== esp-idf ===== + + +---- + +**MUY IMPORTANTE** es más fácil instalar el esp-idf a través de //Platformio// pero dejo las instrucciones de instalación que usé en su dia como referencia. + + +---- + +Instalamos las dependencias (cmake ya lo tenemos instalado) + + +---- + +**NOTA**: No es necesario instalar los paquetes de python que nos especifican en las instrucciones de instalación del //esp-idf//, se instalarán automáticamente en el siguiente paso. + + +---- + + +sudo apt-get install gperf cmake ninja-build ccache libffi-dev libssl-dev + + +Ahora creamos un directorio para nuestro //tool-chain//: + + +mkdir ~/esp +cd ~/esp +git clone --recursive https://github.com/espressif/esp-idf + + +También es necesario que nuestro usuario pertenezca al grupo ''%%dialout%%'', pero eso ya deberíamos tenerlo hecho de antes. + +Una vez clonado el repo ejecutamos el script de instalación + + +cd ~/esp/esp-idf +./install.sh + + +Este script nos va a dejar instaladas todas las herramientas necesarias en el directorio ''%%~/.expressif%%'' + +**Nota**: para que funcione correctamente en Linux Mint es necesario que el script ''%%tools/idf_tools.py%%'' apunte al python3 de nuestro sistema. Basta con editar la primera linea //shebang// del script. + +Estas son las bibliotecas que deja instaladas: + + +Installing ESP-IDF tools +Installing tools: xtensa-esp32-elf, xtensa-esp32s2-elf, esp32ulp-elf, esp32s2ulp-elf, openocd-esp32 + + +Para empezar a trabajar bastará con hacer un //source// del fichero ''%%~/apps/esp/esp-idf/export.sh%%'': + + +. ~/apps/esp/esp-idf/export.sh + + +===== KiCAD ===== + +En la [[http://kicad-pcb.org/download/linux-mint/|página web del proyecto]] nos recomiendan el ppa a usar para instalar la última versión estable: + + +sudo add-apt-repository --yes ppa:kicad/kicad-5.1-releases +sudo apt-get update +sudo apt install kicad + + +Paciencia, el paquete ''%%kicad-packages3d%%'' tarda un buen rato en descargarse. + +Algunas librerías alternativas: + + * [[https://github.com/freetronics/freetronics_kicad_library|Freetronics]] una libreria que no solo incluye Shield para Arduino sino una completa colección de componentes que nos permitirá hacer proyectos completos. [[http://www.freetronics.com|Freetronics]] es una especie de BricoGeek australiano, publica tutoriales, vende componentes, y al parecer mantiene una biblioteca para KiCAD. La biblioteca de Freetronics se mantiene en un repo de github. Lo suyo es incorporarla a cada proyecto, por que si la actualizas se pueden romper los proyectos que estes haciendo. + * [[http://meta-blog.eklablog.com/kicad-librairie-arduino-pretty-p930786|eklablog]] Esta biblioteca de componentes está incluida en el github de KiCAD, así que teoricamente no habría que instalarla en nuestro disco duro. + +==== Actualizar a KiCAD 6.0 ==== + +Hacemos un ''%%sudo apt purge%%'' de todos los paquetes del antiguo KiCAD. Desactivamos el antiguo repo y ejecutamos: + + +sudo add-apt-repository --yes ppa:kicad/kicad-6.0-releases +sudo apt update +sudo apt install --install-recommends kicad +# If you want demo projects +# sudo apt install kicad-demos + + +No hay ''%%demos%%'' de momento en el nuevo KiCAD 6.0 + +==== Actualizar a KiCAD 7 ==== + + +sudo add-apt-repository --yes ppa:kicad/kicad-7.0-releases +sudo apt update +sudo apt install --install-recommends kicad + + +===== Wireviz ===== + +Una herramienta para documentar cableados de proyectos. Es una aplicación //Python// que usa //Graphviz//, lo he instalado con ''%%pipx%%''. + + +pyenv global ve_sys +pipx install wireviz +pyenv global system + + +===== Analizador lógico ===== + +Mi analizador es un OpenBench de Seedstudio, [[http://dangerousprototypes.com/docs/Open_Bench_Logic_Sniffer|aquí hay mas info]] + +==== Sigrok ==== + +Instalamos **Sigrok**, simplemente desde los repos de Debian: + + +sudo aptitude install sigrok + + +Al instalar **Sigrok** instalamos también **Pulseview**. + +Si al conectar el analizador, echamos un ojo al fichero //syslog// vemos que al conectarlo se mapea en un puerto tty. + +Si arrancamos **Pulseview** (nuestro usuario tiene que estar incluido en el grupo //dialout//), en la opción //File::Connect to device//, escogemos la opción //Openbench// y le pasamos el puerto. Al pulsar la opción //Scan for devices// reconoce el analizador correctamente como un //Sump Logic Analyzer//. + +==== Sump logic analyzer ==== + +Este es el software recomendado para usar con el analizador. + +Descargamos el paquete de la [[https://www.sump.org|página del proyecto]], o más concretamente de [[https://www.sump.org/projects/analyzer/|esta página]] y descomprimimos en //~/apps//. + +Instalamos las dependencias: + + +sudo apt install librxtx-java + + +Editamos el fichero //~/apps/Logic Analyzer/client/run.sh// y lo dejamos así: + + +#!/bin/bash + +# java -jar analyzer.jar $* +java -cp /usr/share/java/RXTXcomm.jar:analyzer.jar org.sump.analyzer.Loader + + +Y ya funciona. + +==== OLS ==== + + +---- + +**Nota**: Pendiente de instalar + + +---- + +[[https://www.lxtreme.nl/ols/|Página oficial]] + +===== IceStudio ===== + +Instalamos dependencias con ''%%sudo apt install xclip%%'' + +Bajamos el //AppImage// desde el [[https://github.com/FPGAwars/icestudio|github de IceStudio]] y lo dejamos en ''%%~/apps/icestudio%%'' + +===== PlatformIO ===== + +==== VS Code ==== + +Añadimos el origen de software: + + +curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg +sudo install -o root -g root -m 644 packages.microsoft.gpg /usr/share/keyrings/ +sudo sh -c 'echo "deb [arch=amd64 signed-by=/usr/share/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list' + + +E instalamos + + +sudo apt update +sudo apt install code # alternativamente code-insiders (es como la versión beta, se pueden instalar los dos) + + +Ahora + + - lanzamos el editor + - abrimos el gestor de extensiones + - buscamos el platformio ide + - instalamos + +Seguimos las instrucciones de [[https://docs.platformio.org/en/latest/ide/vscode.html#quick-start|aqui]] + +==== Incluir platform.io CLI en el PATH ==== + +Esto es una malísima idea, **NO LO HAGAS** + +Las instrucciones indican que hagamos lo siguiente para usar Platformio desde linea de comandos pero no es conveniente hacerlo. + +Modificamos el fichero ''%%~/.profile%%'' añadiendo las siguientes lineas: + + +if [ -d "$HOME/.platformio/penv/bin"] ; then + PATH="$PATH:$HOME/.platformio/penv/bin" +fi + + +Si quieres usar Platformio desde linea de comandos, es mejor activar manualmente el entorno virtual con ''%%source ~/.platformio/penv/bin/activate%%'' + +==== vscodium ==== + + +wget -qO - https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo/raw/master/pub.gpg | gpg --dearmor | sudo dd of=/etc/apt/trusted.gpg.d/vscodium.gpg +echo 'deb https://paulcarroty.gitlab.io/vscodium-deb-rpm-repo/debs/ vscodium main' | sudo tee --append /etc/apt/sources.list.d/vscodium.list +sudo apt update && sudo apt install codium + + +===== RepRap ===== + +==== OpenScad ==== + +El OpenSCAD está disponible en los orígenes de software, así que ''%%sudo apt install openscad%%''. + +==== Slic3r ==== + +Descargamos la estable desde la [[https://slic3r.org|página web]] y como de costumbre descomprimimos en ''%%~/apps%%'' y creamos un lanzador con //MenuLibre// + +==== Slic3r Prusa Edition ==== + +Una nueva versión del clásico //Slic3r// con muchas mejoras. Descargamos la //appimage// desde la [[https://www.prusa3d.com/slic3r-prusa-edition/|página web]] y ya sabeis, descomprimir en ''%%~/apps%%'' y dar permisos de ejecución. + +==== ideaMaker ==== + +Una aplicación más para generar gcode con muy buena pinta, tenemos el paquete //deb// disponible en su [[https://www.raise3d.com/pages/ideamaker|página web]]. Instalamos con el gestor de software. + +==== Ultimaker Cura ==== + +Descargamos el //AppImage// desde la [[https://github.com/Ultimaker/Cura/releases|página web]] + +==== Pronterface ==== + +Seguimos las instrucciones para Ubuntu Focal: + +Instalamos las dependencias: ''%%sudo apt install libsdl2-dev%%'' + +Clonamos el repo: + + +cd ~/apps +git clone https://github.com/kliment/Printrun.git +cd Printrun +mkvirtualenv -p /usr/bin/python3 printrun +python -m pip install https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-20.04/wxPython-4.1.0-cp38-cp38-linux_x86_64.whl +pip install -r requirements.txt +# sudo apt-get install libdbus-glib-1-dev libdbus-1-dev + + +Y ya lo tenemos todo listo para ejecutar. + +===== Cortadora de vinilos ===== + +==== Inkcut ==== + +Instalado en un entorno virtual: + + +mkvirtualenv -p `which python3` inkcut + +sudo apt install libxml2-dev libxslt-dev libcups2-dev + +pip install PyQt5 + +pip install inkcut + + +==== Plugin para inkscape ==== + +Instalamos dependencias: + + +pip install python-usb + + +Instalamos el fichero ''%%.deb%%'' desde la web https://github.com/fablabnbg/inkscape-silhouette/releases + +===== Drone ===== + +==== qgroundcontrol ==== + +Descargamos [[https://s3-us-west-2.amazonaws.com/qgroundcontrol/latest/QGroundControl.AppImage|el appimage]] + +==== missionplanner ==== + +Para usar //Mission Planner// en Linux Mint se recomienda instalar los paquetes: + + +sudo apt install mono-complete festival + + +Descargamos el MissionPlanner desde [[https://firmware.ardupilot.org/Tools/MissionPlanner/MissionPlanner-latest.zip|aquí]] + +[[https://www.rcgroups.com/forums/showthread.php?2179591-Installing-MissionPlanner-1-3-X-on-Ubuntu-17-04|Descripción de la instalación]] + +Una vez descomprimido el ''%%zip%%'' ejecutamos: ''%%mono MissionPlanner.exe%%'' + +===== node-red ===== + +Para instalar node-red en linux necesitamos instalar primero ''%%node.js%%''. Hay varias formas de instalar ''%%node.js%%'', yo voy a optar por instalar ''%%nvm%%'' que es el **n**ode **v**ersion **m**anager. + +Para ello ejecutamos el siguiente comando (la versión actual de ''%%nvm%%'' es la 0.37.0) + + +curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.0/install.sh | bash + + +El script de instalación añade las siguientes lineas al fichero ''%%~/.bashrc%%'', nosotros las movemos al fichero ''%%~/.profile%%'' + + +export NVM_DIR="$HOME/.nvm" +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm +[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion + + +Para comprobar la instalación usamos ''%%command -v nvm%%'' que nos devolverá ''%%nvm%%''. ''%%which%%'' no funciona en este caso por que es un script para aplicarle ''%%source%%'' + +==== Instalación de node.js ==== + +Ahora que tenemos ''%%nvm%%'' instalado, ya podemos instalar fácilmente la versión o versiones que queramos de ''%%node.js%%'' + + +nvm ls-remote # para listar las versiones disponibles +nvm install node # instala la última versión disponible + + +==== Instalación de mosquitto ==== + +''%%mosquitto%%'' es un //mqtt broker// muy sencillo y completo, aunque no es capaz de aguantar cargas grandes, para aprender es perfecto. + + +sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa +sudo apt-get update +sudo apt install mosquitto mosquitto-clients + + +Con esto queda el servicio instalado y funcionando (''%%scs mosquitto%%'' o ''%%systemctl status mosquitto%%'') + +Si queremos el servicio parado para arrancarlo nosotros manualmente: + + +scsp mosquitto.service +scd mosquitto.service + + +Y sin alias sería: + + +sudo systemctl stop mosquitto.service +sudo systemctl disable mosquitto.service + + +Para arrancarlo cuando lo necesitemos le damos un //start// con ''%%scst mosquitto.service%%'' o ''%%sudo systemctl start mosquitto.service%%'' + +==== Instalación de Influxdb ==== + +Seguimos el método para ubuntu: + + +wget -qO- https://repos.influxdata.com/influxdb.key | sudo apt-key add - +#source /etc/lsb-release +DISTRIB_ID=ubuntu +DISTRIB_CODENAME=focal +echo "deb https://repos.influxdata.com/${DISTRIB_ID} ${DISTRIB_CODENAME} stable" | sudo tee /etc/apt/sources.list.d/influxdb.list + +apt update +apt install influxdb +apt install telegraf + + +==== Instalación de node-red ==== + +Una vez instalado el ''%%node.js%%'' instalar el ''%%node-red%%'' es muy fácil + + +nvm use node +npm install -g --unsafe-perm node-red + + +====== Aplicaciones de gráficos ====== + +===== LibreCAD ===== + +Diseño en 2D + + +sudo apt install librecad + + +===== FreeCAD ===== + +No hay ppa disponible para Ubuntu 20. + +Instalamos //AppImage// desde [[https://wiki.freecadweb.org/AppImage#FreeCAD_AppImages|aquí]] + +Dejo la instalación desde ppa como recordatorio. + + +sudo add-apt-repository ppa:freecad-maintainers/freecad-stable +sudo apt update +sudo install freecad + + + +---- + +**NOTA:** the ccx package brings CalculiX support to the FEM workbench, and needs to be installed separately. + + +---- + +===== Inkscape ===== + +El programa libre para creación y edición de gráficos vectoriales. + + +sudo add-apt-repository ppa:inkscape.dev/stable +sudo apt update +sudo apt install inkscape + + +===== Gimp ===== + +El programa para edición y retocado de imágenes. + +Parece que ahora mismo los repos están más actualizados que el ppa. Así que bastaría con: + + +sudo apt install gimp gimp-data gimp-texturize \ +gimp-data-extras gimp-gap gmic gimp-gmic + + +De todas formas dejo aquí las instrucciones para instalar desde el ppa por si hacen falta algún dia: + + +sudo apt remove gimp gimp-data +sudo add-apt-repository ppa:otto-kesselgulasch/gimp +sudo apt update +sudo apt upgrade +sudo apt install gimp gimp-data gimp-texturize \ +gimp-data-extras gimp-gap gmic gimp-gmic gimp-python + + +==== Plugins de Gimp ==== + +Para instalar los principales plugins basta con: + + +sudo apt install gimp-plugin-registry + + +===== Krita ===== + +La versión disponible en orígenes de software está bastante por detrás de la disponible en la web. Basta con descargar el //Appimage// desde la [[https://krita.org|página web]] + +Lo copiamos a ''%%~/apps/krita%%'' y creamos un lanzador con el editor de menús. + +Alternativamente también lo tenemos disponible por ppa en https://launchpad.net/~kritalime/+archive/ubuntu/ppa + +===== MyPaint ===== + +Desde el [[https://github.com/mypaint/|github]] tenemos disponible la última versión en formato //appimage//. La descargamos la dejamos en ''%%~/apps%%'' y creamos un acceso con //Menulibre//, como siempre. + +===== Alchemy ===== + +Igual que el //MyPaint// descargamos desde [[http://al.chemy.org|la página web]], descomprimimos en ''%%~/apps%%'' y creamos un accso con //Menulibre//. + +===== Capturas de pantalla ===== + +El [[https://flameshot.org|//flameshot//]] cubre el 99% de mis necesidades: ''%%sudo apt install flameshot%%'' instala la última versión, parece que el desarrollo se detuvo en 2022. + +El [[https://github.com/DamirPorobic/ksnip|//ksnip//]] por si tenemos que hacer una captura con retardo, puede instalarse también bajando el paquete ''%%.deb%%'' desde la página web. O bien instalando con apt (la versión estable no ha cambiado desde el 2023, en el momento de escribir esto) + +Shutter vuelve a estar disponible, al instalar desde este ppa ya queda con las opciones de edición habilitadas: + + +sudo add-apt-repository ppa:linuxuprising/shutter +sudo apt update +sudo apt install shutter + + +===== Reoptimizar imágenes ===== + +==== ImageMagick ==== + +Instalamos desde los repos, simplemente: + + +sudo apt install imagemagick + + +==== Imagine ==== + +Nos bajamos un //AppImage// desde el [[https://github.com/meowtec/Imagine/releases|github]] de la aplicación + +Tiene toda la pinta de que Imagine no me va con los graficos nvidia (con el doble monitor) + +===== dia ===== + +Un programa para crear diagramas + + +sudo apt install dia dia-shapes gsfonts-x11 + + +===== Blender ===== + +Bajamos el Blender linkado estáticamente de [[https://www.blender.org|la página web]] y lo descomprimimos en ''%%~/apps/blender%%''. + +El paquete incluye un fichero ''%%blender.desktop%%'' que podemos editar y copiar en ''%%~/.local/share/applications%%''. + +===== Structure Synth ===== + +Instalado desde repos, junto con sunflow para explorar un poco. + + +sudo apt install structure-synth sunflow + + +===== Heron animation ===== + +El proyecto parece abandonado. El software ya no funciona en el último linux. + +===== Stopmotion ===== + +Primero probamos el del repo: ''%%sudo apt install stopmotion%%'' + +===== Instalación del driver digiment para tabletas gráficas Huion ===== + +Descargamos el fichero ''%%.deb%%'' de [[https://github.com/DIGImend/digimend-kernel-drivers|la página web]] y funciona perfectamente. + +Para comprobar: + + +xinput --list +dkms status + + +La referencia para el antiguo método que usaba para instalar los drivers: + + * [[https://davidrevoy.com/article331/setup-huion-giano-wh1409-tablet-on-linux-mint-18-1-ubuntu-16-04|Aquí]] + +====== Sonido ====== + +===== Spotify ===== + +Spotify instalado desde las opciones de Linux Mint via flatpak. + +===== Audacity ===== + +Instalamos Audacity desde la página web descargando un //Appimage//. + +Instalamos también el plugin [[https://theaudacitytopodcast.com/chriss-dynamic-compressor-plugin-for-audacity/|Chris’s Dynamic Compressor plugin]] + +===== Clementine ===== + +La version disponible en los orígenes de software parece al dia: + + +sudo apt install clementine + + +===== somafm ===== + +Instalamos el cli con: + + +sudo apt install jq mpv +cd ~/.local/bin +wget https://raw.githubusercontent.com/rockymadden/somafm-cli/master/src/somafm +chmod 744 somafm + +somafm --help + +somafm ls +somafm listen defcon --quality=highest + + +====== Video ====== + +===== Shotcut ===== + +Nos bajamos la //AppImage// para Linux desde la [[https://www.shotcut.org/|página web]]. + +La dejamos en ''%%~/apps/video/shotcut%%'' y: + + +cd +chmod 744 Shotcutxxxxxx.AppImage +./Shotcutxxxxxx.AppImage + + +===== kdenlive ===== + +Está disponible [[https://kdenlive.org|en la web]] como ppa o como //appimage//. Lo he bajado como //appimage// para probarlo. + +===== Openshot ===== + +También descargado desde [[https://www.openshot.org|su web]] como //appimage//, para probar. Tienen un ppa disponible. + +===== Avidemux ===== + +Descargado //appimage// desde [[http://avidemux.sourceforge.net/|la web]] + +===== Handbrake ===== + +Instalado como flatpak desde [[https://handbrake.fr/|su web]]. + +===== Grabación de screencast ===== + +==== Vokoscreen, Kazam y SimpleScreenRecorder ==== + +Instalados desde los repos oficiales: + + +sudo apt update +sudo apt install vokoscreen vokoscreen-ng kazam simplescreenrecorder + + +Escoge el que más te guste. + +==== OBS ==== + +Añadimos el repositorio + + +sudo add-apt-repository ppa:obsproject/obs-studio +sudo apt update +sudo apt install obs-studio + + +===== Grabación de podcast ===== + +==== Mumble ==== + +Podemos instalarlo desde flatpak o bajarnos [[https://launchpad.net/~mumble/+archive/ubuntu/release/+packages|el paquete antiguo]] (parece que funciona bien). + +Mumble no está disponible desde el PPA, aunque dejo aquí las instrucciones por si lo corrigen. + + +sudo add-apt-repository ppa:mumble/release +sudo apt update + sudo apt install mumble + + +===== Clientes de youtube ===== + +==== smtube ==== + +Instalado el ppa siguiendo instrucciones de [[http://www.smtube.org/|su página web]]. + + +sudo add-apt-repository ppa:rvm/smplayer +sudo apt-get update +sudo apt-get install smtube + + +==== Freetube ==== + +Descargado el ''%%.deb%%'' desde [[https://freetubeapp.io/#download|su página web]]. + +====== Fotografía ====== + +===== Rawtherapee ===== + +Bajamos el AppImage desde la [[http://rawtherapee.com/|página web]] al directorio ''%%~/apps/image/rawtherapee%%''. + +Como siempre: + + - Hacemos el fichero ejecutable + - Creamos un enlace ''%%current%%'' + - Creamos un fichero ''%%.desktop%%'' + +===== Darktable ===== + +Instalamos ppa (ver [[https://software.opensuse.org/download/package?package=darktable&project=graphics%3Adarktable|esta web]]) + + +echo 'deb [signed-by=/usr/share/keyrings/darktable-archive-keyring.gpg] http://download.opensuse.org/repositories/graphics:/darktable/xUbuntu_22.04/ /' | sudo tee /etc/apt/sources.list.d/graphics:darktable.list +curl -fsSL https://download.opensuse.org/repositories/graphics:darktable/xUbuntu_22.04/Release.key | gpg --dearmor | sudo tee /usr/share/keyrings/darktable-archive-keyring.gpg > /dev/null +sudo apt update +sudo apt install darktable + + +Se instala la última versión de Darktable (4.2.0) + +===== Digikam ===== + +Instalado desde la [[https://www.digikam.org/|página web]] de la aplicación con appimage. + +===== Webcamoid ===== + +Descargada la appimage desde la [[https://webcamoid.github.io/|página web]] + +====== Seguridad ====== + +===== Autenticación en servidores por clave pública ===== + +Generar contraseñas para conexión servidores remotos: + + +cd ~ +ssh-keygen -b 4096 [-t dsa | ecdsa | ed25519 | rsa | rsa1] +cat .ssh/ + + +Solo resta añadir nuestra clave pública en el fichero ''%%authorized_keys%%'' del servidor remoto. + + +cat ~/.ssh/id_xxx.pub | ssh user@hostname 'cat >> .ssh/authorized_keys' + + +[[https://www.digitalocean.com/community/tutorials/understanding-the-ssh-encryption-and-connection-process|¿Cómo funciona esto?]] + +===== Claves gpg ===== + +''%%gpg --gen-key%%'' Para generar nuestra clave. + + * **Siempre** hay que ponerle una fecha de expiración, la puedes cambiar más tarde. + * **Siempre** hay que escoger la máxima longitud posible + +===== Seahorse ===== + +Para manejar todas nuestras claves con comodidad: + +''%%sudo apt install seahorse%%'' + +===== Conexión a github con claves ssh ===== + +Usando este método podemos conectarnos a github sin tener que teclear la contraseña en cada conexión. + +==== Claves ssh ==== + +Podemos echar un ojo a nuestras claves desde ''%%seahorse%%'' la aplicación de gestión de claves que hemos instalado. También podemos ver las claves que tenemos generadas: + + +ls -al ~/.ssh + + +En las claves listadas nuestras claves públicas aparecerán con extensión ''%%.pub%%'' + +También podemos comprobar que claves hemos añadido ya a nuestro agente ssh con: + + +ssh-add -l + + +Para generar una nueva pareja de claves ssh: + + +ssh-keygen -t rsa -b 4096 -C "your_email@example.com" + + +Podremos dar un nombre distintivo a los ficheros de claves generados y poner una contraseña adecuada a la clave. Si algún dia queremos cambiar la contraseña: + + +ssh-keygen -p + + +Ahora tenemos que añadir nuestra clave ssh en nuestra cuenta de github, para ello editamos con nuestro editor de texto favorito el fichero ''%%~/.ssh/id_rsa.pub%%'' y copiamos el contenido integro. Después pegamos ese contenido en el cuadro de texto de la web de github. + +Para comprobar que las claves instaladas en github funcionan correctamente: + + +ssh -T git@github.com +Hi salvari! You've successfully authenticated, but GitHub does not provide shell access. + + +Este mensaje indica que todo ha ido bien. + +Ahora en los repos donde queramos usar ssh debemos cambiar el remote: + + +git remote set-url origin git@github.com:$USER/$REPONAME.git + + +===== Signal ===== + +El procedimiento recomendado en la página oficial lo modifico para dejar las claves GPG en ''%%/usr/local/keyrings%%'' + + +# 1. Install our official public software signing key +wget -O- https://updates.signal.org/desktop/apt/keys.asc | gpg --dearmor > signal-desktop-keyring.gpg +cat signal-desktop-keyring.gpg | sudo tee -a /usr/local/share/keyrings/signal-desktop-keyring.gpg > /dev/null + +# 2. Add our repository to your list of repositories +echo 'deb [arch=amd64 signed-by=/usr/local/share/keyrings/signal-desktop-keyring.gpg] https://updates.signal.org/desktop/apt xenial main' |\ + sudo tee -a /etc/apt/sources.list.d/signal-xenial.list + +# 3. Update your package database and install signal +sudo apt update && sudo apt install signal-desktop + + +Parece que todo funciona correctamente pero necesité un reinicio del ordenador para que Signal arrancase correctamente. + +===== Element (cliente de matrix.org) ===== + +Instalamos con: + + +sudo apt install -y wget apt-transport-https + +sudo wget -O /usr/share/keyrings/element-io-archive-keyring.gpg \ +https://packages.element.io/debian/element-io-archive-keyring.gpg + +echo "deb [signed-by=/usr/share/keyrings/element-io-archive-keyring.gpg] \ +https://packages.element.io/debian/ default main" \ +| sudo tee /etc/apt/sources.list.d/element-io.list + +sudo apt update + +sudo apt install element-desktop + + +===== Lector DNI electrónico ===== + +Descargamos la aplicación en formato ''%%.deb%%'' desde [[https://www.dnielectronico.es/PortalDNIe/PRF1_Cons02.action?pag=REF_1112|la página de descargas del portal DNIe]]. + +Automáticamente nos instalará las dependecias: ''%%libccid%%'', ''%%pcsd%%'' y ''%%pinentry-gtk2%%''. A mayores instalamos: + + +sudo apt-get install pcsc-tools opensc + + +El opensc no es necesario para el DNIe, pero nos permite usar otras tarjetas. + +Como root ejecutamos pcsc_scan: + + +root@rasalhague:~# pcsc_scan +PC/SC device scanner +V 1.4.23 (c) 2001-2011, Ludovic Rousseau +Compiled with PC/SC lite version: 1.8.11 +Using reader plug'n play mechanism +Scanning present readers... +Waiting for the first reader... + + +Si insertamos el lector veremos algo como esto: + + +root@rasalhague:~# pcsc_scan +PC/SC device scanner +V 1.4.23 (c) 2001-2011, Ludovic Rousseau +Compiled with PC/SC lite version: 1.8.11 +Using reader plug'n play mechanism +Scanning present readers... +Waiting for the first reader...found one +Scanning present readers... +0: C3PO LTC31 v2 (11061005) 00 00 + +Wed Jan 25 01:17:20 2017 +Reader 0: C3PO LTC31 v2 (11061005) 00 00 + Card state: Card removed, + + +Si insertamos un DNI veremos que se lee la información de la tarjeta insertada: + + +Reader 0: C3PO LTC31 v2 (11061005) 00 00 + Card state: Card inserted, + + +y mas rollo + +Para abrir los certificados en el navegador Firefox, nos lo explica [[https://www.agenciatributaria.es/AEAT.internet/Inicio/Ayuda/_comp_Consultas_informaticas/Categorias/Firma_digital__certificado_o_DNIe__y_sistema_Cl_ve_PIN/DNI_electronico__DNIe_/Comprobaciones_tecnicas_para_el_funcionamiento_del_DNIe/Comprobaciones_tecnicas_del_DNIe_con_Mozilla_Firefox_y_Linux/Comprobaciones_tecnicas_del_DNIe_con_Mozilla_Firefox_y_Linux.shtml|esta página de la AEAT]] + +Como se puede ver el link de la AEAT, los pasos necesarios para Firefox son: + + - Vamos a preferencias y buscamos ‘cert’ + - En el diálogo de certificados abrimos los ''%%Dispositivos de Seguridad%%'' (//Security Devices//) + - Para dar de alta un nuevo dispositivo pulsamos el botón ''%%Cargar%%'' (//Load//) + - Damos un nombre (p.ej. ''%%DNIe%%'') y asociamos el driver: ''%%/usr/lib/libpkcs11-dnie.so%%'' + - Adicionalmente podemos ''%%Cargar%%'' (crear), otro dispositivo con el driver ''%%opensc%%'', no es necesario para el DNIe pero nos añade soporte para otras tarjetas. (Nombre: OtrasTarjetas, Driver: `/usr/lib/x86_64-linux-gnu/pkcs11/opensc-pkcs11.so) + + +---- + +**NOTA**: + +Para cada tarjeta puede hacer falta un driver diferente, tendrás que investigar con ayuda del ''%%pcsc_scan%%'' y herramientas similares. + + +---- + +===== Instalación de wireguard. ===== + +Instalamos con: + + +sudo apt install wireguard + + +====== Virtualizaciones y contenedores ====== + +===== Instalación de virtualBox ===== + +Instalamos desde los repos de Ubuntu + + +sudo apt install virtualbox virtualbox-ext-pack virtualbox-guest-additions-iso virtualbox-guest-x11 + + +===== Docker ===== + +Tenemos que añadir el repositorio correspondiente a nuestra distribución: + + +# Be safe +sudo apt remove docker docker-engine docker.io +sudo apt autoremove +sudo apt update + +# Install pre-requisites +sudo apt install ca-certificates curl gnupg lsb-release + +# Import the GPG key + sudo mkdir -m 0755 -p /usr/local/share/keyrings + curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/local/share/keyrings/docker.gpg + +# Add the repo for Docker + +echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/usr/local/share/keyrings/docker.gpg] https://download.docker.com/linux/debian \ + $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + +# Update the package database + +sudo apt update +# + +apt-cache policy docker-ce + +sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin + +sudo gpasswd -a username docker + + +Esto dejará el servicio //docker// funcionando y habilitado (arrancará en cada reinicio del ordenador) + +La forma de pararlo es: + + +sudo systemctl stop docker +sudo systemctl disable docker +systemctl status docker + + +Añadimos el //bundle// **docker** en nuestro fichero ''%%~/.zshrc%%'' para tener autocompletado en comandos de docker. + +Para usar //docker// tendremos que arrancarlo, con los alias de nuestro sistema para //systemd// ejecutamos: + + +scst docker # para arrancar el servicio + +scsp docker # para parar el servicio + + +====== Utilidades para mapas y cartografía ====== + +===== josm ===== + +Descargamos y añadimos la clave gpg: + + +wget -q https://josm.openstreetmap.de/josm-apt.key -O- | sudo apt-key add - + + +Añadimos el origen de software: + + +sudo add-apt-repository "deb [arch=amd64] https://josm.openstreetmap.de/apt $(. /etc/os-release; echo "$UBUNTU_CODENAME") universe" + + +Y ahora procedemos a la instalación: + + +sudo apt update +sudo apt install openjfx josm + + +Alternativamente también podemos instalar la versión “nightly” con el siguiente comando, pero tendréis actualizaciones diarias: + + +sudo apt josm-latest + + +Ya estamos listos para editar Open Street Map offline. + +===== MOBAC ===== + +Bajamos el paquete desde [[http://mobac.sourceforge.net/|la página web]] y descomprimimos en ''%%~/apps/mobac%%'' como de costumbre nos creamos una entrada de menú con //MenuLibre//. + +Conviene bajarse wms adicionales para MOBAC y leerse [[http://mobac.sourceforge.net/wiki/index.php/Custom_XML_Map_Sources|la wiki]] + +==== Referencias ==== + +*[Cartografía digital] (https:%%//%%digimapas.blogspot.com.es/2015/01/oruxmaps-vii-mapas-de-mobac.html) + +===== QGIS ===== + +Añadimos la clave gpg: + + +wget -q https://qgis.org/downloads/qgis-2019.gpg.key -O- | sudo apt-key add - + + +Ejecutamos: + + +sudo add-apt-repository "deb [arch=amd64] https://qgis.org/debian $(. /etc/os-release; echo "$UBUNTU_CODENAME") main" + + +E instalamos como siempre + + +sudo apt update +sudo apt install qgis + + +==== Referencias ==== + + * [[https://mappinggis.com/2015/09/como-conectar-con-servicios-wms-y-wfs-con-arcgis-qgis-y-gvsig/|Conectar WMS con QGIS]] + * [[https://www.altergeosistemas.com/blog/2014/03/28/importando-datos-de-osm-en-qgis-2/|Importar OSM en QGIS]] + * [[http://learnosm.org/es/osm-data/osm-in-qgis/|Learn OSM]] + * [[http://www.qgistutorials.com/es/docs/downloading_osm_data.html|QGIS Tutorials]] + +====== Recetas variadas ====== + +===== Añadir las claves GPG de un repo ===== + +**Este método está obsoleto y no se recomienda** + + +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F7E06F06199EF2F2 + + +Hasta ahora añadíamos las claves usando el programa ''%%apt-key%%'' como se describe arriba. El programa añade las claves en el “llavero” ''%%/etc/apt/trusted.gpg%%''. El gestor de paquetes ''%%apt%%'' confía ciegamente en las claves de este llavero. Eso permite que cualquier clave presente en el “llavero” sirva para instalar cualquier programa. No hay una relación unívoca entre claves y programas. + +Para evitar el //warning// podríamos almacenar las claves en ''%%/etc/apt/trusted.d%%'', cada clave en si fichero separado. Pero eso dejaría el verdadero problema de establecer una relación entre clave y repo sin solucionar. + +Si seguimos las recomendaciones de **//Debian//**, deberíamos tener un directorio solo accesible por ''%%root%%''. Por ejemplo ''%%/usr/local/share/keyring%%'' y deberíamos almacenar las claves con nombres de la forma: ''%%-archive-keyring.gpg%%''. + +Una vez que tengamos la clave disponible debemos especificar para cada origen de software que clave le aplica para la autenticación de paquetes. + +**En resumen**: + + * Las claves gpg de los repo se quedarán almacenadas en ''%%/usr/local/share/keyring%%'', estarán en formato //dearmored// y con los nombres en la forma canónica ''%%-archive-keyring.gpg%%'' + * Las especificaciones de los orígenes de software harán referencia explícita a la clave que hay que usar para comprobarlas, es decir, tendrán la forma: ''%%deb [signed-by=/usr/share/keyrings/-archive-keyring.gpg] %%'' + +==== Si la clave ya estaba en trusted.gpg ==== + + +sudo apt-key list + +# Obtendremos un lista de claves e identificamos la conflictiva: +# +# pub rsa1024 2009-01-22 [SC] +# E1DD 2702 88B4 E603 0699 E45F A171 5D88 E1DF 1F24 +# uid [ unknown] Launchpad PPA for Ubuntu Git Maintainers +# + + +# Exportamos la clave al "llavero": +sudo apt-key export E1DF1F24 |sudo gpg --dearmour -o /usr/local/share/gitMaintainers-archive-keyring.gpg + +# Editamos el fichero de orígenes del sw y probamos a actualizar +sudo apt update + +# si todo va bien podemos borrar la clave del trusted.gpg +sudo apt-key del E1DF1F24 + + +==== Descargando una clave con wget ==== + + +wget -O- | \ +gpg --dearmor -o /usr/local/share/keyrings/-archive-keyring.gpg + + +==== Importando claves directamente de un keyserver ==== + +%%**%% REVISAR, ESTO FALLA %%**%% + + +sudo gpg --no-default-keyring --keyring /usr/local/share/keyrings/-archive-keyring.gpg \ +--keyserver --recv-keys + + +===== Solucionar problemas de menús duplicados usando menulibre ===== + +|**Nota**: Ya no uso //MenuLibre// | + +En el directorio ''%%~/.config/menus/applications-merged%%'' borramos todos los ficheros que haya. + +===== Mapear un servidor webdav en nuestro sistema de ficheros ===== + + +sudo apt install davfs2 + +sudo mount -t davfs -o uid= + + +Si en algún momento queremos reconfigurar el paquete podemos ejecutar ''%%dpkg-reconfigure davfs2%%'' + +Finalmente para mi usuario: + + +# añadimos el usuario al grupo davfs2 +sudo gpasswd -a davfs2 + + +Añadimos al fichero ''%%/etc/fstab%%'' la linea del servidor webdav: + + + davfs rw,user,uid=salvari,noauto 0 0 + + +Añadimos las credenciales al fichero ''%%~/.davfs2/secrets%%'' que sería una linea con ''%% %%'' + +Con eso ya podremos montar el webdav con nuestro usuario sin mas que ejecutar ''%%mount %%'' + +===== Solucionar el problema de “paquetes mantenidos” (The following packages have been kept back) ===== + +Cuando hacemos ''%%sudo apt upgrade%%'' si alguno de los paquetes que se va a actualizar tiene **nuevas dependencias** no se actualizará y nos dará el error del título. La solución pasa por ejecutar: + +''%%sudo apt install --only-upgrade %%'' + +===== Formatear memoria usb ===== + +“The driver descriptor says the physical block size is 2048 bytes, but Linux says it is 512 bytes.” + +Este comando borró todas las particiones de la memoria: + +''%%sudo dd if=/dev/zero of=/dev/sdd bs=2048 count=32 && sync%%'' + +I’m assuming your using gparted. + +First delete whatever partitions you can…just keep pressing ignore. + +There will be one with a black outline…you will have to unmount it…just right click on it and unmount. + +Again you will have to click your way through ignore..if fix is an option choose it also. + +Once all this is done… you can select the device menu and choose new partition table. + +Select MSdos + +Apply and choose ignore again. + +Once it’s done it show it’s real size. + +Next you can format the drive to whichever file system you like. + +It’s a pain in the behind this way, but it’s the only way I get it done..I put live iso’s on sticks all the time and have to remove them. I get stuck going through this process every time. + +===== Copiar la clave pública ssh en un servidor remoto ===== + +''%%cat /home/tim/.ssh/id_rsa.pub | ssh tim@just.some.other.server 'cat >> .ssh/authorized_keys'%%'' + +O también: + +''%%ssh-copy-id -i ~/.ssh/id_rsa.pub username@remote.server%%'' + +===== ssh access from termux ===== + +https://linuxconfig.org/ssh-into-linux-your-computer-from-android-with-termux + +===== SDR instalaciones varias ===== + +Vamos a trastear con un dispositivo [[https://www.rtl-sdr.com/|RTL-SDR.com]]. + +Tenemos un montón de información en el blog de [[https://sdrgal.wordpress.com/|SDR Galicia]] y tienen incluso una guia de instalación muy completa, pero yo voy a seguir una guía un poco menos ambiciosa, por lo menos hasta que pueda hacer el curso que imparten ellos mismos (SDR Galicia) + +La guía en cuestión la podemos encontrar [[https://ranous.wordpress.com/rtl-sdr4linux/|aquí]] + +Seguimos los pasos de instalación: + + * La instalación de ''%%git%%'', ''%%cmake%%'' y ''%%build-essential%%'' ya la tengo hecha. + + +sudo apt-get install libusb-1.0-0-dev + + +===== Posible problema con modemmanager y micros programables ===== + +Programando el //Circuit Playground Express// con el //Arduino IDE// tenía problemas continuos para hacer los //uploads//, al parecer el servicio //ModemManager// es el culpable, se pasa todo el tiempo capturando los nuevos puertos serie por que considera que todo es un modem. + +Una prueba rápida para comprobarlo: ''%%sudo systemctl stop ModemManager%%'' + +Con esto funciona todo bien, pero en el siguiente arranque volvera a cargarse. + +Para dar una solución definitiva se puede programar una regla para impedir que el //ModemManager// capture el puerto con un dispositivo + +Creamos un fichero con permisos de ''%%root%%'' en el directorio ''%%/etc/udev/rules.d%%'' que llamaremos: ''%%99-arduino.rules%%'' + +Dentro de ese fichero especificamos los codigos VID/PID que se deben ignorar: + + +# for arduino brand, stop ModemManager grabbing port +ATTRS{idVendor}=="2a03", ENV{ID_MM_DEVICE_IGNORE}="1" +# for sparkfun brand, stop ModemManager grabbing port +ATTRS{idVendor}=="1b4f", ENV{ID_MM_DEVICE_IGNORE}="1" + + +Ojo que si tienes SystemV no va a funcionar. + +https:%%//%%starter-kit.nettigo.eu/2015/serial-port-busy-for-avrdude-on-ubuntu-with-arduino-leonardo-eth/ + +https:%%//%%www.codeproject.com/Tips/349002/Select-a-USB-Serial-Device-via-its-VID-PID + +===== Programar los nanos con chip ch340 o ch341 ===== + +Linux mapea el chip correctamente en un puerto ''%%/dev/ttyUSB0%%'' y con eso basta, que no te lien con el cuento de “drivers para linux” + +Todo lo que hace falta es configurar correctamente el //Arduino IDE//, hay que escoger: + + +Board: "Arduino Nano" +Processor: "ATmega168" +Port: "/dev/ttyUSB0" + + +Y ya funciona todo. + +===== Linux Mint 20 es python agnostic ===== + +En principio no podemos invocar a ''%%python%%'' por que no se ha escogido una versión por defecto. + +Tenemos dos opciones: + + +apt install python-is-python2 +apt install python-is-python3 + + +===== Instalar chromium sin snapdrop ===== + +Este rodeo ya no es necesario en las versiones modernas de Linux Mint + + +sudo apt install keepassxc gnucash deluge rsync grsync rar unrar \ +zip unzip unace bzip2 lzop p7zip p7zip-full p7zip-rar \ +most mc tree neofetch fasd silversearcher-ag ack mate-tweak filezilla \ +rofi + + +===== Especificar como debe abrir los enlaces “magnet” el navegador mozilla ===== + + * Vamos al url ''%%about:config%%'' + * Añadimos la opción ''%%network.protocol-handler.external.magnet%%'' con valor ''%%True%%'' + * En //Settings// buscamos //Applications// y nos aseguramos de que no tenga marcado por defecto //Save// sino //Ask// + * La próxima vez que queramos descargar un enlace magnet nos preguntará que aplicación queremos usar. diff --git a/out/LinuxMintXia.epub b/out/LinuxMintXia.epub new file mode 100644 index 0000000000000000000000000000000000000000..adc741d3df666381a379014644725651cd3aa6c0 GIT binary patch literal 111884 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 z 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 literal 0 HcmV?d00001 diff --git a/out/LinuxMintXia.mw b/out/LinuxMintXia.mw new file mode 100644 index 0000000..e5c856e --- /dev/null +++ b/out/LinuxMintXia.mw @@ -0,0 +1,2703 @@ + += Introducción = + +Mis portatiles son: + +
    +
  • Un ordenador Acer 5755G con las siguientes características:

    +
      +
    • Core i5 2430M 2.4GHz

    • +
    • NVIDIA Geforce GT 540M (+ intel integrada)

    • +
    • 8Gb RAM

    • +
    • 750Gb HD

    + +

    Este portátil equipa una tarjeta ''Nvidia Geforce GT540M'' que resulta pertenecer a una rama muerta en el árbol de desarrollo de Nvidia.

    +

    Esta tarjeta provocaba todo tipo de problemas de sobrecalientamiento, pero en las últimas versiones de Linux instalando el driver de Nvidia parece funcionar correctamente.

  • +
  • Un Lenovo Legion

    +
      +
    • Core i7-9750H

    • +
    • Nvidia GTX1650-4Gb (+ intel integrada)

    • +
    • 16Gb RAM

    • +
    • 512Gb SSD + 1Tb HDD

    +
+ + += Instalación de Linux Mint = + +Lanzamos el programa de instalación desde una memoria USB con la ISO de la versión Mate. + +Al arrancar el USB podemos conectarnos a internet (en mi caso, me conecto a la wifi) + +Mis opciones de instalación: + +* Escojo el idioma ''Inglés'' (manias mias, suelo dejar mi Linux en inglés) +* Teclado: ''Español'' +* Marco la opción de instalar codecs + +Generalmente hago particiones: + +* 540 Mb para EFI +* 90 Gb para ''root'', es decir / +* El resto del disco SSD para /home +* El disco HDD lo monto en una sola partición en /store + + += Programas básicos = + +Lo primero de todo es hacer una actualización completa del sistema: + +sudo apt update +sudo apt upgrade + +== Linux Mint == + +Linux Mint incluye sudo y las aplicaciones que uso habitualmente para gestión de paquetes por defecto (''aptitude'' y ''synaptic''). + +Instalo (por costumbre) el paquete ''ppa-purge'' (sudo apt install ppa-purge). Sirve para eliminar ppas junto con los programas instalados desde ese ppa. + +Cambiamos los origenes del software con la utilidad de Linux Mint que nos mide la velocidad de cada posible origen para tener información para elegir. + + +== Firmware == + +Ya no es necesario intalar los paquetes de ''microcode'' la instalación de Linux Mint se encargó de instalar: + +* amd64-microcode +* intel-microcode + +Instalamos el driver de Nvidia recomendado, después de la instalación inicial el ''Mint'' nos avisará de que tenemos que revisar la instalación de los drivers. + +El driver de Nvidia viene muy mejorado. Merece la pena ver todas las opciones del menú del driver. + +Una vez instalado el driver de Nvidia, el comando prime-select querydebe indicarnos la tarjeta activa y podremos cambiar de tarjeta ejecutando prime-select [nvidia|intel]. También podremos acceder a las funciones de Nvidia a través del applet en la barra de estado de nuestro escritorio. + + +== Control de configuraciones con git == + +Una vez instalado el driver de Nvidia y antes de seguir con la instalación instalamos el git y el etckeeper para que todos los cambios que se produzcan en el directorio /etc durante nuestra instalación queden reflejados en el git. + +Yo nunca almaceno esta información en la nube (por seguridad), pero me permite tener controlados los cambios de configuración y ayuda en caso de problemas. + + +=== Instalación de etckeeper === + +¡Ojo!, nos hacemos root para ejecutar: + +sudo su - +git config --global init.defaultBranch main +git config --global user.email xxxxx@whatever.com +git config --global user.name "Name Surname" +apt install etckeeper +''etckeeper'' hará un control automático de tus ficheros de configuración en /etc + +Para echar una mirada a los ''commits'' creados puedes ejecutar: + +cd /etc +sudo git log + +=== Controlar dotfiles con git === + +Vamos a crear un repo de git para controlar nuestros ficheros personales de configuración. + +Creamos el repo donde queramos, yo suelo usar el directorio ~/work/repos. + +mkdir usrcfg +cd usrcfg +git init +git config core.worktree "/home/salvari" +Y ya lo tenemos, un repo de git, en la localización que queramos y que tiene el directorio de trabajo apuntando a nuestro ''$HOME''. + +Podemos añadir los ficheros de configuración que queramos al repo: + +git add .bashrc +git commit -m "Add some dotfiles" +Una vez que tenga añadidos los ficheros que quiero tener controlados pondré * en el fichero .git/info/exclude de mi repo para que ignore todos los ficheros de mi $HOME. + +Cuando instalo algún programa nuevo añado a mano los ficheros de configuración que quiero tener controlados al repo. + +Yo no tengo información confidencial en este repositorio (claves ssh por ejemplo) así que no tengo problemas en almacenarlo en la nube. Facilita mucho las cosas en casos de upgrade del sistema o copiar configuraciones entre ordenadores. + + +== Editor desde linea de comandos == + +Hasta que instalemos nuestro editor favorito (''Emacs'' en mi caso) podemos usar ''nano'' desde la linea de comandos para editar cualquier fichero. + + +== Parámetros de disco duro == + +Tengo un disco duro ssd y otro hdd normal. + +El area de intercambio la hemos creado en el disco duro hdd, no se usará mucho (mejor dicho: no se usará nunca) pero evitamos multiples operaciones de escritura en el disco ssd en caso de que se empiece a tirar del swap. + +Añadimos el parámetro noatime para las particiones de root y /home, que si que se han creado en el ssd. + +
# /etc/fstab: static file system information.
+#
+# Use 'blkid' to print the universally unique identifier for a
+# device; this may be used with UUID= as a more robust way to name devices
+# that works even if disks are added and removed. See fstab(5).
+#
+# <file system> <mount point>   <type>  <options>       <dump>  <pass>
+# / was on /dev/sda5 during installation
+UUID=d96a5501-75b9-4a25-8ecb-c84cd4a3fff5 /               ext4    noatime,errors=remount-ro 0       1
+# /home was on /dev/sda7 during installation
+UUID=8fcde9c5-d694-4417-adc0-8dc229299f4c /home           ext4    defaults,noatime        0       2
+# /store was on /dev/sdc7 during installation
+UUID=0f0892e0-9183-48bd-aab4-9014dc1bd03a /store          ext4    defaults        0       2
+# swap was on /dev/sda6 during installation
+UUID=ce11ccb0-a67d-4e8b-9456-f49a52974160 none            swap    sw              0       0
+# swap was on /dev/sdc5 during installation
+UUID=11090d84-ce98-40e2-b7be-dce3f841d7b4 none            swap    sw              0       0
+Una vez modificado el /etc/fstab no hace falta arrancar, basta con ejecutar lo siguiente: + +systemctl daemon-reload + +mount -o remount / +mount -o remount /home +mount + +=== Ajustes adicionales para ''Firefox'' === + +Las diferencias de rendimiento del Firefox con estos ajustes son bastante notables. + +Seguimos [https://easylinuxtipsproject.blogspot.com/p/ssd.html#ID10 esta referencia] + +Visitamos about:config con el navegador. + +Cambiamos + +* browser.cache.disk.enable '''false''' +* browser.cache.memory.enable '''true''' +* browser.cache.memory.capacity '''204800''' +* browser.sessionstore.interval '''15000000''' + +TODO: Comprobar ''trim'' en mi disco duro. Y mirar [https://easylinuxtipsproject.blogspot.com/p/speed-mint.html esto] + +Y siguiendo [https://linuxreviews.org/HOWTO_Make_Mozilla_Firefox_Blazing_Fast_On_Linux esta otra referencia] cambiamos: + +* gfx.x11-egl.force-enabled '''true''' +* '''IMPORTANTE''' Ajustar el parámetro network.IDN_show_punycode a '''true''' (para evitar ataques de URL falsas con caracteres Unicode) + +Reiniciamos nuestro ''Firefox'' (podemos visitar about:restartRequired) + + +== Fuentes (tipográficas) adicionales == + +Instalamos algunas fuentes desde los orígenes de software: + +sudo apt install ttf-mscorefonts-installer +sudo apt install fonts-noto +Y la fuente [https://robey.lag.net/2010/06/21/mensch-font.html Mensch] la bajamos directamente al directorio ~/.local/share/fonts + +Para visualizar las fuentes podemos usar el programa ''MATE Font Viewer'' + +Instaladas varias de las [https://github.com/ryanoasis/nerd-fonts nerd-fonts] en ~/.local/share/fonts. Simplemente descargamos las fuentes interesantes y ejecutamos sudo fc-cache -f -v + +Fuentes interesantes: + +* [https://github.com/ryanoasis/nerd-fonts nerd-fonts] +* [https://github.com/powerline/fonts Powerline fonts] +* [https://github.com/ProgrammingFonts/ProgrammingFonts Programming fonts] + + +== Firewall == + +ufw y gufw vienen instalados por defecto, pero no activados. + +ufw default deny +ufw enable +ufw status verbose + +----- + +
'''Nota''': Ojo con el log de ufw, tampoco le sienta muy bien al ssd esa escritura masiva. Yo normalmente lo dejo desactivado desde el ''gufw'' excepto cuando valido una nueva configuración. +
+ +----- + + +== Aplicaciones variadas == + +; KeepassXC +: Para mantener nuestras contraseñas a buen recaudo +; Gnucash +: Programa de contabilidad, la versión de los repos está bastante atrasada habrá que probar la nueva que puede instalarse desde la web o desde el flathub. +; Deluge +: Programa de descarga de torrents (acuérdate de configurar tus cortafuegos) +; rsync, grsync +: Para hacer backups de nuestros ficheros +; Descompresores variados +: Para lidiar con los distintos formatos de ficheros comprimidos +; mc +: Midnight Comander, gestor de ficheros en modo texto +; most +: Un less mejorado +; tree +: Para ver estructuras de directorios +; neofetch +: Este solo vale para presumir de ordenador creo ¬_¬ +; fasd +: Para cambiar entre directorios rápidamente +; silversearcher-ag +: Una alternativa mejorada al clásico ''grep'' +; ack +: Otro grep mejorado +; ncdu +: Un analizador de uso de disco alternativa a du +; mate-tweak +: Para ''customizar'' nuestro escritorio Mate +; filezilla +: Un interfaz gráfico para transferencia de ficheros +; rofi +: Un conmutador de ventanas capaz de automatizar muchas tareas +; Chromium +: Como Chrome pero libre, en Linux Mint no hay snaps, puedes instalarlo directamente con apt + +Para instalar todos los programas ejecutamos: + +
sudo apt install keepassxc gnucash deluge rsync grsync rar unrar \
+zip unzip unace bzip2 lzop p7zip p7zip-full p7zip-rar \
+most mc tree neofetch fasd silversearcher-ag ack ncdu mate-tweak filezilla \
+rofi chromium
+ +== Algunos programas de control del sistema == + +Son útiles para control de consumo. + +
sudo apt install tlp tlp-rdw htop powertop
+'''btop''' también está muy bien, así que descargamos los binarios desde [https://github.com/aristocratos/btop su página web] dentro del binario tenemos el ejecutable y un fichero .desktop. En mi caso hago una cutre-instalación con el ejecutable en ~/apps/system/btop/bin/btop y el fichero .desktop copiado en mi ~/.local/share/applications (ver la sección [[#varias-aplicaciones-instaladas-de-binarios|Varias aplicaciones instaladas de binarios]]). En ~/.local/bin dejo un enlace simbólico al binario. + + +== Programas de terminal == + +Instalo dos programas de terminal: + +sudo apt install guake terminator +''terminator'' lo dejamos como aplicación terminal preferida del sistema. + +'''TODO:''' asociar ''Guake'' a una combinación apropiada de teclas. + +También instalo ''rxvt'' teoricamente más ligero y que puedes complementar con ''tmux''. + +sudo apt install rxvt-unicode +=== tmux === + +''tmux'' combinado por ejemplo con ''rxvt'' nos da la misma funcionalidad que ''Terminator'', además merece la pena aprender a usarlo por que instalado en servidores remotos es increíblemente útil. + +sudo apt install tmux +* [https://leanpub.com/the-tao-of-tmux/read El tao de tmux] +* [https://www.askapache.com/linux/rxvt-xresources/ rxvt customizations] + + +== Dropbox == + +Lo instalamos desde el software manager. Previamente debemos instalar el paquete python3-gpg y desde el software manager instalamos también el paquete Caja-dropbox, para tener las integraciones de Dropbox en el gestor de ficheros. + + +== pCloud == + +Instalado desde su página web. + + +== Chrome == + +No lo he instalado. + +Puede instalarse desde [https://www.google.com/chrome/ la página web de Chrome] + + +== Thorium == + +Bajamos los binarios desde [https://thorium.rocks/ su página web]. Descomprimimos en ~/apps y ajustamos los ficheros .desktop para que apunten a los binarios. (ver la siguiente sección [[#varias-aplicaciones-instaladas-de-binarios|Varias aplicaciones instaladas de binarios]]) + + +== Varias aplicaciones instaladas de binarios == + +Lo recomendable en un sistema POSIX es instalar los programas adicionales en /usr/local o en /opt. Yo soy más chapuzas y suelo instalar en ~/apps por que el portátil es personal e intrasferible. En un ordenador compartido es mejor usar /opt. + +En general cuando instalo en el directorio ~/apps sigo los siguientes pasos: + +
    +
  1. Descargamos los binarios o ''appimage'' desde la web

  2. +
  3. Descomprimo en un nuevo directorio para la aplicación, tomamos como ejemplo freeplane, así que el directorio se llamará: ~/apps/mi_aplicacion en nuestro ejemplo ~/apps/freeplane

  4. +
  5. Creamos enlace simbólico al que llamamos current. Esto es para no editar los ficheros .desktop cada vez que actualicemos la versión del programa. El enlace puede apuntar a un directorio o a un binario, depende de como obtengamos la aplicación. En el caso de freeplane yo tengo la siguiente estructura

    +
    freeplane
    +├── current -> freeplane-1.7.11
    +├── freeplane-1.7.10
    +└── freeplane-1.7.11
    +

    Vemos que el enlace apunta a la versión más reciente de ''freeplane''.

  6. +
  7. Añadimos la aplicación a los menús, al hacer esto se creará un fichero .desktop en el directorio ~/.local/share/applications

+ + +=== Freeplane === + +Para hacer mapas mentales, presentaciones, resúmenes, apuntes… La versión incluida en LinuxMint está un poco anticuada, descargamos el programa desde [https://docs.freeplane.org/ la página web]. + + +=== Treesheets === + +Está bien para hacer chuletas rápidamente. Descargamos el ''appimage'' desde [http://strlen.com/treesheets/ la web] + + +=== Telegram Desktop === + +Cliente de Telegram, descargado desde la [https://desktop.telegram.org/ página web]. El programa de instalación de Telegram ya se encarga de crear el fichero .desktop + + +=== Tor browser === + +Descargamos desde la [https://www.torproject.org/ página oficial del proyecto] Descomprimimos en ~/apps/ y ejecutamos desde terminal: + +
cd ~/apps/tor-browser
+./start-tor-browser.desktop --register-app
+Tor se encarga tanto de crear el fichero .desktop como de mantenerse actualizado a la última versión. + + +=== Brave browser === + +Instalamos siguiendo las instrucciones de la [https://brave-browser.readthedocs.io/en/latest/installing-brave.html#linux página web oficial] + +sudo apt install curl + +sudo curl -fsSLo /usr/local/share/keyrings/brave-browser-archive-keyring.gpg https://brave-browser-apt-release.s3.brave.com/brave-browser-archive-keyring.gpg + +echo "deb [signed-by=/usr/local/share/keyrings/brave-browser-archive-keyring.gpg] https://brave-browser-apt-release.s3.brave.com/ stable main"|sudo tee /etc/apt/sources.list.d/brave-browser-release.list + +sudo apt update + +sudo apt install brave-browser + +=== TiddlyDesktop === + +Descargamos desde la [https://github.com/Jermolene/TiddlyDesktop página web], descomprimimos y generamos la entrada en el menú. + + +=== Joplin === + +Una herramienta libre para mantener notas sincronizadas entre el móvil y el portátil. + +Instalamos siguiendo las instrucciones de la [https://joplinapp.org/ página web] + + wget -O - https://raw.githubusercontent.com/laurent22/joplin/master/Joplin_install_and_update.sh | bash +Joplin se instala en el directorio ~/.joplin y crea su propia entrada en el menú. + +La primera vez que configuremos la sincronización de Joplin conviene hacer un borrado local con download desde el remoto. + + +== Terminal y shells == + +Por defecto tenemos instalado bash. + +=== bash-git-promt === + +Para dejar configurado el ''bash-git-prompt'' seguimos las instrucciones de [https://github.com/magicmonty/bash-git-prompt este github] + +=== zsh === + +Nos adelantamos a los acontecimientos, pero conviene tener instaladas las herramientas de entornos virtuales de python antes de instalar ''zsh'' con el plugin para ''virtualenvwrapper''. + +
apt install python-is-python3
+apt install python3-all-dev
+apt install python3-virtualenv python3-virtualenvwrapper
+apt install pipx python3-poetry
+Para ''zsh'' vamos a usar [https://github.com/zsh-users/antigen antigen], así que nos lo clonamos en ~/apps/ + +
cd ~/apps
+git clone https://github.com/zsh-users/antigen
+También vamos a usar [https://github.com/olivierverdier/zsh-git-prompt zsh-git-prompt], así que lo clonamos también: + +
cd ~/apps
+git clone https://github.com/olivierverdier/zsh-git-prompt
+Para el zsh-git-prompt clonamos el fichero zshrc.sh desde nuestro repo de configuraciones. + +Clonamos el fichero ~/.zshrc desde nuestro repo de configuraciones. De momento es mejor comentar la linea del tema : + +
antigen theme gnzh
+Para usar ''virtualenvwrapper'' hay que decidir en que directorio queremos salvar los entornos virtuales. El obvio seria ~/.virtualenvs la alternativa sería ~/.local/share/virtualenvs. + +El que escojamos lo tenemos que crear y añadirlo a nuestro ~/.profile con las líneas: + +
# WORKON_HOME for virtualenvwrapper
+if [ -d "$HOME/.virtualenvs" ] ; then
+    WORKON_HOME="$HOME/.virtualenvs"
+fi
+Después de seguir estos pasos basta con arrancar el ''zsh'' + +''Antigen'' ya se encarga de descargar todos los plugins que queramos utilizar en zsh. Todos el software se descarga en ~/.antigen + +Para configurar el [https://github.com/olivierverdier/zsh-git-prompt zsh-git-prompt], que inspiró el bash-git-prompt. + +He modificado el fichero zshrc.sh de zsh-git-prompt cambiando la linea `echo “$STATUS”: + +
#echo "$STATUS"
+if [[ "$__CURRENT_GIT_STATUS" == ": 0 0 0 0 0 0" ]]; then
+    echo ""
+else
+    echo "$STATUS"
+fi
+También he cambiado el fichero del tema ''gnzh'' en ~/.antigen/bundles/robbyrussell/oh-my-zsh/themes/gnzh.zsh-theme por que me interesa ver la versión python asociada a cada virtualenv. + +''zsh'' viene por defecto en mi instalación, en caso contrario: + +
apt install zsh
+Cuando estemos contentos con nuestro zsh tendremos que ejecutar chsh -s /usr/bin/zsh + + += Utilidades = + + +== Utilidades variadas == + +
+
gpick con
+

''Agave'' y ''pdftk'' ya no existen, nos pasamos a ''gpick'' y ''poppler-utils''

+

sudo apt install gpick

+
graphviz
+

Una utilidad de generación de gráficos que uso a veces. También es útil para web2py y para `org-roam

+

sudo apt install graphviz

+
sqlite3
+

Un motor de bases de datos sencillo que se uso a menudo

+

sudo apt install sqlite3

+
cheat
+

Chuletas de comandos habituales, se instala desde los fuentes ejecutando go install github.com/cheat/cheat/cmd/cheat@latest (ver [https://github.com/cheat/cheat/ su github])

+
cheat.sh
+

Echa una mirada a su página web: http://cheat.sh/, es casi idéntico al anterior pero disponible desde cualquier ordenador con conexión.

+
gparted
+

Instalamos ''gparted'' para poder formatear memorias usb

+

sudo apt install gparted

+
wkhtmltopdf
+

Para pasar páginas web a pdf

+

sudo apt install wkhtmltopdf

+
lsd
+

ls potenciado, instalamos el paquete desde los fuentes con cargo install lsd (ver [https://github.com/Peltoche/lsd la página del proyecto]

+
bat
+

cat potenciado, instalamos el paquete desde los fuentes con cargo install bat [https://github.com/sharkdp/bat ver la página del proyecto]

+
nmap ndiff ncat
+

nmap nos permite realizar mapeos de subredes en nuestras redes locales. Por ejemplo para localizar dispositivos enganchados a nuestra red. ndiff nos permite comparar escaneos realizados con nmap y ncat hace todo tipo de cosas (mira en la red)

+

sudo apt install nmap ndiff ncat

+
rofi
+

El super conmutador de ventanas (y muchas más cosas).

+

Creamos el fichero ~/.config/rofi/config.rasi con el siguiente contenido

+configuration { + modi: "drun,run,ssh,combi"; + font: "mensch 16"; + combi-modi: "window,drun,ssh"; +} +@theme "fancy" +

Asociamos un atajo de teclado al comando: rofi -show drun

+ +== autokey == + +Instalamos [https://github.com/autokey/autokey autokey] siguiendo [https://github.com/autokey/autokey/wiki/Installing#debian-and-derivatives las instrucciones para instalarlo con paquetes debian] + +Me he descargado la última estable en el Legion y la beta en el Acer. + +Después de descargar los paquetes Debian ejecutamos los siguientes comandos (para la estable): + +VERSION=0.95.10-0 +sudo dpkg --install autokey-common_0.95.10-0_all.deb autokey-gtk_0.95.10-0_all.deb +sudo apt --fix-broken install +El único paquete que se instala a mayores en el python del sistema sería python3-pyinotify + +Si estamos usando un entorno virtual con pyenv creo que sería mejor usar la instalación con pip ([https://github.com/autokey/autokey/wiki/Installing#pip-installation ver documentación]) + +Para lanzar la aplicación ejecutamos: python3 -m autokey.gtkui + + += Internet = + + +== Rclone == + +Instalamos desde la página web(https://rclone.org/), descargando el fichero .deb. + + +=== Recetas rclone === + +Copiar directorio local en la nube: + +
rclone copy /localdir hubic:backup -vv
+Si queremos ver el directorio en la web de Hubic tenemos que copiarlo en ''default'': + +
rclone copy /localdir hubic:default/backup -vv
+Sincronizar una carpeta remota en local: + +
rclone sync hubic:directorio_remoto /home/salvari/directorio_local -vv
+ +=== Referencias === + +* [https://elblogdelazaro.gitlab.io//articles/rclone-sincroniza-ficheros-en-la-nube/ Como usar rclone (blogdelazaro)] +* [https://elblogdelazaro.gitlab.io//articles/rclone-cifrado-de-ficheros-en-la-nube/ y con cifrado (blogdelazaro)] +* [https://rclone.org/docs/ Documentación] + + +== Syncthing == + +Seguimos las instrucciones en [https://apt.syncthing.net/ su página web]: + +sudo curl -L -o /etc/apt/keyrings/syncthing-archive-keyring.gpg https://syncthing.net/release-key.gpg +# Add the "stable" channel to your APT sources: +echo "deb [signed-by=/etc/apt/keyrings/syncthing-archive-keyring.gpg] https://apt.syncthing.net/ syncthing stable" | sudo tee /etc/apt/sources.list.d/syncthing.list +sudo apt update +sudo apt install syncthing + +== Nyxt == + +Instalado desde el Software Manager (via flathub) + + +== Qutebrowser == + +Instalamos desde los repos con sudo apt install qutebrowser. + + +== Palemoon == + +Un fork de ''Firefox'' con menos chorradas. Instalado con el paquete deb descargado de su [https://software.opensuse.org/download.html?project=home:stevenpusser&package=palemoon página web] + + +== LibreWolf == + +Instalado el paquete flatpak desde el Software Manager + + +=== Plugins instalados === + +Conviene estudiar la documentación de los ''add-ons'' recomendados, disponible [https://librewolf-community.gitlab.io/docs/addons/ aqui]. + +* KeepassXC-Browser +** Necesitamos instalar el KeepassXC, el que viene en los repos es un poco antiguo podemos instalar desde PPA +** Es imprescindible hacer un link con ln -s ~/.mozilla/native-messaging-hosts ~/.librewolf/native-messaging-hosts +* Clear URLs +* Mozilla Multiaccount Containers + + +== Netsurf == + +'''NOTA''': Aún no instalado en Xia + +Un navegador ultraligero (aunque no funciona con muchas páginas, solo para webs austeras) Instalado via flathub con flatpak install netsurf + + +== Lagrange == + +Un navegador para el protocolo ''Gemini''. Instalado con la ''appimage'' desde su [https://git.skyjake.fi/gemini/lagrange página web] + + +== Castor == + +'''NOTA''': Aún no instalado en Xia + +Otro navegador para el protocolo ''Gemini'' programado en ''Rust''. Instalado desde las fuentes siguiendo instrucciones de su [https://sr.ht/~julienxx/Castor/ página web] + + +== Whalebird: Cliente de Mastodon == + +Descargada ''appimage'' desde [https://whalebird.social/en la página web de la aplicación]. + + +== Sengi: Cliente de Mastodon == + +Instalada ''appimage'' desde su [https://github.com/NicolasConstant/sengi github] + + += Window Managers adicionales = + +== i3wm == + +Añadimos el repo: + +cd ~/tmp +/usr/lib/apt/apt-helper download-file https://debian.sur5r.net/i3/pool/main/s/sur5r-keyring/sur5r-keyring_2021.02.02_all.deb keyring.deb SHA256:cccfb1dd7d6b1b6a137bb96ea5b5eef18a0a4a6df1d6c0c37832025d2edaa710 + +sudo dpkg -i ./keyring.deb +sudo echo "deb http://debian.sur5r.net/i3/ $(grep '^DISTRIB_CODENAME=' /etc/lsb-release | cut -f2 -d=) universe" >> /etc/apt/sources.list.d/sur5r-i3.list +sudo apt update +sudo apt install i3 +== qtile == + +Vamos a describir la instalación del ''Qtile'' en un ''virtualenv'' dedicado. Si te bajas la versión estable de ''Qtile'' desde su [http://qtile.org página web] en el paquete vienen un montón de script auxiliares que te permiten hacer la instalación aislada en un ''virtualenv'' pero lo voy a hacer a mano para tenerlo controlado con pyenv. + +* Creamos el ''virtualenv'' qtile basado en la versión 3.10.0 que teniamos instalada previamente: + +# Creamos el directorio de trabajo +mkdir /qtile +cd /qtile + +# OPCIONAL: Descargamos el qtile estable de la página web +# sólo si quieres curiosear los scripts auxiliares +wget https://github.com/qtile/qtile/archive/v0.18.1.tar.gz +tar xvzf v0.18.1.tar.gz +rm v0.18.1.tar.gz + +# Creamos el entorno virtual +pyenv virtualenv 3.10.0 qtile +pyenv local qtile +# Instalamos los paquetes iniciales (comunes a mis entornos) +pip install --upgrade pip setuptools wheel + +# instalamos los requisitos +pip install --no-cache-dir xcffib +pip install --no-cache-dir cairocffi + +# Instalamos la versión estable de qtile +pip install --no-cache-dir qtile +Con esto ya estamos listos, podríamos arrancar ''Qtile'' con qtile start, pero no puede funcionar claro. Para que arranque correctamente, tenemos que lanzarlo en un servidor X. (ver el punto “[[#lanzar-window-managers-con-xephyr|Lanzar Window Managers con Xephyr]]”) + + +=== Configurar Qtile en ''virtualenv'' para arrancer desde el ''Lightdm'' === + +Como root nos creamos un script launch_qtile en /usr/local/bin, con el siguiente contenido + +#!/bin/bash +source '/home/user/.pyenv/versions/3.10.0/envs/qtile/bin/activate' +qtile start +Le damos permisos de ejecución con chmod 755 launch_qtile (ojo a los permisos para ''all'' que si no son estos no le gusta a ''Lightdm'') + +También como root creamos el fichero /usr/share/xsessions/qtile.desktop con el contenido: + +[Desktop Entry] +Name=Qtile +Comment=Qtile Session +Exec=launch_qtile +Type=Application +Keywords=wm;tiling +Y con esto tendremos Qtile disponible en ''Lightdm''. + + +== Lanzar Window Managers con Xephyr == + +Para probar (o configurar) los ''Window Managers'' sin salir de nuestra sesión de Mate podemos usar Xephyr, si no lo tienes instalado ejecuta: + +sudo apt update +sudo apt install xserver-xephyr +Para lanzar un ''Xserver'' usaríamos un comando como: + +Xephyr -ac -screen 800x600 -br -reset -terminate 2> /dev/null :1 & +; '''-ac''' +: Autorizar conexiones de clientes indiscriminadamente (''disable access restrictions'') +; '''-screen''' +: Especificar la geometría de la pantalla. +; '''-br''' +: La ventana raiz tendrá fondo negro +; '''-reset''' +: Reset al terminar el último cliente +; '''-terminate''' +: Finalizar cuando se resetee el servidor +; '''2> /dev/null''' +: Mandar los mensajes de error al limbo (alias '''NE''' en nuestro pc) +; ''':1''' +: Arrancar el server en el DISPLAY=1 + +Asi que si queremos arrancar por ejemplo el ''i3wm'' podríamos hacer un script con las siguientes lineas: + +Xephyr -ac -screen 800x600 -br -reset -terminate 2> /dev/null :1 & +export DISPLAY=:1 +i3 +Para ''Qtile'' bastaria con cambiar i3 por qtile start + + += Comunicación con dispositivos Android = + +== scrcpy == + +sudo apt install scrcpy + + +== Heimdall == + +Para flashear roms en moviles + +sudo apt install heimdall-flash heimdall-flash-frontend + += Documentación = + + +== Vanilla LaTeX == + +Para instalar la versión más reciente de LaTeX hago la instalación desde [https://www.ctan.org/ ctan] + +Una vez instalado usamos ''equivs'' para generar un paquete deb y que nuestro sistema sepa que tenemos ''texlive'' instalado. + +
cd ~
+mkdir tmp
+cd tmp
+wget http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz
+tar xzf install-tl-unx.tar.gz
+cd install-tl-xxxxxx
+La parte xxxxxx varía en función del estado de la última versión de LaTeX disponible. + +
sudo ./install-tl
+Una vez lanzada la instalación podemos desmarcar las opciones que instalan la documentación y las fuentes. Eso nos obligará a consultar la documentación on line pero ahorrará practicamente el 50% del espacio necesario. En mi caso sin doc ni src ocupa 2,3Gb + +
mkdir -p /opt/texbin
+sudo ln -s /usr/local/texlive/2024/bin/x86_64-linux/* /opt/texbin
+Por último para acabar la instalación añadimos /opt/texbin al ''PATH''. Para ''bash'' y ''zsh'' basta con añadir al fichero ~/.profile las siguientes lineas: + +
# adds texlive to my PATH
+if [ -d "/opt/texbin" ] ; then
+    PATH="$PATH:/opt/texbin"
+fi
+En cuanto a ''fish'' (si es que lo usas, claro) tendremos que modificar (o crear) el fichero ~/.config/fish/config.fish y añadir la siguiente linea: + +
set PATH $PATH /opt/texbin
+ +=== Falsificando paquetes === + +Ya tenemos el ''texlive'' instalado, ahora necesitamos que el gestor de paquetes sepa que ya lo tenemos instalado. + +
sudo apt install equivs --no-install-recommends
+mkdir -p /tmp/tl-equivs && cd /tmp/tl-equivs
+equivs-control texlive-local
+Alternativamente para hacerlo más fácil podemos descargarnos un fichero texlive-localya preparado, ejecutando: + +
wget http://www.tug.org/texlive/files/debian-equivs-2023-ex.txt
+/bin/cp -f debian-equivs-2023-ex.txt texlive-local
+Editamos la versión (si queremos) y procedemos a generar el paquete ''deb''. + +
equivs-build texlive-local
+Ahora podemos instalar el paquete con dpkg También conviene instalar ''texinfo'' (que hará que se instale ''texcommon'') y opcionalmente se puede instalar ''lmodern''. + +
sudo apt install texinfo
+sudo dpkg -i texlive-local_2024-1_all.deb
+Todo listo, ahora podemos instalar cualquier paquete debian que dependa de ''texlive'' sin problemas de dependencias, aunque no hayamos instalado el ''texlive'' de Debian. + + +=== Fuentes === + +Para dejar disponibles las fuentes opentype y truetype que vienen con texlive para el resto de aplicaciones: + +
sudo cp $(kpsewhich -var-value TEXMFSYSVAR)/fonts/conf/texlive-fontconfig.conf /etc/fonts/conf.d/09-texlive.conf
+sudo nano /etc/fonts/conf.d/09-texlive.conf
+Borramos la linea: + +
<dir>/usr/local/texlive/20xx/texmf-dist/fonts/type1</dir>
+Y ejecutamos: + +
sudo fc-cache -fsv
+Actualizaciones Para actualizar nuestro ''latex'' a la última versión de todos los paquetes: + +
sudo /opt/texbin/tlmgr update --self
+sudo /opt/texbin/tlmgr update --all
+También podemos lanzar el instalador gráfico con: + +
sudo /opt/texbin/tlmgr --gui
+Para usar el instalador gráfico hay que instalar previamente: + +
sudo apt-get install perl-tk --no-install-recommends
+Lanzador para el actualizador de ''texlive'': + +
mkdir -p ~/.local/share/applications
+/bin/rm ~/.local/share/applications/tlmgr.desktop
+cat > ~/.local/share/applications/tlmgr.desktop << EOF
+[Desktop Entry]
+Version=1.0
+Name=TeX Live Manager
+Comment=Manage TeX Live packages
+GenericName=Package Manager
+Exec=gksu -d -S -D "TeX Live Manager" '/opt/texbin/tlmgr -gui'
+Terminal=false
+Type=Application
+Icon=system-software-update
+EOF
+ +== Tipos de letra == + +Creamos el directorio de usuario para tipos de letra: + +
mkdir ~/.local/share/fonts
+ +== Fuentes Adicionales == + +Me he descargado de internet la fuente [https://robey.lag.net/downloads/mensch.ttf Mensch] el directorio de usuario para los tipos de letra: ~/.local/share/fonts + +Además he clonado el repo [https://github.com/ProgrammingFonts/ProgrammingFonts ''Programming Fonts''] aunque parece que las fuentes están un poco anticuadas. + +
cd ~/wherever
+git clone https://github.com/ProgrammingFonts/ProgrammingFonts
+cd ~/.local/share/fonts
+ln -s ~/wherever/ProgrammingFonts/Menlo .
+La fuente Hack la he instalado directamente desde el [https://sourcefoundry.org/hack/ sitio web] + + +== Pandoc == + +''Pandoc'' es un traductor entre formatos de documento. Está escrito en Haskell y es increiblemente útil. De hecho este documento está escrito con ''Pandoc''. + +Instalado el ''Pandoc'' descargando paquete .deb desde [http://pandoc.org/installing.html la página web del proyecto]. + +Además podríamos descargarnos plantillas de Pandoc desde [https://github.com/jgm/pandoc-templates este repo] ejecutando los siguientes comandos: + +
mkdir ~/.pandoc
+cd ~/.pandoc
+git clone https://github.com/jgm/pandoc-templates templates
+Las plantillas no son imprescindibles pero si quieres aprender a usarlas o hacer alguna modificación viene bien tenerlas. + + +== Quarto == + +'''NOTA''': Aún no instalado en Xia + +Un sistema de generación de documentación que usa ''Pandoc'', instalado con el paquete .deb descargado desde [https://quarto.org/docs/get-started/ la página web del proyecto] + +'''TODO''': Completar el tutorial inicial + + +== Algunos editores adicionales == + +Dos editores opcionales para hacer pruebas: + +; Obsidian +: Instalado con ''appimage'' descargado desde la [https://obsidian.md/ página web] '''NOTA''': Aún no instalado en Xia +; Zettlr +: Instalado con fichero .deb descargado desde [https://www.zettlr.com/ su página web] + + +== Calibre == + +La mejor utilidad para gestionar tu colección de libros electrónicos. + +Ejecutamos lo que manda la página web: + +
sudo -v && wget -nv -O- https://download.calibre-ebook.com/linux-installer.sh | sudo sh /dev/stdin
+El programa queda instalado en /opt/calibre. Se puede desinstalar con el comando sudo calibre-unistall. + +Para usar el calibre con el ebook ''Kobo Glo'': + +* Desactivamos todos los plugin de Kobo menos el ''Kobo Touch Extended'' +* En ''Preferences::Add your own Columns'' creamos una columna ''MyShelves'' con identificativo #myshelves, esto es para crear colecciones en el ebook como me apetezca +* En las opciones del plugin: +** ''Collections, covers and uploads'' +*** En la opción ''Collection columns'' añadimos las columnas Series,MyShelves +*** Marcamos las opciones ''Create collections'' y ''Delete empty bookshelves'' +*** Marcamos ''Modify CSS'' +** ''Metadata on device and advanced'' +*** ''Set series information'' +** ''Extended'' +*** ''Send books as kepubs'' + +Algunos enlaces útiles: + +* (https://github.com/jgoguen/calibre-kobo-driver) +* (http://www.lectoreselectronicos.com/foro/showthread.php?15116-Manual-de-instalaci%C3%B3n-y-uso-del-plugin-Kobo-Touch-Extended-para-Calibre) +* (http://www.redelijkheid.com/blog/2013/7/25/kobo-glo-ebook-library-management-with-calibre) +* (https://www.netogram.com/kobo.htm) + + +== Scribus == + +Scribus es un programa libre de composición de documentos. con Scribus puedes elaborar desde los folletos de una exposición hasta una revista o un poster. + +Instalamos desde los depósitos oficiales de Mint. + +Se podría instalar desde ppa para instalar la última versión: + +
sudo add-apt-repository ppa:ubuntuhandbook1/scribus
+sudo apt update
+sudo apt install scribus scribus-data scribus-template
+ +=== Cambiados algunos valores por defecto === + +He cambiado los siguientes valores en las dos versiones, non están exactamente en el mismo menú pero no son díficiles de encontrar: + +* Lenguaje por defecto: '''English''' +* Tamaño de documento: '''A4''' +* Unidades por defecto: '''milimeters''' +* Show Page Grid: '''Activado''' +* Dimensiones de la rejilla: +** Mayor: '''30 mm''' +** Menor: '''6mm''' +* En opciones de salida de ''pdf'' indicamos que queremos salida a impresora y no a pantalla. Y también que no queremos ''spot colors'', que serían sólo para ciertas impresoras industriales, así que activamos la opción ''Convert Spot Colors to Process Colors''. + +Siempre se puede volver a los valores por defecto sin mucho problema (hay una opción para ello) + +Referencia [https://www.youtube.com/watch?v=3sEoYZGABQM&list=PL3kOqLpV3a67b13TY3WxYVzErYUOLYekI aquí] + + +=== Solucionados problemas de ''hyphenation'' === + +''Scribus'' no hacia correctamente la separación silábica en castellano, he instalado los paquetes: + +* hyphen-es +* hyphen-gl + +Y ahora funciona correctamente. + + +== Zotero: Gestor de referencias bibliográficas == + +Por cortesía de [https://github.com/retorquere/zotero-deb Emiliano Heyns] tenemos disponible el paquete de Zotero para Debian y Ubuntu. + +wget -qO- https://raw.githubusercontent.com/retorquere/zotero-deb/master/install.sh | sudo bash +sudo apt update +sudo apt install zotero +A mayores instalamos el ''addon'' '''''Better Bibtex''''' descargando la última versión disponible desde [https://retorque.re/zotero-better-bibtex/installation/ aquí] e instalando en Zotero con la opción “Instalar desde fichero”. + + += Desarrollo software = + + +== Paquetes esenciales == + +Estos son los paquetes esenciales para empezar a desarrollar software en Linux. + +sudo apt install build-essential checkinstall make automake cmake autoconf \ +git git-core git-crypt dpkg wget + +== Git == + + +----- + +'''NOTA''': Si quieres instalar la última versión de git, los git developers tienen un ppa para ubuntu, si quieres tener el git más actualizado: + +sudo add-apt-repository ppa:git-core/ppa +sudo apt update +sudo apt upgrade + +----- + +Control de versiones distribuido. Imprescindible. Para ''Linux Mint'' viene instalado por defecto. + +Configuración básica de git: + +
git config --global ui.color auto
+git config --global user.name "Pepito Pérez"
+git config --global user.email "pperez@mikasa.com"
+
+git config --global alias.cl clone
+
+git config --global alias.st "status -sb"
+git config --global alias.last "log -1 --stat"
+git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %Cblue<%an>%Creset' --abbrev-commit --date=relative --all"
+git config --global alias.dc "diff --cached"
+
+git config --global alias.unstage "reset HEAD --"
+
+git config --global alias.ci commit
+git config --global alias.ca "commit -a"
+
+git config --global alias.ri "rebase -i"
+git config --global alias.ria "rebase -i --autosquash"
+git config --global alias.fix "commit --fixup"
+git config --global alias.squ "commit --squash"
+
+git config --global alias.cp cherry-pick
+git config --global alias.co checkout
+git config --global alias.br branch
+git config --global core.editor emacs
+ +== Emacs == + +Instalado emacs desde los repos: + +
sudo aptitude install emacs
+ +== Lenguaje de programación D (D programming language) == + +El lenguaje de programación D es un lenguaje de programación de sistemas con una sintaxis similar a la de C y con tipado estático. Combina eficiencia, control y potencia de modelado con seguridad y productividad. + + +=== D-apt e instalación de programas === + +Configurado ''d-apt'', instalados todos los programas incluidos + +
sudo wget http://master.dl.sourceforge.net/project/d-apt/files/d-apt.list -O /etc/apt/sources.list.d/d-apt.list
+sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys  EBCF975E5BA24D5E
+sudo apt update
+Instalamos todos los programas asociados excepto ''textadept'' que no uso. + +
sudo apt install dmd-compiler dmd-tools dub dcd dfix dfmt dscanner
+ +=== DCD === + +Una vez instalado el DCD tenemos que configurarlo creando el fichero ~/.config/dcd/dcd.conf con el siguiente contenido: + +
/usr/include/dmd/druntime/import
+/usr/include/dmd/phobos
+Podemos probarlo con: + +
dcd-server &
+echo | dcd-client --search toImpl
+=== gdc === + +Instalado con: + +
sudo aptitude install gdc
+=== ldc === + +Instalado con: + +
sudo aptitude install ldc
+Para poder ejecutar aplicaciones basadas en Vibed, necesitamos instalar: + +
sudo apt-get install -y libssl-dev libevent-dev
+ +=== Emacs para editar D === + +Instalados los siguientes paquetes desde Melpa + +* d-mode +* flymake-d +* flycheck +* flycheck-dmd-dub +* flychek-d-unittest +* auto-complete (desde melpa) +* ac-dcd + +Referencias * (https://github.com/atilaneves/ac-dcd) * (https://github.com/Hackerpilot/DCD) + + +== C, C++ == + + +=== Instalación de Gnu Global === + +Para instalar las dependencias, previamente instalamos: + +sudo apt install ncurses-dev id-utils exuberant-ctags python-pygments +Con ctags --version nos aseguramos de que se llama a Exuberant y no el ctags que instala Emacs. Si no es así habrá que revisar la definición del PATH + +python-pygments no es necesario para C o C++, pero añade funcionalidad a Global (hasta 25 lenguajes de programación más) + +No podemos instalar Global desde los repos de Ubuntu, está muy anticuado y genera bases de datos enormes y lentas. Tendremos que compilarlo. + +Nos bajamos las fuentes del programa desde [https://www.gnu.org/software/global/ la página oficial] En el momento de escribir esto se trata de la versión 6.6.4. + +Descomprimimos los fuentes y los compilamos con: + +./configure --prefix=/usr/local --with-exuberant-ctags=/usr/bin/ctags +make +sudo make install +He comprobado que make uninstall funciona correctamente, las librerías quedan instaladas en /usr/local/lib/gtags y los ejecutables en /usr/local/bin + + +== Rust == + +Instalamos siguiendo las instrucciones de [https://www.rust-lang.org/tools/install aqui] (Hacemos la instalación por defecto) + +curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh + + stable installed - rustc 1.47.0 (18bf6b4f0 2020-10-07) + + +Rust is installed now. Great! + +To get started you need Cargo's bin directory ($HOME/.cargo/bin) in your PATH +environment variable. Next time you log in this will be done +automatically. + +To configure your current shell run source $HOME/.cargo/env + +Yo comento la linea del fichero .zprofile por que mi .zshrc ya lee el fichero .profile + +Para desinstalar rust bastaría con ejecutar rustup self uninstall + +Para actualizar la instalación: rustup update + + +=== RLS === + +Seguimos las instrucciones de la página oficial de [https://emacs-lsp.github.io/lsp-mode/page/lsp-rust/ LSP] y de [https://github.com/rust-lang/rls RLS] + +rustup update +rustup component add rls rust-analysis rust-src + +=== Algunas utilidades de sistema escritas en Rust === + +Instalamos: + +cargo install tealdeer # tldr tldr +cargo install du-dust # tldr dust +cargo install fd-find # tldr fd +cargo install exa # tldr exa +cargo install tokei # tldr tokei +cargo install gitui # gitui --help +cargo install ripgrep # tldr rg +cargo install bat # tldr bat +cargo install lsd # tldr lsd +cargo install git-delta # tldr delta +cargo install --locked navi # navi fn welcome (requires fzf and tldr) +cargo install --locked zoxide # tldr zoxide +cargo install --locked zellij # tldr zellij +cargo install atuin # tldr atuin +'''Nota''': fzf instalado descargando el binario en ~/.local/bin desde su github + +== golang == + +Bajamos el paquete con la última versión desde [https://golang.org/dl/ la página oficial]. + +Descomprimimos como ''root'' en /usr/local/ + +sudo tar -C /usr/local -xvzf go1.15.7.linux-amd64.tar.gz +Añadimos al path con las siguientes lineas en ~/.profile: + +#golang +if [ -d "/usr/local/go" ] ; then + export GOROOT="/usr/local/go" + PATH="$PATH:$GOROOT/bin" +fi +if [ -d "$HOME/work/development/gocode" ] ; then + export GOPATH="$HOME/work/development/gocode" + PATH="$PATH:$GOPATH/bin" +fi + +=== Instalación de ''gopls'' un servidor de LSP para editores: === + +Desde un directorio '''que no sea el GOPATH''' + +GO111MODULE=on go get golang.org/x/tools/gopls@latest +=== golint === + +go get -u golang.org/x/lint/golint + +=== Utilidades escritas en go === + +go install github.com/jesseduffield/lazygit@latest +go install github.com/cheat/cheat/cmd/cheat@latest + +== Processing == + +Bajamos el paquete de la [https://processing.org/ página web], descomprimimimos en ~/apps/, en las nuevas versiones incorpora un script de instalación que ya se encarga de crear el fichero ''desktop''. + +La última versión incorpora varios modos de trabajo, he descargado el modo ''Python'' para probarlo. + + +== openFrameworks == + +Nos bajamos los fuentes para linux 64bits desde [https://openframeworks.cc la página web del proyecto], y las descomprimimos en un directorio para proceder a compilarlas. + +No hay más que seguir [https://openframeworks.cc/setup/linux-install/ las instrucciones de instalación para linux]. + +La instalación no es demasiado intrusiva si tienes Ubuntu 18 o mayor y una versión reciente del gcc. + +En la primera pregunta que nos hace es necesario contestar que no. De lo contrario falla la compilación. + +Añade los siguientes paquetes a nuestro sistema + +installing OF dependencies +OF needs to install the following packages using apt-get: +curl libjack-jackd2-0 libjack-jackd2-dev freeglut3-dev libasound2-dev libxmu-dev libxxf86vm-dev g++ libgl1-mesa-dev libglu1-mesa-dev libraw1394-dev libudev-dev libdrm-dev libglew-dev libopenal-dev libsndfile-dev libfreeimage-dev libcairo2-dev libfreetype6-dev libssl-dev libpulse-dev libusb-1.0-0-dev libgtk-3-dev libopencv-dev libassimp-dev librtaudio-dev libboost-filesystem-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-libav gstreamer1.0-pulseaudio gstreamer1.0-x gstreamer1.0-plugins-bad gstreamer1.0-alsa gstreamer1.0-plugins-base gstreamer1.0-plugins-good gdb libglfw3-dev liburiparser-dev libcurl4-openssl-dev libpugixml-dev libgconf-2-4 libgtk2.0-0 libpoco-dev +Do you want to continue? [Y/n] +No te olvides de compilar también el ''Project Generator''. + + +== Python == + +En Linux Mint Vanessa ya no tenemos ''python2'' (aunque podemos instalarlo) + +Para dejar a ''python3'' como python de sistema instalamos el paquete: + +sudo apt install python-is-python3 + +Después podemos comprobar la versión: + +python -V +Python 3.10.6 + +=== Paquetes de sistema relacionados con python que instalamos === + +Son los que ya comentamos en la sección de instalación de zsh, como ya dijimos conviene que instalemos los paquetes de desarrollo: + +sudo apt install python3-dev +sudo apt install python3-all-dev +sudo apt install python3-virtualenv python3-virtualenvwrapper python3-virtualenv-clone +sudo apt install pipx +# sudo apt install python3-poetry +Ademas añadimos las siguientes lineas al fichero ~/.profile: + +# WORKON_HOME for virtualenvwrapper +if [ -d "$HOME/.virtualenvs" ] ; then +WORKON_HOME="$HOME/.virtualenvs" +fi +[https://virtualenvwrapper.readthedocs.io/en/latest/command_ref.html Aquí] tenemos la referencia de comandos de ''virtualenvwrapper''. + +=== pyenv === + +Instalamos los pre-requisitos: + +sudo apt-get update +sudo apt-get install --no-install-recommends make build-essential \ +libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev \ +wget curl llvm libncurses5-dev xz-utils tk-dev \ +libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev +Podemos clonar el repo en nuestro home: + +git clone https://github.com/pyenv/pyenv.git ~/.pyenv +Pero también podemos añadir el ''bundle'' para ''Antigen'' en el fichero .zshrc y dejar que se encargue de todo. (Este es el camino que yo sigo) + +antigen bundle mattberther/zsh-pyenv +Añadimos al fichero ~/.profile: + +# pyenv +if [ -d "$HOME/.pyenv" ] ; then + export PYENV_ROOT="$HOME/.pyenv" + export PATH="$PYENV_ROOT/bin:$PATH" +fi +Y configuramos en ~/.bashrc y en ~/.zshrc (aunque en el último no es necesario tocar nada si usamos el ''bundle'' para ''Antigen''): + +if command -v pyenv 1>/dev/null 2>&1; then + eval "$(pyenv init -)" +fi +Podemos probar que todo funciona con: pyenv install -l + +Una vez instalado hay que estudiarse [https://github.com/pyenv/pyenv/blob/master/COMMANDS.md la referencia de comandos] + +=== poetry === + +Podríamos instalar con: + +curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python3 - +Dejamos la activación solo en el fichero ~ /.profile, añadiendo las siguientes lineas: + +# poetry +if [ -d "$HOME/.poetry"] ; then + PATH="$HOME/.poetry/bin:$PATH" +fi +Las actualizaciones se realizan con poetry self update + +También podríamos instalarlo como un paquete de Ubuntu. + + +=== Instalación de bpython y ptpython === + +[https://bpython-interpreter.org/ ''bpython''] instalado desde repos sudo apt install bpython + +[https://github.com/prompt-toolkit/ptpython ''ptpython''] instalado en un virtualenv para probarlo + + +=== Jupyter === + +Una instalación para pruebas. + +mkvirtualenv -p /usr/bin/python3 jupyter +python -m pip install jupyter + +=== Instalamos python3.11 === + +python3.11 está ya disponible en los repos oficiales. + +Para dejarla instalada (yo no lo instalo): + +sudo apt install python3.11 python3.11-dev python3.11-venv +== neovim == + +Vamos a probar ''neovim'', ahora mismo la versión de los repos de Ubuntu está actualizada a la penúltima versión (0.4.3). También podemos descargar el appimage desde [https://github.com/neovim/neovim/releases la página web] + +Es de esperar que alguna vez vuelvan a tener el neovim disponible en los repos de la aplicación: + +
sudo apt-add-repository ppa:neovim-ppa/stable
+sudo apt update
+sudo apt install neovim
+Para instalar los módulos de python creamos un ''virtualev'' que más tarde añadiremos al fichero init.vim. + +
mkvirtualenv -p /usr/bin/python3 neovim3
+sudo pip install --upgrade neovim
+deactivate
+Revisar [https://neovim.io/doc/user/provider.html#provider-python esto] + + +----- + +'''NOTA''': El siguiente paso ya no parece necesario, las alternativas se han actualizado con la instalación del ''neovim''. + + +----- + +Para actualizar las alternativas: + +
sudo update-alternatives --install /usr/bin/vi vi /usr/bin/nvim 60
+sudo update-alternatives --config vi
+sudo update-alternatives --install /usr/bin/vim vim /usr/bin/nvim 60
+sudo update-alternatives --config vim
+ +==== Install ''vim-plug'' ==== + +Ejecutamos: + +
curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \
+    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
+Configuramos el fichero de configuración de ''nvim'' (~/.config/nvim/init.vim): + +
" Specify a directory for plugins
+" - For Neovim: ~/.local/share/nvim/plugged
+" - Avoid using standard Vim directory names like 'plugin'
+call plug#begin('~/.local/share/nvim/plugged')
+
+if has('nvim')
+  Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
+else
+  Plug 'Shougo/deoplete.nvim'
+  Plug 'roxma/nvim-yarp'
+  Plug 'roxma/vim-hug-neovim-rpc'
+endif
+
+Plug 'deoplete-plugins/deoplete-jedi'
+
+" Initialize plugin system
+call plug#end()
+
+let g:deoplete#enable_at_startup = 1
+
+" set python enviroments
+let g:python_host_prog = '/full/path/to/neovim2/bin/python'
+let g:python3_host_prog = '/home/salvari/.virtualenvs/neovim3/bin/python'
+
+
+La primera vez que abramos ''nvim'' tenemos que instalar los plugin por comando ejecutando: :PlugInstall + +'''Instalación de dein''' + +{| class="wikitable" +|- +| style="text-align: left;"| '''Nota''': +|- +| style="text-align: left;"| Solo hay que instalar uno de los dos o ''dein'' o ''plug-vim''. Yo uso +|- +| style="text-align: left;"| ''plug-vim'' así que esto es sólo una referencia. +|} + +https://github.com/Shougo/dein.vim + +
" Add the dein installation directory into runtimepath
+set runtimepath+=~/.config/nvim/dein/repos/github.com/Shougo/dein.vim
+
+if dein#load_state('~/.config/nvim/dein')
+  call dein#begin('~/.config/nvim/dein')
+
+  call dein#add('~/.config/nvim/dein/repos/github.com/Shougo/dein.vim')
+  call dein#add('Shougo/deoplete.nvim')
+  call dein#add('Shougo/denite.nvim')
+  if !has('nvim')
+    call dein#add('roxma/nvim-yarp')
+    call dein#add('roxma/vim-hug-neovim-rpc')
+  endif
+
+  call dein#end()
+  call dein#save_state()
+endif
+
+filetype plugin indent on
+syntax enable
+ +== Firefox developer edition == + +El rollo de siempre, descargar desde [https://www.mozilla.org/en-US/firefox/developer/ la página web] descomprimir en ~/apps y crear un lanzador. + + +== Navegadores cli == + +Herramientas útiles para depuración web + +sudo apt install httpie links + +== MariaDB == + +Ahora siempre uso los servidores de base de datos dockerizados. Pero sigue siendo interesante instalar los clientes en nuestro sistema con sudo apt install mariadb-client + + +== Squirrel SQL Client == + +Bajamos el zip de estándar desde [http://www.squirrelsql.org/ la página web de Squirrel] (yo prefiero no usar el instalador) + +Como de costumbre descomprimimos en ~/apps y creamos una entrada en nuestro menú de aplicaciones. + +Nos descargamos también el ''java connector'' para MariaDB. Desde la página oficial. Nos interesa el fichero maria-java-client-2.6.0.jar + +Configuramos el driver para que sepa donde está el fichero .jar y ya estamos listos para trabajar. + +El fichero squirrel-sql.sh necesita que lo lancemos desde el directorio del script. + + +== R y R-studio == + +Primero instalamos la última versión de R en nuestro pc: + +wget -qO- https://cloud.r-project.org/bin/linux/ubuntu/marutter_pubkey.asc \ + |gpg --dearmor -o /usr/local/share/keyrings/cran-archive-keyring.gpg + +. /etc/os-release +sudo echo "deb [signed-by=/usr/local/share/keyrings/cran-archive-keyring.gpg ] \ +https://cloud.r-project.org/bin/linux/ubuntu ${UBUNTU_CODENAME}-cran40/" \ +| sudo tee /etc/apt/sources.list.d/cran.list + +sudo apt update +sudo apt install r-base + +=== R-studio === + +Ojo, tenemos ''R-studio Server'' y ''R-studio Desktop'', en tu portátil casi seguro que quieres el ''Desktop'' y no el ''Server''. + +Para ''R-studio Server'' descargamos la última versión disponible de ''R-studio'' desde la [https://rstudio.com/products/rstudio/download-server/debian-ubuntu/ página web] + +Instalamos con ''gdebi'' (basta con clicar sobre el fichero ''.deb'') + +Para ''R-studio Desktop'' descargamos la última versión disponible desde la [https://www.rstudio.com/products/rstudio/download/#download página web] + +Igual que el ''Server'' instalamos el paquete del ''Desktop'' con ''gedebi''. + + +== Octave == + +Instalado desde flatpak + +
sudo flatpak install flathub org.octave.Octave
+ +== go Hugo == + +Generador de sitios web estáticos. + +Instalado fichero .deb desde las sección de ''releases'' de la página web: [https://github.com/gohugoio/hugo hugo github] '''Asegúrate de instalar el Hugo Extended''' + + += Desarrollo hardware = + + +== Arduino IDE == + +Bajamos los paquetes de la página [https://www.arduino.cc web], descomprimimimos en ''~/apps/arduino''. + +La distribución del IDE incluye ahora un fichero install.shque se encarga de hacer la integración del IDE en los menús de Linux. + +Además también incluye un script (arduino-linux-setup.sh) para crear las ''devrules'' y que además desinstala el driver ''modemmanager'' y crea grupos nuevos en el sistema si no existen. + +No tengo claro lo de desinstalar el driver así que comentamos la sección que borra el ''modemmanager'' del fichero arduino-linux-setup.sh y lo ejecutamos para que instale el resto. + +Yo añado el fichero 99-arduino.rules que se encarga de inhibir el modemmanager para que no capture al CircuitPlayground Express: + +# for arduino brand, stop ModemManager grabbing port +ATTRS{idVendor}=="2a03", ENV{ID_MM_DEVICE_IGNORE}="1" +# for sparkfun brand, stop ModemManager grabbing port +ATTRS{idVendor}=="1b4f", ENV{ID_MM_DEVICE_IGNORE}="1" +Después de añadir ficheros de reglas podemos recargar las reglas ejecutando: + +udevadm control --reload-rules && udevadm trigger + +Tenemos que crear los ficheros .desktop. + + +=== Arduino IDE 2 === + +Descargamos el fichero ''appmimage'' de la página de Arduino y creamos el fichero .desktop. + + +=== Añadir soporte para ''Feather M0'' === + +Arrancamos el IDE Arduino y en la opción de ''Preferences::Aditional Board Managers URLs'' añadimos la dirección https://adafruit.github.io/arduino-board-index/package_adafruit_index.json, si tenemos otras URL, simplemente añadimos esta separada por una coma. + +Ahora desde el ''Board Manager'' instalamos: + +* Arduino SAMD Boards +* Adafruit SAMD Boards + + +=== Añadir soporte para ''Circuit Playground Express'' === + +Bastaría con instalar ''Arduino SAMD Boards'' + + +=== Añadir soporte para STM32 === + +Tenemos varias URL posibles para configurar en las preferencias del IDE Arduino: + +* https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json (esta deber ser la oficial) + +Pero la oficial no da soporte para usar el ''st-link'', necesitamos añadir alguna más. + +* http://dan.drown.org/stm32duino/package_STM32duino_index.json (recomendada por Tutoelectro, nos da soporte para el st-link) + + +----- + +'''NOTA''': Hasta donde yo se la de arriba es la única URL que permite usar el st-link + + +----- + +He optado por añadir los dos ficheros json al IDE, la oficial tiene buena pinta pero parece que no soporta st-link. Con la otra podremos usarlo sin problemas. + +Instalamos la biblioteca stm32 cores que corresponde al origen de software oficial y la biblioteca STM32F1xx/GD32F1xx, esta última es la que nos dará soporte explícito para el st-link + +Lo probamos con el ''Blink'' y funciona perfectamente con las opciones de la [[#figura_1|Figura 1]] + +
+ +[[File:src/img/stm32_arduino_opts.jpg|Opciones Arduino para STM32 con st-link]] + +
+ +=== Añadir soporte para ESP32 y ESP8266 === + +Añadimos las URL: + +* https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json (soporte para ESP32) +* http://arduino.esp8266.com/stable/package_esp8266com_index.json (soporte para ESP8266) + +Añadimos la librería: + +* ESP32 (de espressif) + + +=== Añadir biblioteca de soporte para Makeblock === + + +----- + +'''Nota''': Pendiente de instalar + + +----- + +Clonamos el [https://github.com/Makeblock-official/Makeblock-Libraries repo oficial en github]. + +Una vez que descarguemos las librerias es necesario copiar el directorio Makeblock-Libraries/makeblock en nuestro directorio de bibliotecas de Arduino. En mi caso ~/Arduino/libraries/. + +Una vez instaladas las bibliotecas es necesario reiniciar el IDE Arduino si estaba arrancado. Podemos ver si se ha instalado correctamente simplemente echando un ojo al menú de ejemplos en el IDE, tendríamos que ver los ejemplos de ''Makeblock''. + +Un detalle importante para programar el Auriga-Me es necesario seleccionar el micro Arduino Mega 2560 en el IDE Arduino. + + +== Pinguino IDE == + + +----- + +'''Nota''': Pendiente de instalar + + +----- + +Tenemos el paquete de instalación disponible en su página [http://pinguino.cc/download.php web] + +Ejecutamos el programa de instalación. El programa descargará los paquetes Debian necesarios para dejar el IDE y los compiladores instalados. + +Al acabar la instalación he tenido que crear el directorio ''~/Pinguino/v11'', parece que hay algún problema con el programa de instalación y no lo crea automáticamente. + +El programa queda correctamente instalado en ''/opt'' y arranca correctamente, habrá que probarlo con los micros. + + +== stm32 cubeide == + +Nos bajamos el instalador genérico. Tendremos que: + +* aceptar un montón de acuerdos de licencias +* indicarle un directorio de instalación (en mi caso ~/apps/st/st/stm32cubeide_1.4.0) +* darle la password de root para instalar ficheros de udev, concretamente: +** udev/rules.d/49-stlinkv1.rules +** udev/rules.d/49-stlinkv2-1.rules +** udev/rules.d/49-stlinkv2.rules +** udev/rules.d/49-stlinkv3.rules +** udev/rules.d/99-jlink.rules + +== esp-idf == + + +----- + +'''MUY IMPORTANTE''' es más fácil instalar el esp-idf a través de ''Platformio'' pero dejo las instrucciones de instalación que usé en su dia como referencia. + + +----- + +Instalamos las dependencias (cmake ya lo tenemos instalado) + + +----- + +'''NOTA''': No es necesario instalar los paquetes de python que nos especifican en las instrucciones de instalación del ''esp-idf'', se instalarán automáticamente en el siguiente paso. + + +----- + +sudo apt-get install gperf cmake ninja-build ccache libffi-dev libssl-dev +Ahora creamos un directorio para nuestro ''tool-chain'': + +mkdir ~/esp +cd ~/esp +git clone --recursive https://github.com/espressif/esp-idf +También es necesario que nuestro usuario pertenezca al grupo dialout, pero eso ya deberíamos tenerlo hecho de antes. + +Una vez clonado el repo ejecutamos el script de instalación + +cd ~/esp/esp-idf +./install.sh +Este script nos va a dejar instaladas todas las herramientas necesarias en el directorio ~/.expressif + +'''Nota''': para que funcione correctamente en Linux Mint es necesario que el script tools/idf_tools.py apunte al python3 de nuestro sistema. Basta con editar la primera linea ''shebang'' del script. + +Estas son las bibliotecas que deja instaladas: + +Installing ESP-IDF tools +Installing tools: xtensa-esp32-elf, xtensa-esp32s2-elf, esp32ulp-elf, esp32s2ulp-elf, openocd-esp32 +Para empezar a trabajar bastará con hacer un ''source'' del fichero ~/apps/esp/esp-idf/export.sh: + +. ~/apps/esp/esp-idf/export.sh + +== KiCAD == + +En la [http://kicad-pcb.org/download/linux-mint/ página web del proyecto] nos recomiendan el ppa a usar para instalar la última versión estable: + +
sudo add-apt-repository --yes ppa:kicad/kicad-5.1-releases
+sudo apt-get update
+sudo apt install kicad
+Paciencia, el paquete kicad-packages3d tarda un buen rato en descargarse. + +Algunas librerías alternativas: + +* [https://github.com/freetronics/freetronics_kicad_library Freetronics] una libreria que no solo incluye Shield para Arduino sino una completa colección de componentes que nos permitirá hacer proyectos completos. [http://www.freetronics.com Freetronics] es una especie de BricoGeek australiano, publica tutoriales, vende componentes, y al parecer mantiene una biblioteca para KiCAD. La biblioteca de Freetronics se mantiene en un repo de github. Lo suyo es incorporarla a cada proyecto, por que si la actualizas se pueden romper los proyectos que estes haciendo. +* [http://meta-blog.eklablog.com/kicad-librairie-arduino-pretty-p930786 eklablog] Esta biblioteca de componentes está incluida en el github de KiCAD, así que teoricamente no habría que instalarla en nuestro disco duro. + + +=== Actualizar a KiCAD 6.0 === + +Hacemos un sudo apt purge de todos los paquetes del antiguo KiCAD. Desactivamos el antiguo repo y ejecutamos: + +sudo add-apt-repository --yes ppa:kicad/kicad-6.0-releases +sudo apt update +sudo apt install --install-recommends kicad +# If you want demo projects +# sudo apt install kicad-demos +No hay demos de momento en el nuevo KiCAD 6.0 + + +=== Actualizar a KiCAD 7 === + +sudo add-apt-repository --yes ppa:kicad/kicad-7.0-releases +sudo apt update +sudo apt install --install-recommends kicad + +== Wireviz == + +Una herramienta para documentar cableados de proyectos. Es una aplicación ''Python'' que usa ''Graphviz'', lo he instalado con pipx. + +pyenv global ve_sys +pipx install wireviz +pyenv global system + +== Analizador lógico == + +Mi analizador es un OpenBench de Seedstudio, [http://dangerousprototypes.com/docs/Open_Bench_Logic_Sniffer aquí hay mas info] + + +=== Sigrok === + +Instalamos '''Sigrok''', simplemente desde los repos de Debian: + +sudo aptitude install sigrok +Al instalar '''Sigrok''' instalamos también '''Pulseview'''. + +Si al conectar el analizador, echamos un ojo al fichero ''syslog'' vemos que al conectarlo se mapea en un puerto tty. + +Si arrancamos '''Pulseview''' (nuestro usuario tiene que estar incluido en el grupo ''dialout''), en la opción ''File::Connect to device'', escogemos la opción ''Openbench'' y le pasamos el puerto. Al pulsar la opción ''Scan for devices'' reconoce el analizador correctamente como un ''Sump Logic Analyzer''. + + +=== Sump logic analyzer === + +Este es el software recomendado para usar con el analizador. + +Descargamos el paquete de la [https://www.sump.org página del proyecto], o más concretamente de [https://www.sump.org/projects/analyzer/ esta página] y descomprimimos en ''~/apps''. + +Instalamos las dependencias: + +sudo apt install librxtx-java +Editamos el fichero ''~/apps/Logic Analyzer/client/run.sh'' y lo dejamos así: + +
#!/bin/bash
+
+# java -jar analyzer.jar $*
+java -cp /usr/share/java/RXTXcomm.jar:analyzer.jar org.sump.analyzer.Loader
+Y ya funciona. + + +=== OLS === + + +----- + +'''Nota''': Pendiente de instalar + + +----- + +[https://www.lxtreme.nl/ols/ Página oficial] + + +== IceStudio == + +Instalamos dependencias con sudo apt install xclip + +Bajamos el ''AppImage'' desde el [https://github.com/FPGAwars/icestudio github de IceStudio] y lo dejamos en ~/apps/icestudio + + +== PlatformIO == + + +=== VS Code === + +Añadimos el origen de software: + +
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg
+sudo install -o root -g root -m 644 packages.microsoft.gpg /usr/share/keyrings/
+sudo sh -c 'echo "deb [arch=amd64 signed-by=/usr/share/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'
+E instalamos + +
sudo apt update
+sudo apt install code   # alternativamente code-insiders (es como la versión beta, se pueden instalar los dos)
+Ahora + +# lanzamos el editor +# abrimos el gestor de extensiones +# buscamos el platformio ide +# instalamos + +Seguimos las instrucciones de [https://docs.platformio.org/en/latest/ide/vscode.html#quick-start aqui] + + +=== Incluir platform.io CLI en el PATH === + +Esto es una malísima idea, '''NO LO HAGAS''' + +Las instrucciones indican que hagamos lo siguiente para usar Platformio desde linea de comandos pero no es conveniente hacerlo. + +Modificamos el fichero ~/.profile añadiendo las siguientes lineas: + +
if [ -d "$HOME/.platformio/penv/bin"] ; then
+    PATH="$PATH:$HOME/.platformio/penv/bin"
+fi
+Si quieres usar Platformio desde linea de comandos, es mejor activar manualmente el entorno virtual con source ~/.platformio/penv/bin/activate + +=== vscodium === + +wget -qO - https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo/raw/master/pub.gpg | gpg --dearmor | sudo dd of=/etc/apt/trusted.gpg.d/vscodium.gpg +echo 'deb https://paulcarroty.gitlab.io/vscodium-deb-rpm-repo/debs/ vscodium main' | sudo tee --append /etc/apt/sources.list.d/vscodium.list +sudo apt update && sudo apt install codium + +== RepRap == + + +=== OpenScad === + +El OpenSCAD está disponible en los orígenes de software, así que sudo apt install openscad. + + +=== Slic3r === + +Descargamos la estable desde la [https://slic3r.org página web] y como de costumbre descomprimimos en ~/apps y creamos un lanzador con ''MenuLibre'' + + +=== Slic3r Prusa Edition === + +Una nueva versión del clásico ''Slic3r'' con muchas mejoras. Descargamos la ''appimage'' desde la [https://www.prusa3d.com/slic3r-prusa-edition/ página web] y ya sabeis, descomprimir en ~/apps y dar permisos de ejecución. + + +=== ideaMaker === + +Una aplicación más para generar gcode con muy buena pinta, tenemos el paquete ''deb'' disponible en su [https://www.raise3d.com/pages/ideamaker página web]. Instalamos con el gestor de software. + + +=== Ultimaker Cura === + +Descargamos el ''AppImage'' desde la [https://github.com/Ultimaker/Cura/releases página web] + + +=== Pronterface === + +Seguimos las instrucciones para Ubuntu Focal: + +Instalamos las dependencias: sudo apt install libsdl2-dev + +Clonamos el repo: + +
cd ~/apps
+git clone https://github.com/kliment/Printrun.git
+cd Printrun
+mkvirtualenv -p /usr/bin/python3 printrun
+python -m pip install https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-20.04/wxPython-4.1.0-cp38-cp38-linux_x86_64.whl
+pip install -r requirements.txt
+# sudo apt-get install libdbus-glib-1-dev libdbus-1-dev
+Y ya lo tenemos todo listo para ejecutar. + + +== Cortadora de vinilos == + + +=== Inkcut === + +Instalado en un entorno virtual: + +mkvirtualenv -p `which python3` inkcut + +sudo apt install libxml2-dev libxslt-dev libcups2-dev + +pip install PyQt5 + +pip install inkcut + +=== Plugin para inkscape === + +Instalamos dependencias: + +pip install python-usb +Instalamos el fichero .deb desde la web https://github.com/fablabnbg/inkscape-silhouette/releases + + +== Drone == + +=== qgroundcontrol === + +Descargamos [https://s3-us-west-2.amazonaws.com/qgroundcontrol/latest/QGroundControl.AppImage el appimage] + +=== missionplanner === + +Para usar ''Mission Planner'' en Linux Mint se recomienda instalar los paquetes: + +sudo apt install mono-complete festival +Descargamos el MissionPlanner desde [https://firmware.ardupilot.org/Tools/MissionPlanner/MissionPlanner-latest.zip aquí] + +[https://www.rcgroups.com/forums/showthread.php?2179591-Installing-MissionPlanner-1-3-X-on-Ubuntu-17-04 Descripción de la instalación] + +Una vez descomprimido el zip ejecutamos: mono MissionPlanner.exe + +== node-red == + +Para instalar node-red en linux necesitamos instalar primero node.js. Hay varias formas de instalar node.js, yo voy a optar por instalar nvm que es el '''n'''ode '''v'''ersion '''m'''anager. + +Para ello ejecutamos el siguiente comando (la versión actual de nvm es la 0.37.0) + +curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.0/install.sh | bash +El script de instalación añade las siguientes lineas al fichero ~/.bashrc, nosotros las movemos al fichero ~/.profile + +export NVM_DIR="$HOME/.nvm" +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm +[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion +Para comprobar la instalación usamos command -v nvm que nos devolverá nvm. which no funciona en este caso por que es un script para aplicarle source + + +=== Instalación de node.js === + +Ahora que tenemos nvm instalado, ya podemos instalar fácilmente la versión o versiones que queramos de node.js + +nvm ls-remote # para listar las versiones disponibles +nvm install node # instala la última versión disponible + +=== Instalación de mosquitto === + +mosquitto es un ''mqtt broker'' muy sencillo y completo, aunque no es capaz de aguantar cargas grandes, para aprender es perfecto. + +sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa +sudo apt-get update +sudo apt install mosquitto mosquitto-clients +Con esto queda el servicio instalado y funcionando (scs mosquitto o systemctl status mosquitto) + +Si queremos el servicio parado para arrancarlo nosotros manualmente: + +scsp mosquitto.service +scd mosquitto.service +Y sin alias sería: + +sudo systemctl stop mosquitto.service +sudo systemctl disable mosquitto.service +Para arrancarlo cuando lo necesitemos le damos un ''start'' con scst mosquitto.service o sudo systemctl start mosquitto.service + + +=== Instalación de Influxdb === + +Seguimos el método para ubuntu: + +wget -qO- https://repos.influxdata.com/influxdb.key | sudo apt-key add - +#source /etc/lsb-release +DISTRIB_ID=ubuntu +DISTRIB_CODENAME=focal +echo "deb https://repos.influxdata.com/${DISTRIB_ID} ${DISTRIB_CODENAME} stable" | sudo tee /etc/apt/sources.list.d/influxdb.list + +apt update +apt install influxdb +apt install telegraf + +=== Instalación de node-red === + +Una vez instalado el node.js instalar el node-red es muy fácil + +nvm use node +npm install -g --unsafe-perm node-red + += Aplicaciones de gráficos = + + +== LibreCAD == + +Diseño en 2D + +
sudo apt install librecad
+ +== FreeCAD == + +No hay ppa disponible para Ubuntu 20. + +Instalamos ''AppImage'' desde [https://wiki.freecadweb.org/AppImage#FreeCAD_AppImages aquí] + +Dejo la instalación desde ppa como recordatorio. + +
sudo add-apt-repository ppa:freecad-maintainers/freecad-stable
+sudo apt update
+sudo install freecad
+ +----- + +'''NOTA:''' the ccx package brings CalculiX support to the FEM workbench, and needs to be installed separately. + + +----- + + +== Inkscape == + +El programa libre para creación y edición de gráficos vectoriales. + +
sudo add-apt-repository ppa:inkscape.dev/stable
+sudo apt update
+sudo apt install inkscape
+ +== Gimp == + +El programa para edición y retocado de imágenes. + +Parece que ahora mismo los repos están más actualizados que el ppa. Así que bastaría con: + +sudo apt install gimp gimp-data gimp-texturize \ +gimp-data-extras gimp-gap gmic gimp-gmic +De todas formas dejo aquí las instrucciones para instalar desde el ppa por si hacen falta algún dia: + +
sudo apt remove gimp gimp-data
+sudo add-apt-repository ppa:otto-kesselgulasch/gimp
+sudo apt update
+sudo apt upgrade
+sudo apt install gimp gimp-data gimp-texturize \
+gimp-data-extras gimp-gap gmic gimp-gmic gimp-python
+ +=== Plugins de Gimp === + +Para instalar los principales plugins basta con: + +
sudo apt install gimp-plugin-registry
+ +== Krita == + +La versión disponible en orígenes de software está bastante por detrás de la disponible en la web. Basta con descargar el ''Appimage'' desde la [https://krita.org página web] + +Lo copiamos a ~/apps/krita y creamos un lanzador con el editor de menús. + +Alternativamente también lo tenemos disponible por ppa en https://launchpad.net/~kritalime/+archive/ubuntu/ppa + + +== MyPaint == + +Desde el [https://github.com/mypaint/ github] tenemos disponible la última versión en formato ''appimage''. La descargamos la dejamos en ~/apps y creamos un acceso con ''Menulibre'', como siempre. + + +== Alchemy == + +Igual que el ''MyPaint'' descargamos desde [http://al.chemy.org la página web], descomprimimos en ~/apps y creamos un accso con ''Menulibre''. + + +== Capturas de pantalla == + +El [https://flameshot.org ''flameshot''] cubre el 99% de mis necesidades: sudo apt install flameshot instala la última versión, parece que el desarrollo se detuvo en 2022. + +El [https://github.com/DamirPorobic/ksnip ''ksnip''] por si tenemos que hacer una captura con retardo, puede instalarse también bajando el paquete .deb desde la página web. O bien instalando con apt (la versión estable no ha cambiado desde el 2023, en el momento de escribir esto) + +Shutter vuelve a estar disponible, al instalar desde este ppa ya queda con las opciones de edición habilitadas: + +sudo add-apt-repository ppa:linuxuprising/shutter +sudo apt update +sudo apt install shutter + +== Reoptimizar imágenes == + + +=== ImageMagick === + +Instalamos desde los repos, simplemente: + +
sudo apt install imagemagick
+ +=== Imagine === + +Nos bajamos un ''AppImage'' desde el [https://github.com/meowtec/Imagine/releases github] de la aplicación + +Tiene toda la pinta de que Imagine no me va con los graficos nvidia (con el doble monitor) + +== dia == + +Un programa para crear diagramas + +
sudo apt install dia dia-shapes gsfonts-x11
+ +== Blender == + +Bajamos el Blender linkado estáticamente de [https://www.blender.org la página web] y lo descomprimimos en ~/apps/blender. + +El paquete incluye un fichero blender.desktop que podemos editar y copiar en ~/.local/share/applications. + + +== Structure Synth == + +Instalado desde repos, junto con sunflow para explorar un poco. + +
sudo apt install structure-synth sunflow
+ +== Heron animation == + +El proyecto parece abandonado. El software ya no funciona en el último linux. + + +== Stopmotion == + +Primero probamos el del repo: sudo apt install stopmotion + + +== Instalación del driver digiment para tabletas gráficas Huion == + +Descargamos el fichero .deb de [https://github.com/DIGImend/digimend-kernel-drivers la página web] y funciona perfectamente. + +Para comprobar: + +
xinput --list
+dkms status
+La referencia para el antiguo método que usaba para instalar los drivers: + +* [https://davidrevoy.com/article331/setup-huion-giano-wh1409-tablet-on-linux-mint-18-1-ubuntu-16-04 Aquí] + + += Sonido = + + +== Spotify == + +Spotify instalado desde las opciones de Linux Mint via flatpak. + + +== Audacity == + +Instalamos Audacity desde la página web descargando un ''Appimage''. + +Instalamos también el plugin [https://theaudacitytopodcast.com/chriss-dynamic-compressor-plugin-for-audacity/ Chris’s Dynamic Compressor plugin] + + +== Clementine == + +La version disponible en los orígenes de software parece al dia: + +
sudo apt install clementine
+== somafm == + +Instalamos el cli con: + +sudo apt install jq mpv +cd ~/.local/bin +wget https://raw.githubusercontent.com/rockymadden/somafm-cli/master/src/somafm +chmod 744 somafm + +somafm --help + +somafm ls +somafm listen defcon --quality=highest + += Video = + + +== Shotcut == + +Nos bajamos la ''AppImage'' para Linux desde la [https://www.shotcut.org/ página web]. + +La dejamos en ~/apps/video/shotcut y: + +
cd
+chmod 744 Shotcutxxxxxx.AppImage
+./Shotcutxxxxxx.AppImage
+== kdenlive == + +Está disponible [https://kdenlive.org en la web] como ppa o como ''appimage''. Lo he bajado como ''appimage'' para probarlo. + + +== Openshot == + +También descargado desde [https://www.openshot.org su web] como ''appimage'', para probar. Tienen un ppa disponible. + + +== Avidemux == + +Descargado ''appimage'' desde [http://avidemux.sourceforge.net/ la web] + + +== Handbrake == + +Instalado como flatpak desde [https://handbrake.fr/ su web]. + + +== Grabación de screencast == + + +=== Vokoscreen, Kazam y SimpleScreenRecorder === + +Instalados desde los repos oficiales: + +
sudo apt update
+sudo apt install vokoscreen  vokoscreen-ng kazam simplescreenrecorder
+Escoge el que más te guste. + + +=== OBS === + +Añadimos el repositorio + +sudo add-apt-repository ppa:obsproject/obs-studio +sudo apt update +sudo apt install obs-studio + +== Grabación de podcast == + + +=== Mumble === + +Podemos instalarlo desde flatpak o bajarnos [https://launchpad.net/~mumble/+archive/ubuntu/release/+packages el paquete antiguo] (parece que funciona bien). + +Mumble no está disponible desde el PPA, aunque dejo aquí las instrucciones por si lo corrigen. + +
sudo add-apt-repository ppa:mumble/release
+sudo apt update
+    sudo apt install mumble
+ +== Clientes de youtube == + +=== smtube === + +Instalado el ppa siguiendo instrucciones de [http://www.smtube.org/ su página web]. + +sudo add-apt-repository ppa:rvm/smplayer +sudo apt-get update +sudo apt-get install smtube + +=== Freetube === + +Descargado el .deb desde [https://freetubeapp.io/#download su página web]. + + += Fotografía = + + +== Rawtherapee == + +Bajamos el AppImage desde la [http://rawtherapee.com/ página web] al directorio ~/apps/image/rawtherapee. + +Como siempre: + +# Hacemos el fichero ejecutable +# Creamos un enlace current +# Creamos un fichero .desktop + + +== Darktable == + +Instalamos ppa (ver [https://software.opensuse.org/download/package?package=darktable&project=graphics%3Adarktable esta web]) + +
echo 'deb [signed-by=/usr/share/keyrings/darktable-archive-keyring.gpg] http://download.opensuse.org/repositories/graphics:/darktable/xUbuntu_22.04/ /' | sudo tee /etc/apt/sources.list.d/graphics:darktable.list
+curl -fsSL https://download.opensuse.org/repositories/graphics:darktable/xUbuntu_22.04/Release.key | gpg --dearmor | sudo tee /usr/share/keyrings/darktable-archive-keyring.gpg > /dev/null
+sudo apt update
+sudo apt install darktable
+Se instala la última versión de Darktable (4.2.0) + + +== Digikam == + +Instalado desde la [https://www.digikam.org/ página web] de la aplicación con appimage. + + +== Webcamoid == + +Descargada la appimage desde la [https://webcamoid.github.io/ página web] + + += Seguridad = + + +== Autenticación en servidores por clave pública == + +Generar contraseñas para conexión servidores remotos: + +
cd ~
+ssh-keygen -b 4096 [-t dsa | ecdsa | ed25519 | rsa | rsa1]
+cat .ssh/
+Solo resta añadir nuestra clave pública en el fichero authorized_keys del servidor remoto. + +
cat ~/.ssh/id_xxx.pub | ssh user@hostname 'cat >> .ssh/authorized_keys'
+[https://www.digitalocean.com/community/tutorials/understanding-the-ssh-encryption-and-connection-process ¿Cómo funciona esto?] + + +== Claves gpg == + +gpg --gen-key Para generar nuestra clave. + +* '''Siempre''' hay que ponerle una fecha de expiración, la puedes cambiar más tarde. +* '''Siempre''' hay que escoger la máxima longitud posible + + +== Seahorse == + +Para manejar todas nuestras claves con comodidad: + +sudo apt install seahorse + + +== Conexión a github con claves ssh == + +Usando este método podemos conectarnos a github sin tener que teclear la contraseña en cada conexión. + + +=== Claves ssh === + +Podemos echar un ojo a nuestras claves desde seahorse la aplicación de gestión de claves que hemos instalado. También podemos ver las claves que tenemos generadas: + +
ls -al ~/.ssh
+En las claves listadas nuestras claves públicas aparecerán con extensión .pub + +También podemos comprobar que claves hemos añadido ya a nuestro agente ssh con: + +
ssh-add -l
+Para generar una nueva pareja de claves ssh: + +
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
+Podremos dar un nombre distintivo a los ficheros de claves generados y poner una contraseña adecuada a la clave. Si algún dia queremos cambiar la contraseña: + +
ssh-keygen -p
+Ahora tenemos que añadir nuestra clave ssh en nuestra cuenta de github, para ello editamos con nuestro editor de texto favorito el fichero ~/.ssh/id_rsa.pub y copiamos el contenido integro. Después pegamos ese contenido en el cuadro de texto de la web de github. + +Para comprobar que las claves instaladas en github funcionan correctamente: + +
ssh -T git@github.com
+Hi salvari! You've successfully authenticated, but GitHub does not provide shell access.
+Este mensaje indica que todo ha ido bien. + +Ahora en los repos donde queramos usar ssh debemos cambiar el remote: + +
git remote set-url origin git@github.com:$USER/$REPONAME.git
+ +== Signal == + +El procedimiento recomendado en la página oficial lo modifico para dejar las claves GPG en /usr/local/keyrings + +# 1. Install our official public software signing key +wget -O- https://updates.signal.org/desktop/apt/keys.asc | gpg --dearmor > signal-desktop-keyring.gpg +cat signal-desktop-keyring.gpg | sudo tee -a /usr/local/share/keyrings/signal-desktop-keyring.gpg > /dev/null + +# 2. Add our repository to your list of repositories +echo 'deb [arch=amd64 signed-by=/usr/local/share/keyrings/signal-desktop-keyring.gpg] https://updates.signal.org/desktop/apt xenial main' |\ + sudo tee -a /etc/apt/sources.list.d/signal-xenial.list + +# 3. Update your package database and install signal +sudo apt update && sudo apt install signal-desktop +Parece que todo funciona correctamente pero necesité un reinicio del ordenador para que Signal arrancase correctamente. + + +== Element (cliente de matrix.org) == + +Instalamos con: + +sudo apt install -y wget apt-transport-https + +sudo wget -O /usr/share/keyrings/element-io-archive-keyring.gpg \ +https://packages.element.io/debian/element-io-archive-keyring.gpg + +echo "deb [signed-by=/usr/share/keyrings/element-io-archive-keyring.gpg] \ +https://packages.element.io/debian/ default main" \ +| sudo tee /etc/apt/sources.list.d/element-io.list + +sudo apt update + +sudo apt install element-desktop + +== Lector DNI electrónico == + +Descargamos la aplicación en formato .deb desde [https://www.dnielectronico.es/PortalDNIe/PRF1_Cons02.action?pag=REF_1112 la página de descargas del portal DNIe]. + +Automáticamente nos instalará las dependecias: libccid, pcsd y pinentry-gtk2. A mayores instalamos: + +sudo apt-get install pcsc-tools opensc +El opensc no es necesario para el DNIe, pero nos permite usar otras tarjetas. + +Como root ejecutamos pcsc_scan: + +
root@rasalhague:~# pcsc_scan
+PC/SC device scanner
+V 1.4.23 (c) 2001-2011, Ludovic Rousseau <ludovic.rousseau@free.fr>
+Compiled with PC/SC lite version: 1.8.11
+Using reader plug'n play mechanism
+Scanning present readers...
+Waiting for the first reader...
+Si insertamos el lector veremos algo como esto: + +
root@rasalhague:~# pcsc_scan
+PC/SC device scanner
+V 1.4.23 (c) 2001-2011, Ludovic Rousseau <ludovic.rousseau@free.fr>
+Compiled with PC/SC lite version: 1.8.11
+Using reader plug'n play mechanism
+Scanning present readers...
+Waiting for the first reader...found one
+Scanning present readers...
+0: C3PO LTC31 v2 (11061005) 00 00
+
+Wed Jan 25 01:17:20 2017
+Reader 0: C3PO LTC31 v2 (11061005) 00 00
+  Card state: Card removed,
+Si insertamos un DNI veremos que se lee la información de la tarjeta insertada: + +
Reader 0: C3PO LTC31 v2 (11061005) 00 00
+  Card state: Card inserted,
+y mas rollo + +Para abrir los certificados en el navegador Firefox, nos lo explica [https://www.agenciatributaria.es/AEAT.internet/Inicio/Ayuda/_comp_Consultas_informaticas/Categorias/Firma_digital__certificado_o_DNIe__y_sistema_Cl_ve_PIN/DNI_electronico__DNIe_/Comprobaciones_tecnicas_para_el_funcionamiento_del_DNIe/Comprobaciones_tecnicas_del_DNIe_con_Mozilla_Firefox_y_Linux/Comprobaciones_tecnicas_del_DNIe_con_Mozilla_Firefox_y_Linux.shtml esta página de la AEAT] + +Como se puede ver el link de la AEAT, los pasos necesarios para Firefox son: + +# Vamos a preferencias y buscamos ‘cert’ +# En el diálogo de certificados abrimos los Dispositivos de Seguridad (''Security Devices'') +# Para dar de alta un nuevo dispositivo pulsamos el botón Cargar (''Load'') +# Damos un nombre (p.ej. DNIe) y asociamos el driver: /usr/lib/libpkcs11-dnie.so +# Adicionalmente podemos Cargar (crear), otro dispositivo con el driver opensc, no es necesario para el DNIe pero nos añade soporte para otras tarjetas. (Nombre: OtrasTarjetas, Driver: `/usr/lib/x86_64-linux-gnu/pkcs11/opensc-pkcs11.so) + + +----- + +'''NOTA''': + +Para cada tarjeta puede hacer falta un driver diferente, tendrás que investigar con ayuda del pcsc_scan y herramientas similares. + + +----- + + +== Instalación de wireguard. == + +Instalamos con: + +sudo apt install wireguard + += Virtualizaciones y contenedores = + + +== Instalación de ''virtualBox'' == + +Instalamos desde los repos de Ubuntu + +sudo apt install virtualbox virtualbox-ext-pack virtualbox-guest-additions-iso virtualbox-guest-x11 + +== Docker == + +Tenemos que añadir el repositorio correspondiente a nuestra distribución: + +
# Be safe
+sudo apt remove docker docker-engine docker.io
+sudo apt autoremove
+sudo apt update
+
+# Install pre-requisites
+sudo apt install ca-certificates curl gnupg lsb-release
+
+# Import the GPG key
+ sudo mkdir -m 0755 -p /usr/local/share/keyrings
+ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/local/share/keyrings/docker.gpg
+
+# Add the repo for Docker
+
+echo \
+  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/local/share/keyrings/docker.gpg] https://download.docker.com/linux/debian \
+  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
+
+# Update the package database
+
+sudo apt update
+#
+
+apt-cache policy docker-ce
+
+sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
+
+sudo gpasswd -a username docker
+Esto dejará el servicio ''docker'' funcionando y habilitado (arrancará en cada reinicio del ordenador) + +La forma de pararlo es: + +sudo systemctl stop docker +sudo systemctl disable docker +systemctl status docker +Añadimos el ''bundle'' '''docker''' en nuestro fichero ~/.zshrc para tener autocompletado en comandos de docker. + +Para usar ''docker'' tendremos que arrancarlo, con los alias de nuestro sistema para ''systemd'' ejecutamos: + +scst docker # para arrancar el servicio + +scsp docker # para parar el servicio + += Utilidades para mapas y cartografía = + +== josm == + +Descargamos y añadimos la clave gpg: + +
wget -q https://josm.openstreetmap.de/josm-apt.key -O- | sudo apt-key add -
+Añadimos el origen de software: + +
sudo add-apt-repository "deb [arch=amd64] https://josm.openstreetmap.de/apt $(. /etc/os-release; echo "$UBUNTU_CODENAME") universe"
+Y ahora procedemos a la instalación: + +
sudo apt update
+sudo apt install openjfx josm
+Alternativamente también podemos instalar la versión “nightly” con el siguiente comando, pero tendréis actualizaciones diarias: + +
sudo apt josm-latest
+Ya estamos listos para editar Open Street Map offline. + + +== MOBAC == + +Bajamos el paquete desde [http://mobac.sourceforge.net/ la página web] y descomprimimos en ~/apps/mobac como de costumbre nos creamos una entrada de menú con ''MenuLibre''. + +Conviene bajarse wms adicionales para MOBAC y leerse [http://mobac.sourceforge.net/wiki/index.php/Custom_XML_Map_Sources la wiki] + + +=== Referencias === + +\*[Cartografía digital] (https://digimapas.blogspot.com.es/2015/01/oruxmaps-vii-mapas-de-mobac.html) + + +== QGIS == + +Añadimos la clave gpg: + +
wget -q  https://qgis.org/downloads/qgis-2019.gpg.key -O- | sudo apt-key add -
+Ejecutamos: + +
sudo add-apt-repository "deb [arch=amd64] https://qgis.org/debian $(. /etc/os-release; echo "$UBUNTU_CODENAME") main"
+E instalamos como siempre + +
sudo apt update
+sudo apt install qgis
+ +=== Referencias === + +* [https://mappinggis.com/2015/09/como-conectar-con-servicios-wms-y-wfs-con-arcgis-qgis-y-gvsig/ Conectar WMS con QGIS] +* [https://www.altergeosistemas.com/blog/2014/03/28/importando-datos-de-osm-en-qgis-2/ Importar OSM en QGIS] +* [http://learnosm.org/es/osm-data/osm-in-qgis/ Learn OSM] +* [http://www.qgistutorials.com/es/docs/downloading_osm_data.html QGIS Tutorials] + + += Recetas variadas = + + +== Añadir las claves GPG de un repo == + +'''Este método está obsoleto y no se recomienda''' + +
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys  F7E06F06199EF2F2
+Hasta ahora añadíamos las claves usando el programa apt-key como se describe arriba. El programa añade las claves en el “llavero” /etc/apt/trusted.gpg. El gestor de paquetes apt confía ciegamente en las claves de este llavero. Eso permite que cualquier clave presente en el “llavero” sirva para instalar cualquier programa. No hay una relación unívoca entre claves y programas. + +Para evitar el ''warning'' podríamos almacenar las claves en /etc/apt/trusted.d, cada clave en si fichero separado. Pero eso dejaría el verdadero problema de establecer una relación entre clave y repo sin solucionar. + +Si seguimos las recomendaciones de '''''Debian''''', deberíamos tener un directorio solo accesible por root. Por ejemplo /usr/local/share/keyring y deberíamos almacenar las claves con nombres de la forma: <keyword>-archive-keyring.gpg. + +Una vez que tengamos la clave disponible debemos especificar para cada origen de software que clave le aplica para la autenticación de paquetes. + +'''En resumen''': + +* Las claves gpg de los repo se quedarán almacenadas en /usr/local/share/keyring, estarán en formato ''dearmored'' y con los nombres en la forma canónica <keyword>-archive-keyring.gpg +* Las especificaciones de los orígenes de software harán referencia explícita a la clave que hay que usar para comprobarlas, es decir, tendrán la forma: deb [signed-by=/usr/share/keyrings/<myrepository>-archive-keyring.gpg] <https://repository.example.com/debian/ stable main> + + +=== Si la clave ya estaba en trusted.gpg === + +sudo apt-key list + +# Obtendremos un lista de claves e identificamos la conflictiva: +# +# pub rsa1024 2009-01-22 [SC] +# E1DD 2702 88B4 E603 0699 E45F A171 5D88 E1DF 1F24 +# uid [ unknown] Launchpad PPA for Ubuntu Git Maintainers +# + + +# Exportamos la clave al "llavero": +sudo apt-key export E1DF1F24 |sudo gpg --dearmour -o /usr/local/share/gitMaintainers-archive-keyring.gpg + +# Editamos el fichero de orígenes del sw y probamos a actualizar +sudo apt update + +# si todo va bien podemos borrar la clave del trusted.gpg +sudo apt-key del E1DF1F24 + + +=== Descargando una clave con wget === + +wget -O- | \ +gpg --dearmor -o /usr/local/share/keyrings/-archive-keyring.gpg + +=== Importando claves directamente de un keyserver === + +\** REVISAR, ESTO FALLA ** + +sudo gpg --no-default-keyring --keyring /usr/local/share/keyrings/-archive-keyring.gpg \ +--keyserver --recv-keys + +== Solucionar problemas de menús duplicados usando menulibre == + +{| class="wikitable" +|- +| style="text-align: left;"| '''Nota''': Ya no uso ''MenuLibre'' +|} + +En el directorio ~/.config/menus/applications-merged borramos todos los ficheros que haya. + + +== Mapear un servidor webdav en nuestro sistema de ficheros == + +sudo apt install davfs2 + +sudo mount -t davfs -o uid= +Si en algún momento queremos reconfigurar el paquete podemos ejecutar dpkg-reconfigure davfs2 + +Finalmente para mi usuario: + +# añadimos el usuario al grupo davfs2 +sudo gpasswd -a davfs2 +Añadimos al fichero /etc/fstab la linea del servidor webdav: + + davfs rw,user,uid=salvari,noauto 0 0 +Añadimos las credenciales al fichero ~/.davfs2/secrets que sería una linea con <mount point> <webdav-user> <webdav-passwd> + +Con eso ya podremos montar el webdav con nuestro usuario sin mas que ejecutar mount <mount point> + + +== Solucionar el problema de “paquetes mantenidos” (''The following packages have been kept back'') == + +Cuando hacemos sudo apt upgrade si alguno de los paquetes que se va a actualizar tiene '''nuevas dependencias''' no se actualizará y nos dará el error del título. La solución pasa por ejecutar: + +sudo apt install --only-upgrade <paquete> + + +== Formatear memoria usb == + +“The driver descriptor says the physical block size is 2048 bytes, but Linux says it is 512 bytes.” + +Este comando borró todas las particiones de la memoria: + +sudo dd if=/dev/zero of=/dev/sdd bs=2048 count=32 && sync + +I’m assuming your using gparted. + +First delete whatever partitions you can…just keep pressing ignore. + +There will be one with a black outline…you will have to unmount it…just right click on it and unmount. + +Again you will have to click your way through ignore..if fix is an option choose it also. + +Once all this is done… you can select the device menu and choose new partition table. + +Select MSdos + +Apply and choose ignore again. + +Once it’s done it show it’s real size. + +Next you can format the drive to whichever file system you like. + +It’s a pain in the behind this way, but it’s the only way I get it done..I put live iso’s on sticks all the time and have to remove them. I get stuck going through this process every time. + + +== Copiar la clave pública ssh en un servidor remoto == + +cat /home/tim/.ssh/id_rsa.pub | ssh tim@just.some.other.server 'cat >> .ssh/authorized_keys' + +O también: + +ssh-copy-id -i ~/.ssh/id_rsa.pub username@remote.server + + +== ssh access from termux == + +https://linuxconfig.org/ssh-into-linux-your-computer-from-android-with-termux + + +== SDR instalaciones varias == + +Vamos a trastear con un dispositivo [https://www.rtl-sdr.com/ RTL-SDR.com]. + +Tenemos un montón de información en el blog de [https://sdrgal.wordpress.com/ SDR Galicia] y tienen incluso una guia de instalación muy completa, pero yo voy a seguir una guía un poco menos ambiciosa, por lo menos hasta que pueda hacer el curso que imparten ellos mismos (SDR Galicia) + +La guía en cuestión la podemos encontrar [https://ranous.wordpress.com/rtl-sdr4linux/ aquí] + +Seguimos los pasos de instalación: + +* La instalación de git, cmake y build-essential ya la tengo hecha. + +
sudo apt-get install libusb-1.0-0-dev
+ +== Posible problema con modemmanager y micros programables == + +Programando el ''Circuit Playground Express'' con el ''Arduino IDE'' tenía problemas continuos para hacer los ''uploads'', al parecer el servicio ''ModemManager'' es el culpable, se pasa todo el tiempo capturando los nuevos puertos serie por que considera que todo es un modem. + +Una prueba rápida para comprobarlo: sudo systemctl stop ModemManager + +Con esto funciona todo bien, pero en el siguiente arranque volvera a cargarse. + +Para dar una solución definitiva se puede programar una regla para impedir que el ''ModemManager'' capture el puerto con un dispositivo + +Creamos un fichero con permisos de root en el directorio /etc/udev/rules.d que llamaremos: 99-arduino.rules + +Dentro de ese fichero especificamos los codigos VID/PID que se deben ignorar: + +
# for arduino brand, stop ModemManager grabbing port
+ATTRS{idVendor}=="2a03", ENV{ID_MM_DEVICE_IGNORE}="1"
+# for sparkfun brand, stop ModemManager grabbing port
+ATTRS{idVendor}=="1b4f", ENV{ID_MM_DEVICE_IGNORE}="1"
+Ojo que si tienes SystemV no va a funcionar. + +https://starter-kit.nettigo.eu/2015/serial-port-busy-for-avrdude-on-ubuntu-with-arduino-leonardo-eth/ + +https://www.codeproject.com/Tips/349002/Select-a-USB-Serial-Device-via-its-VID-PID + + +== Programar los nanos con chip ch340 o ch341 == + +Linux mapea el chip correctamente en un puerto /dev/ttyUSB0 y con eso basta, que no te lien con el cuento de “drivers para linux” + +Todo lo que hace falta es configurar correctamente el ''Arduino IDE'', hay que escoger: + +
Board: "Arduino Nano"
+Processor: "ATmega168"
+Port: "/dev/ttyUSB0"
+Y ya funciona todo. + + +== Linux Mint 20 es ''python agnostic'' == + +En principio no podemos invocar a python por que no se ha escogido una versión por defecto. + +Tenemos dos opciones: + +apt install python-is-python2 +apt install python-is-python3 + +== Instalar chromium sin snapdrop == + +Este rodeo ya no es necesario en las versiones modernas de Linux Mint + +sudo apt install keepassxc gnucash deluge rsync grsync rar unrar \ +zip unzip unace bzip2 lzop p7zip p7zip-full p7zip-rar \ +most mc tree neofetch fasd silversearcher-ag ack mate-tweak filezilla \ +rofi + +== Especificar como debe abrir los enlaces “magnet” el navegador mozilla == + +* Vamos al url about:config +* Añadimos la opción network.protocol-handler.external.magnet con valor True +* En ''Settings'' buscamos ''Applications'' y nos aseguramos de que no tenga marcado por defecto ''Save'' sino ''Ask'' +* La próxima vez que queramos descargar un enlace magnet nos preguntará que aplicación queremos usar. diff --git a/out/LinuxMintXia.odt b/out/LinuxMintXia.odt new file mode 100644 index 0000000000000000000000000000000000000000..4be570041135977ecea40d992bb65b2952d99068 GIT binary patch literal 85236 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Μwe?-Ybut zm6``j2q4zbXS2l{Q94oUO|;U93Xes7EtESg#YREEyRWt}W5hpXKu(;GQDM zx;hKMTjw&mw%+-xwJt4_4v3f zU#}qJ+%y>oGZ6{r6r%#yQ7>@^#urQTPw`p2&c@;AwZMXdHyyR z-GhJY+S#xfB-a_=QhqiOn&B{xY34Y=25oh{8aw8GJaXP^2UORV?Zngvh^&5VYJ9FZ zmf>a!?}M(7B_RM>;+`4k?Cl?*KNt;UR)BlV<;R0DJMVQ*_bWy;#XxgEhP_ zHhv#@oer)|@+{Aql8%k*;c1iZ)kN`QESI*Q0a0nLAMfYGu*))QC>yx2lMHa36^mQ@ z5H`%k2gwGqNuMPqI1955{=iSl8=pD#4Jkj5JvRNd`Q?#Po zu)$@rt@*cogs}ThRR8 z-)L-jiJtCKhpOYc{0g^|#3ftuH|qCwJKtvgYXw;VvwUcfh9a?bI~0-4g@sU-=Cti2 zgZC-0UOz>X3ASTcErEpOd^FwE?mAl7c$Kf~8I@f|^BBhn`hmvN4OGCX2k`Fd#o zwX=RAQu`wdp5n;ynDDQNc20?B^Re(xSvsgrDL%0ALnaoYz0T&-URj*Tbf+NGgteXm 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 z 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 O!fC(}WDjp3!2kfy>*=ll literal 0 HcmV?d00001 diff --git a/out/LinuxMintXia.pdf b/out/LinuxMintXia.pdf new file mode 100644 index 0000000000000000000000000000000000000000..77d948ff8901a4e58cad3e39693dc7028d0efab5 GIT binary patch literal 257386 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%0D_;wY! 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ΞI9{-ON;Cf?C&RIC!$eGW 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 z zJ}$Ug*~DAs9u`FmY>zu6z}nJm~#E z)oS;p<^#cnu!unL+;9}gk%l-4sle@}8;JoBmC8>735icyf`kHh8LNG~4P1z|+S_QF z;TYFeu|C42+Mk41LX0#tNX&uYy7`%%=eF-zL$;R)@*7D;8qVr&9aHVAB8-X{*ZS>y zjlcVNOJMRE-f>}L!W-XRC(_o8oZEgADg>zyqIEI8<09sKZ+7RF^=Xg2KQ*_6E<@*4U(7sfdG=H)qw;-&?-WzAN?l1;6_f~*#=ZU>Q7RGn&`HH)sJ?QT%ab# z5s0g(;)9(Uhv@jJ`q540QAbPY7()(m#2%~9Ie2@MW;3tnJX0beuiEDu%M@Pf8g1lq z*!Ct+thD;kJ71ZTkwnRlxcmIzJq{ToiDfeq@GftcK6sm=WR8rnL&xP^_c>XoE!;>I z=1NGlPpKRRPmu;B)QnQ2HxS3 zBhq)DJF1nlbe~U45ZA$t3?OV3!Hp<|Q+@}volINdMrhDIBddJ`2$&F4tJWgm461#Y z2%yt284WtHzN>eg*Uex(YF7I^>GXbs9+^AWb8zcAzmh{A!C^FbS7dk>w0*Ecp30)t zUToNP4gx4iFoHBF90zTK)R9DKwHw}La3j0|{3wk;XlqIOSKfVK_$#2P@=b&Hn+CJV zH=&bot@dynTR-MET>lzPwWG=Hg(Xtk%-O>%%d`C)+pYHv)+ zgW81_Tp;J;CiOt=Mhj39Dzr|5X|)T{>p(FYsCoT>0<{@+U>FT*`z)Y)Uxra59;`MI+s3{LKdW0q;>d4+cOL0z^o%ETQh8Qd zLOG8D!P`Y9F6iCo3B@C5sc9XPAK*r$6syFw^lPNJK{*An99k`4D(MbtTCIdt3*bqu zwnzc*;%C<;rGTCpajkf<-RJ9{%+XTK<0laf?K9RrUTHvHdA%;jGFO?Sn+?}wQzO;I=Of_nVKQ6ak2w=I1#9*B$Ol({ug*T7A^n) literal 0 HcmV?d00001 diff --git a/out/LinuxMintXia.tex b/out/LinuxMintXia.tex new file mode 100644 index 0000000..097e423 --- /dev/null +++ b/out/LinuxMintXia.tex @@ -0,0 +1,4340 @@ +% Options for packages loaded elsewhere +\PassOptionsToPackage{unicode}{hyperref} +\PassOptionsToPackage{hyphens}{url} +\PassOptionsToPackage{dvipsnames,svgnames,x11names}{xcolor} +\documentclass[ + 12pt, +]{article} +\usepackage{xcolor} +\usepackage[a4paper]{geometry} +\usepackage{amsmath,amssymb} +\setcounter{secnumdepth}{5} +\usepackage{iftex} +\ifPDFTeX + \usepackage[T1]{fontenc} + \usepackage[utf8]{inputenc} + \usepackage{textcomp} % provide euro and other symbols +\else % if luatex or xetex + \usepackage{unicode-math} % this also loads fontspec + \defaultfontfeatures{Scale=MatchLowercase} + \defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1} +\fi +\usepackage{lmodern} +\ifPDFTeX\else + % xetex/luatex font selection + \setmainfont[]{Ubuntu} + \setmonofont[]{Ubuntu Mono} +\fi +% Use upquote if available, for straight quotes in verbatim environments +\IfFileExists{upquote.sty}{\usepackage{upquote}}{} +\IfFileExists{microtype.sty}{% use microtype if available + \usepackage[]{microtype} + \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts +}{} +\makeatletter +\@ifundefined{KOMAClassName}{% if non-KOMA class + \IfFileExists{parskip.sty}{% + \usepackage{parskip} + }{% else + \setlength{\parindent}{0pt} + \setlength{\parskip}{6pt plus 2pt minus 1pt}} +}{% if KOMA class + \KOMAoptions{parskip=half}} +\makeatother +\usepackage{color} +\usepackage{fancyvrb} +\newcommand{\VerbBar}{|} +\newcommand{\VERB}{\Verb[commandchars=\\\{\}]} +\DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}} +% Add ',fontsize=\small' for more characters per line +\newenvironment{Shaded}{}{} +\newcommand{\AlertTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{#1}}} +\newcommand{\AnnotationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}} +\newcommand{\AttributeTok}[1]{\textcolor[rgb]{0.49,0.56,0.16}{#1}} +\newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}} +\newcommand{\BuiltInTok}[1]{\textcolor[rgb]{0.00,0.50,0.00}{#1}} +\newcommand{\CharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}} +\newcommand{\CommentTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textit{#1}}} +\newcommand{\CommentVarTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}} +\newcommand{\ConstantTok}[1]{\textcolor[rgb]{0.53,0.00,0.00}{#1}} +\newcommand{\ControlFlowTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{#1}}} +\newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.56,0.13,0.00}{#1}} +\newcommand{\DecValTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}} +\newcommand{\DocumentationTok}[1]{\textcolor[rgb]{0.73,0.13,0.13}{\textit{#1}}} +\newcommand{\ErrorTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{#1}}} +\newcommand{\ExtensionTok}[1]{#1} +\newcommand{\FloatTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}} +\newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.02,0.16,0.49}{#1}} +\newcommand{\ImportTok}[1]{\textcolor[rgb]{0.00,0.50,0.00}{\textbf{#1}}} +\newcommand{\InformationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}} +\newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{#1}}} +\newcommand{\NormalTok}[1]{#1} +\newcommand{\OperatorTok}[1]{\textcolor[rgb]{0.40,0.40,0.40}{#1}} +\newcommand{\OtherTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{#1}} +\newcommand{\PreprocessorTok}[1]{\textcolor[rgb]{0.74,0.48,0.00}{#1}} +\newcommand{\RegionMarkerTok}[1]{#1} +\newcommand{\SpecialCharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}} +\newcommand{\SpecialStringTok}[1]{\textcolor[rgb]{0.73,0.40,0.53}{#1}} +\newcommand{\StringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}} +\newcommand{\VariableTok}[1]{\textcolor[rgb]{0.10,0.09,0.49}{#1}} +\newcommand{\VerbatimStringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}} +\newcommand{\WarningTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}} +\usepackage{longtable,booktabs,array} +\usepackage{calc} % for calculating minipage widths +% Correct order of tables after \paragraph or \subparagraph +\usepackage{etoolbox} +\makeatletter +\patchcmd\longtable{\par}{\if@noskipsec\mbox{}\fi\par}{}{} +\makeatother +% Allow footnotes in longtable head/foot +\IfFileExists{footnotehyper.sty}{\usepackage{footnotehyper}}{\usepackage{footnote}} +\makesavenoteenv{longtable} +\usepackage{graphicx} +\makeatletter +\newsavebox\pandoc@box +\newcommand*\pandocbounded[1]{% scales image to fit in text height/width + \sbox\pandoc@box{#1}% + \Gscale@div\@tempa{\textheight}{\dimexpr\ht\pandoc@box+\dp\pandoc@box\relax}% + \Gscale@div\@tempb{\linewidth}{\wd\pandoc@box}% + \ifdim\@tempb\p@<\@tempa\p@\let\@tempa\@tempb\fi% select the smaller of both + \ifdim\@tempa\p@<\p@\scalebox{\@tempa}{\usebox\pandoc@box}% + \else\usebox{\pandoc@box}% + \fi% +} +% Set default figure placement to htbp +\def\fps@figure{htbp} +\makeatother +\ifLuaTeX +\usepackage[bidi=basic]{babel} +\else +\usepackage[bidi=default]{babel} +\fi +\babelprovide[main,import]{spanish} +\ifPDFTeX +\else +\babelfont{rm}[]{Ubuntu} +\fi +% get rid of language-specific shorthands (see #6817): +\let\LanguageShortHands\languageshorthands +\def\languageshorthands#1{} +\setlength{\emergencystretch}{3em} % prevent overfull lines +\providecommand{\tightlist}{% + \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} +\usepackage{bookmark} +\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available +\urlstyle{same} +\hypersetup{ + pdftitle={Bitácora Linux Mint 22.1 Xia}, + pdfauthor={Sergio Alvariño salvari@protonmail.com}, + pdflang={es-ES}, + pdfsubject={Linux Mint 22.1 - Xia}, + pdfkeywords={linux, postinstalación, mint, xia}, + colorlinks=true, + linkcolor={Maroon}, + filecolor={Maroon}, + citecolor={Blue}, + urlcolor={Blue}, + pdfcreator={LaTeX via pandoc}} + +\title{Bitácora Linux Mint 22.1 Xia} +\author{Sergio Alvariño +\href{mailto:salvari@protonmail.com}{\nolinkurl{salvari@protonmail.com}}} +\date{enero-2025} + +\begin{document} +\maketitle +\begin{abstract} +Bitácora de mi portatil Instalación de Linux Mint Xia Solo para +referencia rápida y personal. +\end{abstract} + +{ +\hypersetup{linkcolor=} +\setcounter{tocdepth}{3} +\tableofcontents +} +\section{Introducción}\label{introducciuxf3n} + +Mis portatiles son: + +\begin{itemize} +\item + Un ordenador Acer 5755G con las siguientes características: + + \begin{itemize} + \item + Core i5 2430M 2.4GHz + \item + NVIDIA Geforce GT 540M (+ intel integrada) + \item + 8Gb RAM + \item + 750Gb HD + \end{itemize} + + Este portátil equipa una tarjeta \emph{Nvidia Geforce GT540M} que + resulta pertenecer a una rama muerta en el árbol de desarrollo de + Nvidia. + + Esta tarjeta provocaba todo tipo de problemas de sobrecalientamiento, + pero en las últimas versiones de Linux instalando el driver de Nvidia + parece funcionar correctamente. +\item + Un Lenovo Legion + + \begin{itemize} + \item + Core i7-9750H + \item + Nvidia GTX1650-4Gb (+ intel integrada) + \item + 16Gb RAM + \item + 512Gb SSD + 1Tb HDD + \end{itemize} +\end{itemize} + +\section{Instalación de Linux Mint}\label{instalaciuxf3n-de-linux-mint} + +Lanzamos el programa de instalación desde una memoria USB con la ISO de +la versión Mate. + +Al arrancar el USB podemos conectarnos a internet (en mi caso, me +conecto a la wifi) + +Mis opciones de instalación: + +\begin{itemize} +\tightlist +\item + Escojo el idioma \emph{Inglés} (manias mias, suelo dejar mi Linux en + inglés) +\item + Teclado: \emph{Español} +\item + Marco la opción de instalar codecs +\end{itemize} + +Generalmente hago particiones: + +\begin{itemize} +\tightlist +\item + 540 Mb para EFI +\item + 90 Gb para \emph{root}, es decir \texttt{/} +\item + El resto del disco SSD para \texttt{/home} +\item + El disco HDD lo monto en una sola partición en \texttt{/store} +\end{itemize} + +\section{Programas básicos}\label{programas-buxe1sicos} + +Lo primero de todo es hacer una actualización completa del sistema: + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ apt update} +\FunctionTok{sudo}\NormalTok{ apt upgrade} +\end{Highlighting} +\end{Shaded} + +\subsection{Linux Mint}\label{linux-mint} + +Linux Mint incluye \texttt{sudo} y las aplicaciones que uso +habitualmente para gestión de paquetes por defecto (\emph{aptitude} y +\emph{synaptic}). + +Instalo (por costumbre) el paquete \emph{ppa-purge} +(\texttt{sudo\ apt\ install\ ppa-purge}). Sirve para eliminar ppas junto +con los programas instalados desde ese ppa. + +Cambiamos los origenes del software con la utilidad de Linux Mint que +nos mide la velocidad de cada posible origen para tener información para +elegir. + +\subsection{Firmware}\label{firmware} + +Ya no es necesario intalar los paquetes de \emph{microcode} la +instalación de Linux Mint se encargó de instalar: + +\begin{itemize} +\tightlist +\item + \texttt{amd64-microcode} +\item + \texttt{intel-microcode} +\end{itemize} + +Instalamos el driver de Nvidia recomendado, después de la instalación +inicial el \emph{Mint} nos avisará de que tenemos que revisar la +instalación de los drivers. + +El driver de Nvidia viene muy mejorado. Merece la pena ver todas las +opciones del menú del driver. + +Una vez instalado el driver de Nvidia, el comando +\texttt{prime-select\ query}debe indicarnos la tarjeta activa y podremos +cambiar de tarjeta ejecutando +\texttt{prime-select\ {[}nvidia\textbar{}intel{]}}. También podremos +acceder a las funciones de Nvidia a través del applet en la barra de +estado de nuestro escritorio. + +\subsection{Control de configuraciones con +git}\label{control-de-configuraciones-con-git} + +Una vez instalado el driver de Nvidia y antes de seguir con la +instalación instalamos el \texttt{git} y el \texttt{etckeeper} para que +todos los cambios que se produzcan en el directorio \texttt{/etc} +durante nuestra instalación queden reflejados en el git. + +Yo nunca almaceno esta información en la nube (por seguridad), pero me +permite tener controlados los cambios de configuración y ayuda en caso +de problemas. + +\subsubsection{\texorpdfstring{Instalación de +\texttt{etckeeper}}{Instalación de etckeeper}}\label{instalaciuxf3n-de-etckeeper} + +¡Ojo!, nos hacemos \texttt{root} para ejecutar: + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ su }\AttributeTok{{-}} +\FunctionTok{git}\NormalTok{ config }\AttributeTok{{-}{-}global}\NormalTok{ init.defaultBranch main} +\FunctionTok{git}\NormalTok{ config }\AttributeTok{{-}{-}global}\NormalTok{ user.email xxxxx@whatever.com} +\FunctionTok{git}\NormalTok{ config }\AttributeTok{{-}{-}global}\NormalTok{ user.name }\StringTok{"Name Surname"} +\ExtensionTok{apt}\NormalTok{ install etckeeper} +\end{Highlighting} +\end{Shaded} + +\emph{etckeeper} hará un control automático de tus ficheros de +configuración en \texttt{/etc} + +Para echar una mirada a los \emph{commits} creados puedes ejecutar: + +\begin{Shaded} +\begin{Highlighting}[] +\BuiltInTok{cd}\NormalTok{ /etc} +\FunctionTok{sudo}\NormalTok{ git log} +\end{Highlighting} +\end{Shaded} + +\subsubsection{Controlar dotfiles con +git}\label{controlar-dotfiles-con-git} + +Vamos a crear un repo de git para controlar nuestros ficheros personales +de configuración. + +Creamos el repo donde queramos, yo suelo usar el directorio +\texttt{\textasciitilde{}/work/repos}. + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{mkdir}\NormalTok{ usrcfg} +\BuiltInTok{cd}\NormalTok{ usrcfg} +\FunctionTok{git}\NormalTok{ init} +\FunctionTok{git}\NormalTok{ config core.worktree }\StringTok{"/home/salvari"} +\end{Highlighting} +\end{Shaded} + +Y ya lo tenemos, un repo de git, en la localización que queramos y que +tiene el directorio de trabajo apuntando a nuestro \emph{\$HOME}. + +Podemos añadir los ficheros de configuración que queramos al repo: + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{git}\NormalTok{ add .bashrc} +\FunctionTok{git}\NormalTok{ commit }\AttributeTok{{-}m} \StringTok{"Add some dotfiles"} +\end{Highlighting} +\end{Shaded} + +Una vez que tenga añadidos los ficheros que quiero tener controlados +pondré \texttt{*} en el fichero \texttt{.git/info/exclude} de mi repo +para que ignore todos los ficheros de mi \texttt{\$HOME}. + +Cuando instalo algún programa nuevo añado a mano los ficheros de +configuración que quiero tener controlados al repo. + +Yo no tengo información confidencial en este repositorio (claves ssh por +ejemplo) así que no tengo problemas en almacenarlo en la nube. Facilita +mucho las cosas en casos de upgrade del sistema o copiar configuraciones +entre ordenadores. + +\subsection{Editor desde linea de +comandos}\label{editor-desde-linea-de-comandos} + +Hasta que instalemos nuestro editor favorito (\emph{Emacs} en mi caso) +podemos usar \emph{nano} desde la linea de comandos para editar +cualquier fichero. + +\subsection{Parámetros de disco duro}\label{paruxe1metros-de-disco-duro} + +Tengo un disco duro ssd y otro hdd normal. + +El area de intercambio la hemos creado en el disco duro hdd, no se usará +mucho (mejor dicho: no se usará nunca) pero evitamos multiples +operaciones de escritura en el disco ssd en caso de que se empiece a +tirar del swap. + +Añadimos el parámetro \texttt{noatime} para las particiones de +\texttt{root} y \texttt{/home}, que si que se han creado en el ssd. + +\begin{Shaded} +\begin{Highlighting}[] +\NormalTok{\# /etc/fstab: static file system information.} +\NormalTok{\#} +\NormalTok{\# Use \textquotesingle{}blkid\textquotesingle{} to print the universally unique identifier for a} +\NormalTok{\# device; this may be used with UUID= as a more robust way to name devices} +\NormalTok{\# that works even if disks are added and removed. See fstab(5).} +\NormalTok{\#} +\NormalTok{\# \textless{}file system\textgreater{} \textless{}mount point\textgreater{} \textless{}type\textgreater{} \textless{}options\textgreater{} \textless{}dump\textgreater{} \textless{}pass\textgreater{}} +\NormalTok{\# / was on /dev/sda5 during installation} +\NormalTok{UUID=d96a5501{-}75b9{-}4a25{-}8ecb{-}c84cd4a3fff5 / ext4 noatime,errors=remount{-}ro 0 1} +\NormalTok{\# /home was on /dev/sda7 during installation} +\NormalTok{UUID=8fcde9c5{-}d694{-}4417{-}adc0{-}8dc229299f4c /home ext4 defaults,noatime 0 2} +\NormalTok{\# /store was on /dev/sdc7 during installation} +\NormalTok{UUID=0f0892e0{-}9183{-}48bd{-}aab4{-}9014dc1bd03a /store ext4 defaults 0 2} +\NormalTok{\# swap was on /dev/sda6 during installation} +\NormalTok{UUID=ce11ccb0{-}a67d{-}4e8b{-}9456{-}f49a52974160 none swap sw 0 0} +\NormalTok{\# swap was on /dev/sdc5 during installation} +\NormalTok{UUID=11090d84{-}ce98{-}40e2{-}b7be{-}dce3f841d7b4 none swap sw 0 0} +\end{Highlighting} +\end{Shaded} + +Una vez modificado el \texttt{/etc/fstab} no hace falta arrancar, basta +con ejecutar lo siguiente: + +\begin{Shaded} +\begin{Highlighting}[] +\ExtensionTok{systemctl}\NormalTok{ daemon{-}reload} + +\FunctionTok{mount} \AttributeTok{{-}o}\NormalTok{ remount /} +\FunctionTok{mount} \AttributeTok{{-}o}\NormalTok{ remount /home} +\FunctionTok{mount} +\end{Highlighting} +\end{Shaded} + +\subsubsection{\texorpdfstring{Ajustes adicionales para +\emph{Firefox}}{Ajustes adicionales para Firefox}}\label{ajustes-adicionales-para-firefox} + +Las diferencias de rendimiento del Firefox con estos ajustes son +bastante notables. + +Seguimos +\href{https://easylinuxtipsproject.blogspot.com/p/ssd.html\#ID10}{esta +referencia} + +Visitamos \texttt{about:config} con el navegador. + +Cambiamos + +\begin{itemize} +\tightlist +\item + \texttt{browser.cache.disk.enable} \textbf{false} +\item + \texttt{browser.cache.memory.enable} \textbf{true} +\item + \texttt{browser.cache.memory.capacity} \textbf{204800} +\item + \texttt{browser.sessionstore.interval} \textbf{15000000} +\end{itemize} + +TODO: Comprobar \emph{trim} en mi disco duro. Y mirar +\href{https://easylinuxtipsproject.blogspot.com/p/speed-mint.html}{esto} + +Y siguiendo +\href{https://linuxreviews.org/HOWTO_Make_Mozilla_Firefox_Blazing_Fast_On_Linux}{esta +otra referencia} cambiamos: + +\begin{itemize} +\tightlist +\item + \texttt{gfx.x11-egl.force-enabled} \textbf{true} +\item + \textbf{IMPORTANTE} Ajustar el parámetro + \texttt{network.IDN\_show\_punycode} a \textbf{true} (para evitar + ataques de URL falsas con caracteres Unicode) +\end{itemize} + +Reiniciamos nuestro \emph{Firefox} (podemos visitar +\texttt{about:restartRequired}) + +\subsection{Fuentes (tipográficas) +adicionales}\label{fuentes-tipogruxe1ficas-adicionales} + +Instalamos algunas fuentes desde los orígenes de software: + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ apt install ttf{-}mscorefonts{-}installer} +\FunctionTok{sudo}\NormalTok{ apt install fonts{-}noto} +\end{Highlighting} +\end{Shaded} + +Y la fuente +\href{https://robey.lag.net/2010/06/21/mensch-font.html}{Mensch} la +bajamos directamente al directorio +\texttt{\textasciitilde{}/.local/share/fonts} + +Para visualizar las fuentes podemos usar el programa \emph{MATE Font +Viewer} + +Instaladas varias de las +\href{https://github.com/ryanoasis/nerd-fonts}{nerd-fonts} en +\texttt{\textasciitilde{}/.local/share/fonts}. Simplemente descargamos +las fuentes interesantes y ejecutamos \texttt{sudo\ fc-cache\ -f\ -v} + +Fuentes interesantes: + +\begin{itemize} +\tightlist +\item + \href{https://github.com/ryanoasis/nerd-fonts}{nerd-fonts} +\item + \href{https://github.com/powerline/fonts}{Powerline fonts} +\item + \href{https://github.com/ProgrammingFonts/ProgrammingFonts}{Programming + fonts} +\end{itemize} + +\subsection{Firewall}\label{firewall} + +\texttt{ufw} y \texttt{gufw} vienen instalados por defecto, pero no +activados. + +\begin{Shaded} +\begin{Highlighting}[] +\ExtensionTok{ufw}\NormalTok{ default deny} +\ExtensionTok{ufw}\NormalTok{ enable} +\ExtensionTok{ufw}\NormalTok{ status verbose} +\end{Highlighting} +\end{Shaded} + +\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center} + +\begin{quote} +\textbf{Nota}: Ojo con el log de \texttt{ufw}, tampoco le sienta muy +bien al ssd esa escritura masiva. Yo normalmente lo dejo desactivado +desde el \emph{gufw} excepto cuando valido una nueva configuración. +\end{quote} + +\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center} + +\subsection{Aplicaciones variadas}\label{aplicaciones-variadas} + +\begin{description} +\item[KeepassXC] +Para mantener nuestras contraseñas a buen recaudo +\item[Gnucash] +Programa de contabilidad, la versión de los repos está bastante atrasada +habrá que probar la nueva que puede instalarse desde la web o desde el +flathub. +\item[Deluge] +Programa de descarga de torrents (acuérdate de configurar tus +cortafuegos) +\item[rsync, grsync] +Para hacer backups de nuestros ficheros +\item[Descompresores variados] +Para lidiar con los distintos formatos de ficheros comprimidos +\item[mc] +Midnight Comander, gestor de ficheros en modo texto +\item[most] +Un \texttt{less} mejorado +\item[tree] +Para ver estructuras de directorios +\item[neofetch] +Este solo vale para presumir de ordenador creo ¬\_¬ +\item[fasd] +Para cambiar entre directorios rápidamente +\item[silversearcher-ag] +Una alternativa mejorada al clásico \emph{grep} +\item[ack] +Otro grep mejorado +\item[ncdu] +Un analizador de uso de disco alternativa a \texttt{du} +\item[mate-tweak] +Para \emph{customizar} nuestro escritorio Mate +\item[filezilla] +Un interfaz gráfico para transferencia de ficheros +\item[rofi] +Un conmutador de ventanas capaz de automatizar muchas tareas +\item[Chromium] +Como Chrome pero libre, en Linux Mint no hay snaps, puedes instalarlo +directamente con \texttt{apt} +\end{description} + +Para instalar todos los programas ejecutamos: + +\begin{verbatim} +sudo apt install keepassxc gnucash deluge rsync grsync rar unrar \ +zip unzip unace bzip2 lzop p7zip p7zip-full p7zip-rar \ +most mc tree neofetch fasd silversearcher-ag ack ncdu mate-tweak filezilla \ +rofi chromium +\end{verbatim} + +\subsection{Algunos programas de control del +sistema}\label{algunos-programas-de-control-del-sistema} + +Son útiles para control de consumo. + +\begin{verbatim} +sudo apt install tlp tlp-rdw htop powertop +\end{verbatim} + +\textbf{btop} también está muy bien, así que descargamos los binarios +desde \href{https://github.com/aristocratos/btop}{su página web} dentro +del binario tenemos el ejecutable y un fichero \texttt{.desktop}. En mi +caso hago una cutre-instalación con el ejecutable en +\texttt{\textasciitilde{}/apps/system/btop/bin/btop} y el fichero +\texttt{.desktop} copiado en mi +\texttt{\textasciitilde{}/.local/share/applications} (ver la sección +\hyperref[varias-aplicaciones-instaladas-de-binarios]{Varias +aplicaciones instaladas de binarios}). En +\texttt{\textasciitilde{}/.local/bin} dejo un enlace simbólico al +binario. + +\subsection{Programas de terminal}\label{programas-de-terminal} + +Instalo dos programas de terminal: + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ apt install guake terminator} +\end{Highlighting} +\end{Shaded} + +\emph{terminator} lo dejamos como aplicación terminal preferida del +sistema. + +\textbf{TODO:} asociar \emph{Guake} a una combinación apropiada de +teclas. + +También instalo \emph{rxvt} teoricamente más ligero y que puedes +complementar con \emph{tmux}. + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ apt install rxvt{-}unicode} +\end{Highlighting} +\end{Shaded} + +\subsubsection{tmux}\label{tmux} + +\emph{tmux} combinado por ejemplo con \emph{rxvt} nos da la misma +funcionalidad que \emph{Terminator}, además merece la pena aprender a +usarlo por que instalado en servidores remotos es increíblemente útil. + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ apt install tmux} +\end{Highlighting} +\end{Shaded} + +\begin{itemize} +\tightlist +\item + \href{https://leanpub.com/the-tao-of-tmux/read}{El tao de tmux} +\item + \href{https://www.askapache.com/linux/rxvt-xresources/}{rxvt + customizations} +\end{itemize} + +\subsection{Dropbox}\label{dropbox} + +Lo instalamos desde el software manager. Previamente debemos instalar el +paquete \texttt{python3-gpg} y desde el software manager instalamos +también el paquete \texttt{Caja-dropbox}, para tener las integraciones +de Dropbox en el gestor de ficheros. + +\subsection{pCloud}\label{pcloud} + +Instalado desde su página web. + +\subsection{Chrome}\label{chrome} + +No lo he instalado. + +Puede instalarse desde \href{https://www.google.com/chrome/}{la página +web de Chrome} + +\subsection{Thorium}\label{thorium} + +Bajamos los binarios desde \href{https://thorium.rocks/}{su página web}. +Descomprimimos en \texttt{\textasciitilde{}/apps} y ajustamos los +ficheros \texttt{.desktop} para que apunten a los binarios. (ver la +siguiente sección +\hyperref[varias-aplicaciones-instaladas-de-binarios]{Varias +aplicaciones instaladas de binarios}) + +\subsection{Varias aplicaciones instaladas de +binarios}\label{varias-aplicaciones-instaladas-de-binarios} + +Lo recomendable en un sistema POSIX es instalar los programas +adicionales en \texttt{/usr/local} o en \texttt{/opt}. Yo soy más +chapuzas y suelo instalar en \texttt{\textasciitilde{}/apps} por que el +portátil es personal e intrasferible. En un ordenador compartido es +mejor usar \texttt{/opt}. + +En general cuando instalo en el directorio +\texttt{\textasciitilde{}/apps} sigo los siguientes pasos: + +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\item + Descargamos los binarios o \emph{appimage} desde la web +\item + Descomprimo en un nuevo directorio para la aplicación, tomamos como + ejemplo freeplane, así que el directorio se llamará: + \texttt{\textasciitilde{}/apps/mi\_aplicacion} en nuestro ejemplo + \texttt{\textasciitilde{}/apps/freeplane} +\item + Creamos enlace simbólico al que llamamos \texttt{current}. Esto es + para no editar los ficheros \texttt{.desktop} cada vez que + actualicemos la versión del programa. El enlace puede apuntar a un + directorio o a un binario, depende de como obtengamos la aplicación. + En el caso de freeplane yo tengo la siguiente estructura + +\begin{verbatim} +freeplane +├── current -> freeplane-1.7.11 +├── freeplane-1.7.10 +└── freeplane-1.7.11 +\end{verbatim} + + Vemos que el enlace apunta a la versión más reciente de + \emph{freeplane}. +\item + Añadimos la aplicación a los menús, al hacer esto se creará un fichero + \texttt{.desktop} en el directorio + \texttt{\textasciitilde{}/.local/share/applications} +\end{enumerate} + +\subsubsection{Freeplane}\label{freeplane} + +Para hacer mapas mentales, presentaciones, resúmenes, apuntes\ldots{} La +versión incluida en LinuxMint está un poco anticuada, descargamos el +programa desde \href{https://docs.freeplane.org/}{la página web}. + +\subsubsection{Treesheets}\label{treesheets} + +Está bien para hacer chuletas rápidamente. Descargamos el +\emph{appimage} desde \href{http://strlen.com/treesheets/}{la web} + +\subsubsection{Telegram Desktop}\label{telegram-desktop} + +Cliente de Telegram, descargado desde la +\href{https://desktop.telegram.org/}{página web}. El programa de +instalación de Telegram ya se encarga de crear el fichero +\texttt{.desktop} + +\subsubsection{Tor browser}\label{tor-browser} + +Descargamos desde la \href{https://www.torproject.org/}{página oficial +del proyecto} Descomprimimos en \texttt{\textasciitilde{}/apps/} y +ejecutamos desde terminal: + +\begin{verbatim} +cd ~/apps/tor-browser +./start-tor-browser.desktop --register-app +\end{verbatim} + +Tor se encarga tanto de crear el fichero \texttt{.desktop} como de +mantenerse actualizado a la última versión. + +\subsubsection{Brave browser}\label{brave-browser} + +Instalamos siguiendo las instrucciones de la +\href{https://brave-browser.readthedocs.io/en/latest/installing-brave.html\#linux}{página +web oficial} + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ apt install curl} + +\FunctionTok{sudo}\NormalTok{ curl }\AttributeTok{{-}fsSLo}\NormalTok{ /usr/local/share/keyrings/brave{-}browser{-}archive{-}keyring.gpg https://brave{-}browser{-}apt{-}release.s3.brave.com/brave{-}browser{-}archive{-}keyring.gpg} + +\BuiltInTok{echo} \StringTok{"deb [signed{-}by=/usr/local/share/keyrings/brave{-}browser{-}archive{-}keyring.gpg] https://brave{-}browser{-}apt{-}release.s3.brave.com/ stable main"}\KeywordTok{|}\FunctionTok{sudo}\NormalTok{ tee /etc/apt/sources.list.d/brave{-}browser{-}release.list} + +\FunctionTok{sudo}\NormalTok{ apt update} + +\FunctionTok{sudo}\NormalTok{ apt install brave{-}browser} +\end{Highlighting} +\end{Shaded} + +\subsubsection{TiddlyDesktop}\label{tiddlydesktop} + +Descargamos desde la +\href{https://github.com/Jermolene/TiddlyDesktop}{página web}, +descomprimimos y generamos la entrada en el menú. + +\subsubsection{Joplin}\label{joplin} + +Una herramienta libre para mantener notas sincronizadas entre el móvil y +el portátil. + +Instalamos siguiendo las instrucciones de la +\href{https://joplinapp.org/}{página web} + +\begin{Shaded} +\begin{Highlighting}[] + \FunctionTok{wget} \AttributeTok{{-}O} \AttributeTok{{-}}\NormalTok{ https://raw.githubusercontent.com/laurent22/joplin/master/Joplin\_install\_and\_update.sh }\KeywordTok{|} \FunctionTok{bash} +\end{Highlighting} +\end{Shaded} + +Joplin se instala en el directorio \texttt{\textasciitilde{}/.joplin} y +crea su propia entrada en el menú. + +La primera vez que configuremos la sincronización de Joplin conviene +hacer un borrado local con download desde el remoto. + +\subsection{Terminal y shells}\label{terminal-y-shells} + +Por defecto tenemos instalado \texttt{bash}. + +\subsubsection{bash-git-promt}\label{bash-git-promt} + +Para dejar configurado el \emph{bash-git-prompt} seguimos las +instrucciones de +\href{https://github.com/magicmonty/bash-git-prompt}{este github} + +\subsubsection{zsh}\label{zsh} + +Nos adelantamos a los acontecimientos, pero conviene tener instaladas +las herramientas de entornos virtuales de python antes de instalar +\emph{zsh} con el plugin para \emph{virtualenvwrapper}. + +\begin{verbatim} +apt install python-is-python3 +apt install python3-all-dev +apt install python3-virtualenv python3-virtualenvwrapper +apt install pipx python3-poetry +\end{verbatim} + +Para \emph{zsh} vamos a usar +\href{https://github.com/zsh-users/antigen}{antigen}, así que nos lo +clonamos en \texttt{\textasciitilde{}/apps/} + +\begin{verbatim} +cd ~/apps +git clone https://github.com/zsh-users/antigen +\end{verbatim} + +También vamos a usar +\href{https://github.com/olivierverdier/zsh-git-prompt}{zsh-git-prompt}, +así que lo clonamos también: + +\begin{verbatim} +cd ~/apps +git clone https://github.com/olivierverdier/zsh-git-prompt +\end{verbatim} + +Para el \texttt{zsh-git-prompt} clonamos el fichero \texttt{zshrc.sh} +desde nuestro repo de configuraciones. + +Clonamos el fichero \texttt{\textasciitilde{}/.zshrc} desde nuestro repo +de configuraciones. De momento es mejor comentar la linea del tema : + +\begin{verbatim} +antigen theme gnzh +\end{verbatim} + +Para usar \emph{virtualenvwrapper} hay que decidir en que directorio +queremos salvar los entornos virtuales. El obvio seria +\texttt{\textasciitilde{}/.virtualenvs} la alternativa sería +\texttt{\textasciitilde{}/.local/share/virtualenvs}. + +El que escojamos lo tenemos que crear y añadirlo a nuestro +\texttt{\textasciitilde{}/.profile} con las líneas: + +\begin{verbatim} +# WORKON_HOME for virtualenvwrapper +if [ -d "$HOME/.virtualenvs" ] ; then + WORKON_HOME="$HOME/.virtualenvs" +fi +\end{verbatim} + +Después de seguir estos pasos basta con arrancar el \emph{zsh} + +\emph{Antigen} ya se encarga de descargar todos los plugins que queramos +utilizar en zsh. Todos el software se descarga en +\texttt{\textasciitilde{}/.antigen} + +Para configurar el +\href{https://github.com/olivierverdier/zsh-git-prompt}{zsh-git-prompt}, +que inspiró el bash-git-prompt. + +He modificado el fichero \texttt{zshrc.sh} de \texttt{zsh-git-prompt} +cambiando la linea `echo ``\$STATUS'': + +\begin{verbatim} +#echo "$STATUS" +if [[ "$__CURRENT_GIT_STATUS" == ": 0 0 0 0 0 0" ]]; then + echo "" +else + echo "$STATUS" +fi +\end{verbatim} + +También he cambiado el fichero del tema \emph{gnzh} en +\texttt{\textasciitilde{}/.antigen/bundles/robbyrussell/oh-my-zsh/themes/gnzh.zsh-theme} +por que me interesa ver la versión python asociada a cada virtualenv. + +\emph{zsh} viene por defecto en mi instalación, en caso contrario: + +\begin{verbatim} +apt install zsh +\end{verbatim} + +Cuando estemos contentos con nuestro \texttt{zsh} tendremos que ejecutar +\texttt{chsh\ -s\ /usr/bin/zsh} + +\section{Utilidades}\label{utilidades} + +\subsection{Utilidades variadas}\label{utilidades-variadas} + +\begin{description} +\item[gpick con] +\emph{Agave} y \emph{pdftk} ya no existen, nos pasamos a \emph{gpick} y +\emph{poppler-utils} + +\texttt{sudo\ apt\ install\ gpick} +\item[graphviz] +Una utilidad de generación de gráficos que uso a veces. También es útil +para \texttt{web2py} y para `org-roam + +\texttt{sudo\ apt\ install\ graphviz} +\item[sqlite3] +Un motor de bases de datos sencillo que se uso a menudo + +\texttt{sudo\ apt\ install\ sqlite3} +\item[cheat] +Chuletas de comandos habituales, se instala desde los fuentes ejecutando +\texttt{go\ install\ github.com/cheat/cheat/cmd/cheat@latest} (ver +\href{https://github.com/cheat/cheat/}{su github}) +\item[cheat.sh] +Echa una mirada a su página web: \url{http://cheat.sh/}, es casi +idéntico al anterior pero disponible desde cualquier ordenador con +conexión. +\item[gparted] +Instalamos \emph{gparted} para poder formatear memorias usb + +\texttt{sudo\ apt\ install\ gparted} +\item[wkhtmltopdf] +Para pasar páginas web a pdf + +\texttt{sudo\ apt\ install\ wkhtmltopdf} +\item[lsd] +\texttt{ls} potenciado, instalamos el paquete desde los fuentes con +\texttt{cargo\ install\ lsd} (ver +\href{https://github.com/Peltoche/lsd}{la página del proyecto} +\item[bat] +\texttt{cat} potenciado, instalamos el paquete desde los fuentes con +\texttt{cargo\ install\ bat} \href{https://github.com/sharkdp/bat}{ver +la página del proyecto} +\item[nmap ndiff ncat] +\texttt{nmap} nos permite realizar mapeos de subredes en nuestras redes +locales. Por ejemplo para localizar dispositivos enganchados a nuestra +red. \texttt{ndiff} nos permite comparar escaneos realizados con +\texttt{nmap} y \texttt{ncat} hace todo tipo de cosas (mira en la red) + +\texttt{sudo\ apt\ install\ nmap\ ndiff\ ncat} +\item[rofi] +El super conmutador de ventanas (y muchas más cosas). + +Creamos el fichero \texttt{\textasciitilde{}/.config/rofi/config.rasi} +con el siguiente contenido + +\begin{Shaded} +\begin{Highlighting}[] +\ErrorTok{configuration} \FunctionTok{\{} + \ErrorTok{modi}\FunctionTok{:} \StringTok{"drun,run,ssh,combi"}\ErrorTok{;} + \ErrorTok{font:} \StringTok{"mensch 16"}\ErrorTok{;} + \ErrorTok{combi{-}modi:} \StringTok{"window,drun,ssh"}\ErrorTok{;} +\FunctionTok{\}} +\ErrorTok{@theme} \ErrorTok{"fancy"} +\end{Highlighting} +\end{Shaded} + +Asociamos un atajo de teclado al comando: \texttt{rofi\ -show\ drun} +\end{description} + +\subsection{autokey}\label{autokey} + +Instalamos \href{https://github.com/autokey/autokey}{autokey} siguiendo +\href{https://github.com/autokey/autokey/wiki/Installing\#debian-and-derivatives}{las +instrucciones para instalarlo con paquetes debian} + +Me he descargado la última estable en el Legion y la beta en el Acer. + +Después de descargar los paquetes Debian ejecutamos los siguientes +comandos (para la estable): + +\begin{Shaded} +\begin{Highlighting}[] +\VariableTok{VERSION}\OperatorTok{=}\NormalTok{0.95.10{-}0} +\FunctionTok{sudo}\NormalTok{ dpkg }\AttributeTok{{-}{-}install}\NormalTok{ autokey{-}common\_0.95.10{-}0\_all.deb autokey{-}gtk\_0.95.10{-}0\_all.deb} +\FunctionTok{sudo}\NormalTok{ apt }\AttributeTok{{-}{-}fix{-}broken}\NormalTok{ install} +\end{Highlighting} +\end{Shaded} + +El único paquete que se instala a mayores en el python del sistema sería +\texttt{python3-pyinotify} + +Si estamos usando un entorno virtual con pyenv creo que sería mejor usar +la instalación con \texttt{pip} +(\href{https://github.com/autokey/autokey/wiki/Installing\#pip-installation}{ver +documentación}) + +Para lanzar la aplicación ejecutamos: +\texttt{python3\ -m\ autokey.gtkui} + +\section{Internet}\label{internet} + +\subsection{Rclone}\label{rclone} + +Instalamos desde la página web(https://rclone.org/), descargando el +fichero \texttt{.deb}. + +\subsubsection{Recetas rclone}\label{recetas-rclone} + +Copiar directorio local en la nube: + +\begin{verbatim} +rclone copy /localdir hubic:backup -vv +\end{verbatim} + +Si queremos ver el directorio en la web de Hubic tenemos que copiarlo en +\emph{default}: + +\begin{verbatim} +rclone copy /localdir hubic:default/backup -vv +\end{verbatim} + +Sincronizar una carpeta remota en local: + +\begin{verbatim} +rclone sync hubic:directorio_remoto /home/salvari/directorio_local -vv +\end{verbatim} + +\subsubsection{Referencias}\label{referencias} + +\begin{itemize} +\tightlist +\item + \href{https://elblogdelazaro.gitlab.io//articles/rclone-sincroniza-ficheros-en-la-nube/}{Como + usar rclone (blogdelazaro)} +\item + \href{https://elblogdelazaro.gitlab.io//articles/rclone-cifrado-de-ficheros-en-la-nube/}{y + con cifrado (blogdelazaro)} +\item + \href{https://rclone.org/docs/}{Documentación} +\end{itemize} + +\subsection{Syncthing}\label{syncthing} + +Seguimos las instrucciones en \href{https://apt.syncthing.net/}{su +página web}: + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ curl }\AttributeTok{{-}L} \AttributeTok{{-}o}\NormalTok{ /etc/apt/keyrings/syncthing{-}archive{-}keyring.gpg https://syncthing.net/release{-}key.gpg} +\CommentTok{\# Add the "stable" channel to your APT sources:} +\BuiltInTok{echo} \StringTok{"deb [signed{-}by=/etc/apt/keyrings/syncthing{-}archive{-}keyring.gpg] https://apt.syncthing.net/ syncthing stable"} \KeywordTok{|} \FunctionTok{sudo}\NormalTok{ tee /etc/apt/sources.list.d/syncthing.list} +\FunctionTok{sudo}\NormalTok{ apt update} +\FunctionTok{sudo}\NormalTok{ apt install syncthing} +\end{Highlighting} +\end{Shaded} + +\subsection{Nyxt}\label{nyxt} + +Instalado desde el Software Manager (via flathub) + +\subsection{Qutebrowser}\label{qutebrowser} + +Instalamos desde los repos con \texttt{sudo\ apt\ install\ qutebrowser}. + +\subsection{Palemoon}\label{palemoon} + +Un fork de \emph{Firefox} con menos chorradas. Instalado con el paquete +\texttt{deb} descargado de su +\href{https://software.opensuse.org/download.html?project=home:stevenpusser&package=palemoon}{página +web} + +\subsection{LibreWolf}\label{librewolf} + +Instalado el paquete flatpak desde el Software Manager + +\subsubsection{Plugins instalados}\label{plugins-instalados} + +Conviene estudiar la documentación de los \emph{add-ons} recomendados, +disponible +\href{https://librewolf-community.gitlab.io/docs/addons/}{aqui}. + +\begin{itemize} +\item + KeepassXC-Browser + + \begin{itemize} + \tightlist + \item + Necesitamos instalar el KeepassXC, el que viene en los repos es un + poco antiguo podemos instalar desde PPA + \item + Es imprescindible hacer un link con + \texttt{ln\ -s\ \textasciitilde{}/.mozilla/native-messaging-hosts\ \textasciitilde{}/.librewolf/native-messaging-hosts} + \end{itemize} +\item + Clear URLs +\item + Mozilla Multiaccount Containers +\end{itemize} + +\subsection{Netsurf}\label{netsurf} + +\textbf{NOTA}: Aún no instalado en Xia + +Un navegador ultraligero (aunque no funciona con muchas páginas, solo +para webs austeras) Instalado via flathub con +\texttt{flatpak\ install\ netsurf} + +\subsection{Lagrange}\label{lagrange} + +Un navegador para el protocolo \emph{Gemini}. Instalado con la +\emph{appimage} desde su +\href{https://git.skyjake.fi/gemini/lagrange}{página web} + +\subsection{Castor}\label{castor} + +\textbf{NOTA}: Aún no instalado en Xia + +Otro navegador para el protocolo \emph{Gemini} programado en +\emph{Rust}. Instalado desde las fuentes siguiendo instrucciones de su +\href{https://sr.ht/~julienxx/Castor/}{página web} + +\subsection{Whalebird: Cliente de +Mastodon}\label{whalebird-cliente-de-mastodon} + +Descargada \emph{appimage} desde \href{https://whalebird.social/en}{la +página web de la aplicación}. + +\subsection{Sengi: Cliente de Mastodon}\label{sengi-cliente-de-mastodon} + +Instalada \emph{appimage} desde su +\href{https://github.com/NicolasConstant/sengi}{github} + +\section{Window Managers adicionales}\label{window-managers-adicionales} + +\subsection{i3wm}\label{i3wm} + +Añadimos el repo: + +\begin{Shaded} +\begin{Highlighting}[] +\BuiltInTok{cd}\NormalTok{ \textasciitilde{}/tmp} +\ExtensionTok{/usr/lib/apt/apt{-}helper}\NormalTok{ download{-}file https://debian.sur5r.net/i3/pool/main/s/sur5r{-}keyring/sur5r{-}keyring\_2021.02.02\_all.deb keyring.deb SHA256:cccfb1dd7d6b1b6a137bb96ea5b5eef18a0a4a6df1d6c0c37832025d2edaa710} + +\FunctionTok{sudo}\NormalTok{ dpkg }\AttributeTok{{-}i}\NormalTok{ ./keyring.deb} +\FunctionTok{sudo}\NormalTok{ echo }\StringTok{"deb http://debian.sur5r.net/i3/ }\VariableTok{$(}\FunctionTok{grep} \StringTok{\textquotesingle{}\^{}DISTRIB\_CODENAME=\textquotesingle{}}\NormalTok{ /etc/lsb{-}release }\KeywordTok{|} \FunctionTok{cut} \AttributeTok{{-}f2} \AttributeTok{{-}d}\OperatorTok{=}\VariableTok{)}\StringTok{ universe"} \OperatorTok{\textgreater{}\textgreater{}}\NormalTok{ /etc/apt/sources.list.d/sur5r{-}i3.list} +\FunctionTok{sudo}\NormalTok{ apt update} +\FunctionTok{sudo}\NormalTok{ apt install i3} +\end{Highlighting} +\end{Shaded} + +\subsection{qtile}\label{qtile} + +Vamos a describir la instalación del \emph{Qtile} en un +\emph{virtualenv} dedicado. Si te bajas la versión estable de +\emph{Qtile} desde su \href{http://qtile.org}{página web} en el paquete +vienen un montón de script auxiliares que te permiten hacer la +instalación aislada en un \emph{virtualenv} pero lo voy a hacer a mano +para tenerlo controlado con \texttt{pyenv}. + +\begin{itemize} +\tightlist +\item + Creamos el \emph{virtualenv} \texttt{qtile} basado en la versión + 3.10.0 que teniamos instalada previamente: +\end{itemize} + +\begin{Shaded} +\begin{Highlighting}[] +\CommentTok{\# Creamos el directorio de trabajo} +\FunctionTok{mkdir} \OperatorTok{\textless{}}\NormalTok{workPath}\OperatorTok{\textgreater{}}\NormalTok{/qtile} +\BuiltInTok{cd} \OperatorTok{\textless{}}\NormalTok{workPath}\OperatorTok{\textgreater{}}\NormalTok{/qtile} + +\CommentTok{\# OPCIONAL: Descargamos el qtile estable de la página web} +\CommentTok{\# sólo si quieres curiosear los scripts auxiliares} +\FunctionTok{wget}\NormalTok{ https://github.com/qtile/qtile/archive/v0.18.1.tar.gz} +\FunctionTok{tar}\NormalTok{ xvzf v0.18.1.tar.gz} +\FunctionTok{rm}\NormalTok{ v0.18.1.tar.gz} + +\CommentTok{\# Creamos el entorno virtual} +\ExtensionTok{pyenv}\NormalTok{ virtualenv 3.10.0 qtile} +\ExtensionTok{pyenv}\NormalTok{ local qtile} +\CommentTok{\# Instalamos los paquetes iniciales (comunes a mis entornos)} +\ExtensionTok{pip}\NormalTok{ install }\AttributeTok{{-}{-}upgrade}\NormalTok{ pip setuptools wheel} + +\CommentTok{\# instalamos los requisitos} +\ExtensionTok{pip}\NormalTok{ install }\AttributeTok{{-}{-}no{-}cache{-}dir}\NormalTok{ xcffib} +\ExtensionTok{pip}\NormalTok{ install }\AttributeTok{{-}{-}no{-}cache{-}dir}\NormalTok{ cairocffi} + +\CommentTok{\# Instalamos la versión estable de qtile} +\ExtensionTok{pip}\NormalTok{ install }\AttributeTok{{-}{-}no{-}cache{-}dir}\NormalTok{ qtile} +\end{Highlighting} +\end{Shaded} + +Con esto ya estamos listos, podríamos arrancar \emph{Qtile} con +\texttt{qtile\ start}, pero no puede funcionar claro. Para que arranque +correctamente, tenemos que lanzarlo en un servidor X. (ver el punto +``\hyperref[lanzar-window-managers-con-xephyr]{Lanzar Window Managers +con Xephyr}'') + +\subsubsection{\texorpdfstring{Configurar Qtile en \emph{virtualenv} +para arrancer desde el +\emph{Lightdm}}{Configurar Qtile en virtualenv para arrancer desde el Lightdm}}\label{configurar-qtile-en-virtualenv-para-arrancer-desde-el-lightdm} + +Como \texttt{root} nos creamos un script \texttt{launch\_qtile} en +\texttt{/usr/local/bin}, con el siguiente contenido + +\begin{Shaded} +\begin{Highlighting}[] +\CommentTok{\#!/bin/bash} +\BuiltInTok{source} \StringTok{\textquotesingle{}/home/user/.pyenv/versions/3.10.0/envs/qtile/bin/activate\textquotesingle{}} +\ExtensionTok{qtile}\NormalTok{ start} +\end{Highlighting} +\end{Shaded} + +Le damos permisos de ejecución con \texttt{chmod\ 755\ launch\_qtile} +(ojo a los permisos para \emph{all} que si no son estos no le gusta a +\emph{Lightdm}) + +También como \texttt{root} creamos el fichero +\texttt{/usr/share/xsessions/qtile.desktop} con el contenido: + +\begin{Shaded} +\begin{Highlighting}[] +\ExtensionTok{[Desktop}\NormalTok{ Entry]} +\VariableTok{Name}\OperatorTok{=}\NormalTok{Qtile} +\VariableTok{Comment}\OperatorTok{=}\NormalTok{Qtile }\ExtensionTok{Session} +\VariableTok{Exec}\OperatorTok{=}\NormalTok{launch\_qtile} +\VariableTok{Type}\OperatorTok{=}\NormalTok{Application} +\VariableTok{Keywords}\OperatorTok{=}\NormalTok{wm}\KeywordTok{;}\ExtensionTok{tiling} +\end{Highlighting} +\end{Shaded} + +Y con esto tendremos Qtile disponible en \emph{Lightdm}. + +\subsection{Lanzar Window Managers con +Xephyr}\label{lanzar-window-managers-con-xephyr} + +Para probar (o configurar) los \emph{Window Managers} sin salir de +nuestra sesión de Mate podemos usar Xephyr, si no lo tienes instalado +ejecuta: + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ apt update} +\FunctionTok{sudo}\NormalTok{ apt install xserver{-}xephyr} +\end{Highlighting} +\end{Shaded} + +Para lanzar un \emph{Xserver} usaríamos un comando como: + +\begin{Shaded} +\begin{Highlighting}[] +\ExtensionTok{Xephyr} \AttributeTok{{-}ac} \AttributeTok{{-}screen}\NormalTok{ 800x600 }\AttributeTok{{-}br} \AttributeTok{{-}reset} \AttributeTok{{-}terminate} \DecValTok{2}\OperatorTok{\textgreater{}}\NormalTok{ /dev/null :1 }\KeywordTok{\&} +\end{Highlighting} +\end{Shaded} + +\begin{description} +\item[\textbf{-ac}] +Autorizar conexiones de clientes indiscriminadamente (\emph{disable +access restrictions}) +\item[\textbf{-screen}] +Especificar la geometría de la pantalla. +\item[\textbf{-br}] +La ventana raiz tendrá fondo negro +\item[\textbf{-reset}] +Reset al terminar el último cliente +\item[\textbf{-terminate}] +Finalizar cuando se resetee el servidor +\item[\textbf{2\textgreater{} /dev/null}] +Mandar los mensajes de error al limbo (alias \textbf{NE} en nuestro pc) +\item[\textbf{:1}] +Arrancar el server en el DISPLAY=1 +\end{description} + +Asi que si queremos arrancar por ejemplo el \emph{i3wm} podríamos hacer +un script con las siguientes lineas: + +\begin{Shaded} +\begin{Highlighting}[] +\ExtensionTok{Xephyr} \AttributeTok{{-}ac} \AttributeTok{{-}screen}\NormalTok{ 800x600 }\AttributeTok{{-}br} \AttributeTok{{-}reset} \AttributeTok{{-}terminate} \DecValTok{2}\OperatorTok{\textgreater{}}\NormalTok{ /dev/null :1 }\KeywordTok{\&} +\BuiltInTok{export} \VariableTok{DISPLAY}\OperatorTok{=}\NormalTok{:1} +\ExtensionTok{i3} +\end{Highlighting} +\end{Shaded} + +Para \emph{Qtile} bastaria con cambiar \texttt{i3} por +\texttt{qtile\ start} + +\section{Comunicación con dispositivos +Android}\label{comunicaciuxf3n-con-dispositivos-android} + +\subsection{scrcpy}\label{scrcpy} + +\texttt{sudo\ apt\ install\ scrcpy} + +\subsection{Heimdall}\label{heimdall} + +Para flashear roms en moviles + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ apt install heimdall{-}flash heimdall{-}flash{-}frontend} +\end{Highlighting} +\end{Shaded} + +\section{Documentación}\label{documentaciuxf3n} + +\subsection{Vanilla LaTeX}\label{vanilla-latex} + +Para instalar la versión más reciente de LaTeX hago la instalación desde +\href{https://www.ctan.org/}{ctan} + +Una vez instalado usamos \emph{equivs} para generar un paquete +\texttt{deb} y que nuestro sistema sepa que tenemos \emph{texlive} +instalado. + +\begin{verbatim} +cd ~ +mkdir tmp +cd tmp +wget http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz +tar xzf install-tl-unx.tar.gz +cd install-tl-xxxxxx +\end{verbatim} + +La parte xxxxxx varía en función del estado de la última versión de +LaTeX disponible. + +\begin{verbatim} +sudo ./install-tl +\end{verbatim} + +Una vez lanzada la instalación podemos desmarcar las opciones que +instalan la documentación y las fuentes. Eso nos obligará a consultar la +documentación on line pero ahorrará practicamente el 50\% del espacio +necesario. En mi caso sin doc ni src ocupa 2,3Gb + +\begin{verbatim} +mkdir -p /opt/texbin +sudo ln -s /usr/local/texlive/2024/bin/x86_64-linux/* /opt/texbin +\end{verbatim} + +Por último para acabar la instalación añadimos \texttt{/opt/texbin} al +\emph{PATH}. Para \emph{bash} y \emph{zsh} basta con añadir al fichero +\texttt{\textasciitilde{}/.profile} las siguientes lineas: + +\begin{verbatim} +# adds texlive to my PATH +if [ -d "/opt/texbin" ] ; then + PATH="$PATH:/opt/texbin" +fi +\end{verbatim} + +En cuanto a \emph{fish} (si es que lo usas, claro) tendremos que +modificar (o crear) el fichero +\texttt{\textasciitilde{}/.config/fish/config.fish} y añadir la +siguiente linea: + +\begin{verbatim} +set PATH $PATH /opt/texbin +\end{verbatim} + +\subsubsection{Falsificando paquetes}\label{falsificando-paquetes} + +Ya tenemos el \emph{texlive} instalado, ahora necesitamos que el gestor +de paquetes sepa que ya lo tenemos instalado. + +\begin{verbatim} +sudo apt install equivs --no-install-recommends +mkdir -p /tmp/tl-equivs && cd /tmp/tl-equivs +equivs-control texlive-local +\end{verbatim} + +Alternativamente para hacerlo más fácil podemos descargarnos un fichero +\texttt{texlive-local}ya preparado, ejecutando: + +\begin{verbatim} +wget http://www.tug.org/texlive/files/debian-equivs-2023-ex.txt +/bin/cp -f debian-equivs-2023-ex.txt texlive-local +\end{verbatim} + +Editamos la versión (si queremos) y procedemos a generar el paquete +\emph{deb}. + +\begin{verbatim} +equivs-build texlive-local +\end{verbatim} + +Ahora podemos instalar el paquete con \texttt{dpkg} También conviene +instalar \emph{texinfo} (que hará que se instale \emph{texcommon}) y +opcionalmente se puede instalar \emph{lmodern}. + +\begin{verbatim} +sudo apt install texinfo +sudo dpkg -i texlive-local_2024-1_all.deb +\end{verbatim} + +Todo listo, ahora podemos instalar cualquier paquete debian que dependa +de \emph{texlive} sin problemas de dependencias, aunque no hayamos +instalado el \emph{texlive} de Debian. + +\subsubsection{Fuentes}\label{fuentes} + +Para dejar disponibles las fuentes opentype y truetype que vienen con +texlive para el resto de aplicaciones: + +\begin{verbatim} +sudo cp $(kpsewhich -var-value TEXMFSYSVAR)/fonts/conf/texlive-fontconfig.conf /etc/fonts/conf.d/09-texlive.conf +sudo nano /etc/fonts/conf.d/09-texlive.conf +\end{verbatim} + +Borramos la linea: + +\begin{verbatim} +/usr/local/texlive/20xx/texmf-dist/fonts/type1 +\end{verbatim} + +Y ejecutamos: + +\begin{verbatim} +sudo fc-cache -fsv +\end{verbatim} + +Actualizaciones Para actualizar nuestro \emph{latex} a la última versión +de todos los paquetes: + +\begin{verbatim} +sudo /opt/texbin/tlmgr update --self +sudo /opt/texbin/tlmgr update --all +\end{verbatim} + +También podemos lanzar el instalador gráfico con: + +\begin{verbatim} +sudo /opt/texbin/tlmgr --gui +\end{verbatim} + +Para usar el instalador gráfico hay que instalar previamente: + +\begin{verbatim} +sudo apt-get install perl-tk --no-install-recommends +\end{verbatim} + +Lanzador para el actualizador de \emph{texlive}: + +\begin{verbatim} +mkdir -p ~/.local/share/applications +/bin/rm ~/.local/share/applications/tlmgr.desktop +cat > ~/.local/share/applications/tlmgr.desktop << EOF +[Desktop Entry] +Version=1.0 +Name=TeX Live Manager +Comment=Manage TeX Live packages +GenericName=Package Manager +Exec=gksu -d -S -D "TeX Live Manager" '/opt/texbin/tlmgr -gui' +Terminal=false +Type=Application +Icon=system-software-update +EOF +\end{verbatim} + +\subsection{Tipos de letra}\label{tipos-de-letra} + +Creamos el directorio de usuario para tipos de letra: + +\begin{verbatim} +mkdir ~/.local/share/fonts +\end{verbatim} + +\subsection{Fuentes Adicionales}\label{fuentes-adicionales} + +Me he descargado de internet la fuente +\href{https://robey.lag.net/downloads/mensch.ttf}{Mensch} el directorio +de usuario para los tipos de letra: +\texttt{\textasciitilde{}/.local/share/fonts} + +Además he clonado el repo +\href{https://github.com/ProgrammingFonts/ProgrammingFonts}{\emph{Programming +Fonts}} aunque parece que las fuentes están un poco anticuadas. + +\begin{verbatim} +cd ~/wherever +git clone https://github.com/ProgrammingFonts/ProgrammingFonts +cd ~/.local/share/fonts +ln -s ~/wherever/ProgrammingFonts/Menlo . +\end{verbatim} + +La fuente Hack la he instalado directamente desde el +\href{https://sourcefoundry.org/hack/}{sitio web} + +\subsection{Pandoc}\label{pandoc} + +\emph{Pandoc} es un traductor entre formatos de documento. Está escrito +en Haskell y es increiblemente útil. De hecho este documento está +escrito con \emph{Pandoc}. + +Instalado el \emph{Pandoc} descargando paquete \texttt{.deb} desde +\href{http://pandoc.org/installing.html}{la página web del proyecto}. + +Además podríamos descargarnos plantillas de Pandoc desde +\href{https://github.com/jgm/pandoc-templates}{este repo} ejecutando los +siguientes comandos: + +\begin{verbatim} +mkdir ~/.pandoc +cd ~/.pandoc +git clone https://github.com/jgm/pandoc-templates templates +\end{verbatim} + +Las plantillas no son imprescindibles pero si quieres aprender a usarlas +o hacer alguna modificación viene bien tenerlas. + +\subsection{Quarto}\label{quarto} + +\textbf{NOTA}: Aún no instalado en Xia + +Un sistema de generación de documentación que usa \emph{Pandoc}, +instalado con el paquete \texttt{.deb} descargado desde +\href{https://quarto.org/docs/get-started/}{la página web del proyecto} + +\textbf{TODO}: Completar el tutorial inicial + +\subsection{Algunos editores +adicionales}\label{algunos-editores-adicionales} + +Dos editores opcionales para hacer pruebas: + +\begin{description} +\item[Obsidian] +Instalado con \emph{appimage} descargado desde la +\href{https://obsidian.md/}{página web} \textbf{NOTA}: Aún no instalado +en Xia +\item[Zettlr] +Instalado con fichero \texttt{.deb} descargado desde +\href{https://www.zettlr.com/}{su página web} +\end{description} + +\subsection{Calibre}\label{calibre} + +La mejor utilidad para gestionar tu colección de libros electrónicos. + +Ejecutamos lo que manda la página web: + +\begin{verbatim} +sudo -v && wget -nv -O- https://download.calibre-ebook.com/linux-installer.sh | sudo sh /dev/stdin +\end{verbatim} + +El programa queda instalado en \texttt{/opt/calibre}. Se puede +desinstalar con el comando \texttt{sudo\ calibre-unistall}. + +Para usar el calibre con el ebook \emph{Kobo Glo}: + +\begin{itemize} +\tightlist +\item + Desactivamos todos los plugin de Kobo menos el \emph{Kobo Touch + Extended} +\item + En \emph{Preferences::Add your own Columns} creamos una columna + \emph{MyShelves} con identificativo \texttt{\#myshelves}, esto es para + crear colecciones en el ebook como me apetezca +\item + En las opciones del plugin: + + \begin{itemize} + \tightlist + \item + \emph{Collections, covers and uploads} + + \begin{itemize} + \tightlist + \item + En la opción \emph{Collection columns} añadimos las columnas + \texttt{Series,MyShelves} + \item + Marcamos las opciones \emph{Create collections} y \emph{Delete + empty bookshelves} + \item + Marcamos \emph{Modify CSS} + \end{itemize} + \item + \emph{Metadata on device and advanced} + + \begin{itemize} + \tightlist + \item + \emph{Set series information} + \end{itemize} + \item + \emph{Extended} + + \begin{itemize} + \tightlist + \item + \emph{Send books as kepubs} + \end{itemize} + \end{itemize} +\end{itemize} + +Algunos enlaces útiles: + +\begin{itemize} +\tightlist +\item + (https://github.com/jgoguen/calibre-kobo-driver) +\item + (http://www.lectoreselectronicos.com/foro/showthread.php?15116-Manual-de-instalaci\%C3\%B3n-y-uso-del-plugin-Kobo-Touch-Extended-para-Calibre) +\item + (http://www.redelijkheid.com/blog/2013/7/25/kobo-glo-ebook-library-management-with-calibre) +\item + (https://www.netogram.com/kobo.htm) +\end{itemize} + +\subsection{Scribus}\label{scribus} + +Scribus es un programa libre de composición de documentos. con Scribus +puedes elaborar desde los folletos de una exposición hasta una revista o +un poster. + +Instalamos desde los depósitos oficiales de Mint. + +Se podría instalar desde ppa para instalar la última versión: + +\begin{verbatim} +sudo add-apt-repository ppa:ubuntuhandbook1/scribus +sudo apt update +sudo apt install scribus scribus-data scribus-template +\end{verbatim} + +\subsubsection{Cambiados algunos valores por +defecto}\label{cambiados-algunos-valores-por-defecto} + +He cambiado los siguientes valores en las dos versiones, non están +exactamente en el mismo menú pero no son díficiles de encontrar: + +\begin{itemize} +\tightlist +\item + Lenguaje por defecto: \textbf{English} +\item + Tamaño de documento: \textbf{A4} +\item + Unidades por defecto: \textbf{milimeters} +\item + Show Page Grid: \textbf{Activado} +\item + Dimensiones de la rejilla: + + \begin{itemize} + \tightlist + \item + Mayor: \textbf{30 mm} + \item + Menor: \textbf{6mm} + \end{itemize} +\item + En opciones de salida de \emph{pdf} indicamos que queremos salida a + impresora y no a pantalla. Y también que no queremos \emph{spot + colors}, que serían sólo para ciertas impresoras industriales, así que + activamos la opción \emph{Convert Spot Colors to Process Colors}. +\end{itemize} + +Siempre se puede volver a los valores por defecto sin mucho problema +(hay una opción para ello) + +Referencia +\href{https://www.youtube.com/watch?v=3sEoYZGABQM&list=PL3kOqLpV3a67b13TY3WxYVzErYUOLYekI}{aquí} + +\subsubsection{\texorpdfstring{Solucionados problemas de +\emph{hyphenation}}{Solucionados problemas de hyphenation}}\label{solucionados-problemas-de-hyphenation} + +\emph{Scribus} no hacia correctamente la separación silábica en +castellano, he instalado los paquetes: + +\begin{itemize} +\tightlist +\item + hyphen-es +\item + hyphen-gl +\end{itemize} + +Y ahora funciona correctamente. + +\subsection{Zotero: Gestor de referencias +bibliográficas}\label{zotero-gestor-de-referencias-bibliogruxe1ficas} + +Por cortesía de \href{https://github.com/retorquere/zotero-deb}{Emiliano +Heyns} tenemos disponible el paquete de Zotero para Debian y Ubuntu. + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{wget} \AttributeTok{{-}qO{-}}\NormalTok{ https://raw.githubusercontent.com/retorquere/zotero{-}deb/master/install.sh }\KeywordTok{|} \FunctionTok{sudo}\NormalTok{ bash} +\FunctionTok{sudo}\NormalTok{ apt update} +\FunctionTok{sudo}\NormalTok{ apt install zotero} +\end{Highlighting} +\end{Shaded} + +A mayores instalamos el \emph{addon} \textbf{\emph{Better Bibtex}} +descargando la última versión disponible desde +\href{https://retorque.re/zotero-better-bibtex/installation/}{aquí} e +instalando en Zotero con la opción ``Instalar desde fichero''. + +\section{Desarrollo software}\label{desarrollo-software} + +\subsection{Paquetes esenciales}\label{paquetes-esenciales} + +Estos son los paquetes esenciales para empezar a desarrollar software en +Linux. + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ apt install build{-}essential checkinstall make automake cmake autoconf }\DataTypeTok{\textbackslash{}} +\NormalTok{git git{-}core git{-}crypt dpkg wget} +\end{Highlighting} +\end{Shaded} + +\subsection{Git}\label{git} + +\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center} + +\textbf{NOTA}: Si quieres instalar la última versión de git, los git +developers tienen un ppa para ubuntu, si quieres tener el git más +actualizado: + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ add{-}apt{-}repository ppa:git{-}core/ppa} +\FunctionTok{sudo}\NormalTok{ apt update} +\FunctionTok{sudo}\NormalTok{ apt upgrade} +\end{Highlighting} +\end{Shaded} + +\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center} + +Control de versiones distribuido. Imprescindible. Para \emph{Linux Mint} +viene instalado por defecto. + +Configuración básica de git: + +\begin{verbatim} +git config --global ui.color auto +git config --global user.name "Pepito Pérez" +git config --global user.email "pperez@mikasa.com" + +git config --global alias.cl clone + +git config --global alias.st "status -sb" +git config --global alias.last "log -1 --stat" +git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %Cblue<%an>%Creset' --abbrev-commit --date=relative --all" +git config --global alias.dc "diff --cached" + +git config --global alias.unstage "reset HEAD --" + +git config --global alias.ci commit +git config --global alias.ca "commit -a" + +git config --global alias.ri "rebase -i" +git config --global alias.ria "rebase -i --autosquash" +git config --global alias.fix "commit --fixup" +git config --global alias.squ "commit --squash" + +git config --global alias.cp cherry-pick +git config --global alias.co checkout +git config --global alias.br branch +git config --global core.editor emacs +\end{verbatim} + +\subsection{Emacs}\label{emacs} + +Instalado emacs desde los repos: + +\begin{verbatim} +sudo aptitude install emacs +\end{verbatim} + +\subsection{Lenguaje de programación D (D programming +language)}\label{lenguaje-de-programaciuxf3n-d-d-programming-language} + +El lenguaje de programación D es un lenguaje de programación de sistemas +con una sintaxis similar a la de C y con tipado estático. Combina +eficiencia, control y potencia de modelado con seguridad y +productividad. + +\subsubsection{D-apt e instalación de +programas}\label{d-apt-e-instalaciuxf3n-de-programas} + +Configurado \emph{d-apt}, instalados todos los programas incluidos + +\begin{verbatim} +sudo wget http://master.dl.sourceforge.net/project/d-apt/files/d-apt.list -O /etc/apt/sources.list.d/d-apt.list +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EBCF975E5BA24D5E +sudo apt update +\end{verbatim} + +Instalamos todos los programas asociados excepto \emph{textadept} que no +uso. + +\begin{verbatim} +sudo apt install dmd-compiler dmd-tools dub dcd dfix dfmt dscanner +\end{verbatim} + +\subsubsection{DCD}\label{dcd} + +Una vez instalado el DCD tenemos que configurarlo creando el fichero +\texttt{\textasciitilde{}/.config/dcd/dcd.conf} con el siguiente +contenido: + +\begin{verbatim} +/usr/include/dmd/druntime/import +/usr/include/dmd/phobos +\end{verbatim} + +Podemos probarlo con: + +\begin{verbatim} +dcd-server & +echo | dcd-client --search toImpl +\end{verbatim} + +\subsubsection{gdc}\label{gdc} + +Instalado con: + +\begin{verbatim} +sudo aptitude install gdc +\end{verbatim} + +\subsubsection{ldc}\label{ldc} + +Instalado con: + +\begin{verbatim} +sudo aptitude install ldc +\end{verbatim} + +Para poder ejecutar aplicaciones basadas en Vibed, necesitamos instalar: + +\begin{verbatim} +sudo apt-get install -y libssl-dev libevent-dev +\end{verbatim} + +\subsubsection{Emacs para editar D}\label{emacs-para-editar-d} + +Instalados los siguientes paquetes desde Melpa + +\begin{itemize} +\tightlist +\item + d-mode +\item + flymake-d +\item + flycheck +\item + flycheck-dmd-dub +\item + flychek-d-unittest +\item + auto-complete (desde melpa) +\item + ac-dcd +\end{itemize} + +Referencias * (https://github.com/atilaneves/ac-dcd) * +(https://github.com/Hackerpilot/DCD) + +\subsection{C, C++}\label{c-c} + +\subsubsection{Instalación de Gnu +Global}\label{instalaciuxf3n-de-gnu-global} + +Para instalar las dependencias, previamente instalamos: + +\begin{Shaded} +\begin{Highlighting}[] +\NormalTok{sudo apt install ncurses{-}dev id{-}utils exuberant{-}ctags python{-}pygments} +\end{Highlighting} +\end{Shaded} + +Con \texttt{ctags\ -\/-version} nos aseguramos de que se llama a +Exuberant y no el ctags que instala Emacs. Si no es así habrá que +revisar la definición del \texttt{PATH} + +\texttt{python-pygments} no es necesario para C o C++, pero añade +funcionalidad a Global (hasta 25 lenguajes de programación más) + +No podemos instalar Global desde los repos de Ubuntu, está muy anticuado +y genera bases de datos enormes y lentas. Tendremos que compilarlo. + +Nos bajamos las fuentes del programa desde +\href{https://www.gnu.org/software/global/}{la página oficial} En el +momento de escribir esto se trata de la versión 6.6.4. + +Descomprimimos los fuentes y los compilamos con: + +\begin{Shaded} +\begin{Highlighting}[] +\NormalTok{./configure {-}{-}prefix=/usr/local {-}{-}with{-}exuberant{-}ctags=/usr/bin/ctags} +\NormalTok{make} +\NormalTok{sudo make install} +\end{Highlighting} +\end{Shaded} + +He comprobado que make uninstall funciona correctamente, las librerías +quedan instaladas en \texttt{/usr/local/lib/gtags} y los ejecutables en +\texttt{/usr/local/bin} + +\subsection{Rust}\label{rust} + +Instalamos siguiendo las instrucciones de +\href{https://www.rust-lang.org/tools/install}{aqui} (Hacemos la +instalación por defecto) + +\begin{Shaded} +\begin{Highlighting}[] +\ExtensionTok{curl} \AttributeTok{{-}{-}proto} \StringTok{\textquotesingle{}=https\textquotesingle{}} \AttributeTok{{-}{-}tlsv1.2} \AttributeTok{{-}sSf}\NormalTok{ https://sh.rustup.rs }\KeywordTok{|} \FunctionTok{sh} + + \ExtensionTok{stable}\NormalTok{ installed }\AttributeTok{{-}}\NormalTok{ rustc 1.47.0 }\ErrorTok{(}\ExtensionTok{18bf6b4f0}\NormalTok{ 2020{-}10{-}07}\KeywordTok{)} + + +\ExtensionTok{Rust}\NormalTok{ is installed now. Great!} + +\ExtensionTok{To}\NormalTok{ get started you need Cargo}\StringTok{\textquotesingle{}s bin directory ($HOME/.cargo/bin) in your PATH} +\StringTok{environment variable. Next time you log in this will be done} +\StringTok{automatically.} + +\StringTok{To configure your current shell run source $HOME/.cargo/env} +\end{Highlighting} +\end{Shaded} + +Yo comento la linea del fichero \texttt{.zprofile} por que mi +\texttt{.zshrc} ya lee el fichero \texttt{.profile} + +Para desinstalar \texttt{rust} bastaría con ejecutar +\texttt{rustup\ self\ uninstall} + +Para actualizar la instalación: \texttt{rustup\ update} + +\subsubsection{RLS}\label{rls} + +Seguimos las instrucciones de la página oficial de +\href{https://emacs-lsp.github.io/lsp-mode/page/lsp-rust/}{LSP} y de +\href{https://github.com/rust-lang/rls}{RLS} + +\begin{Shaded} +\begin{Highlighting}[] +\ExtensionTok{rustup}\NormalTok{ update} +\ExtensionTok{rustup}\NormalTok{ component add rls rust{-}analysis rust{-}src} +\end{Highlighting} +\end{Shaded} + +\subsubsection{Algunas utilidades de sistema escritas en +Rust}\label{algunas-utilidades-de-sistema-escritas-en-rust} + +Instalamos: + +\begin{Shaded} +\begin{Highlighting}[] +\ExtensionTok{cargo}\NormalTok{ install tealdeer }\CommentTok{\# tldr tldr} +\ExtensionTok{cargo}\NormalTok{ install du{-}dust }\CommentTok{\# tldr dust} +\ExtensionTok{cargo}\NormalTok{ install fd{-}find }\CommentTok{\# tldr fd} +\ExtensionTok{cargo}\NormalTok{ install exa }\CommentTok{\# tldr exa} +\ExtensionTok{cargo}\NormalTok{ install tokei }\CommentTok{\# tldr tokei} +\ExtensionTok{cargo}\NormalTok{ install gitui }\CommentTok{\# gitui {-}{-}help} +\ExtensionTok{cargo}\NormalTok{ install ripgrep }\CommentTok{\# tldr rg} +\ExtensionTok{cargo}\NormalTok{ install bat }\CommentTok{\# tldr bat} +\ExtensionTok{cargo}\NormalTok{ install lsd }\CommentTok{\# tldr lsd} +\ExtensionTok{cargo}\NormalTok{ install git{-}delta }\CommentTok{\# tldr delta} +\ExtensionTok{cargo}\NormalTok{ install }\AttributeTok{{-}{-}locked}\NormalTok{ navi }\CommentTok{\# navi fn welcome (requires fzf and tldr)} +\ExtensionTok{cargo}\NormalTok{ install }\AttributeTok{{-}{-}locked}\NormalTok{ zoxide }\CommentTok{\# tldr zoxide} +\ExtensionTok{cargo}\NormalTok{ install }\AttributeTok{{-}{-}locked}\NormalTok{ zellij }\CommentTok{\# tldr zellij} +\ExtensionTok{cargo}\NormalTok{ install atuin }\CommentTok{\# tldr atuin} +\end{Highlighting} +\end{Shaded} + +\textbf{Nota}: \texttt{fzf} instalado descargando el binario en +\texttt{\textasciitilde{}/.local/bin} desde su github + +\subsection{golang}\label{golang} + +Bajamos el paquete con la última versión desde +\href{https://golang.org/dl/}{la página oficial}. + +Descomprimimos como \emph{root} en \texttt{/usr/local/} + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ tar }\AttributeTok{{-}C}\NormalTok{ /usr/local }\AttributeTok{{-}xvzf}\NormalTok{ go1.15.7.linux{-}amd64.tar.gz} +\end{Highlighting} +\end{Shaded} + +Añadimos al path con las siguientes lineas en +\texttt{\textasciitilde{}/.profile}: + +\begin{Shaded} +\begin{Highlighting}[] +\CommentTok{\#golang} +\ControlFlowTok{if} \BuiltInTok{[} \OtherTok{{-}d} \StringTok{"/usr/local/go"} \BuiltInTok{]} \KeywordTok{;} \ControlFlowTok{then} + \BuiltInTok{export} \VariableTok{GOROOT}\OperatorTok{=}\StringTok{"/usr/local/go"} + \VariableTok{PATH}\OperatorTok{=}\StringTok{"}\VariableTok{$PATH}\StringTok{:}\VariableTok{$GOROOT}\StringTok{/bin"} +\ControlFlowTok{fi} +\ControlFlowTok{if} \BuiltInTok{[} \OtherTok{{-}d} \StringTok{"}\VariableTok{$HOME}\StringTok{/work/development/gocode"} \BuiltInTok{]} \KeywordTok{;} \ControlFlowTok{then} + \BuiltInTok{export} \VariableTok{GOPATH}\OperatorTok{=}\StringTok{"}\VariableTok{$HOME}\StringTok{/work/development/gocode"} + \VariableTok{PATH}\OperatorTok{=}\StringTok{"}\VariableTok{$PATH}\StringTok{:}\VariableTok{$GOPATH}\StringTok{/bin"} +\ControlFlowTok{fi} +\end{Highlighting} +\end{Shaded} + +\subsubsection{\texorpdfstring{Instalación de \emph{gopls} un servidor +de LSP para +editores:}{Instalación de gopls un servidor de LSP para editores:}}\label{instalaciuxf3n-de-gopls-un-servidor-de-lsp-para-editores} + +Desde un directorio \textbf{que no sea el GOPATH} + +\begin{Shaded} +\begin{Highlighting}[] +\VariableTok{GO111MODULE}\OperatorTok{=}\NormalTok{on }\ExtensionTok{go}\NormalTok{ get golang.org/x/tools/gopls@latest} +\end{Highlighting} +\end{Shaded} + +\subsubsection{golint}\label{golint} + +\begin{Shaded} +\begin{Highlighting}[] +\ExtensionTok{go}\NormalTok{ get }\AttributeTok{{-}u}\NormalTok{ golang.org/x/lint/golint} +\end{Highlighting} +\end{Shaded} + +\subsubsection{Utilidades escritas en +go}\label{utilidades-escritas-en-go} + +\begin{Shaded} +\begin{Highlighting}[] +\ExtensionTok{go}\NormalTok{ install github.com/jesseduffield/lazygit@latest} +\ExtensionTok{go}\NormalTok{ install github.com/cheat/cheat/cmd/cheat@latest} +\end{Highlighting} +\end{Shaded} + +\subsection{Processing}\label{processing} + +Bajamos el paquete de la \href{https://processing.org/}{página web}, +descomprimimimos en \texttt{\textasciitilde{}/apps/}, en las nuevas +versiones incorpora un script de instalación que ya se encarga de crear +el fichero \emph{desktop}. + +La última versión incorpora varios modos de trabajo, he descargado el +modo \emph{Python} para probarlo. + +\subsection{openFrameworks}\label{openframeworks} + +Nos bajamos los fuentes para linux 64bits desde +\href{https://openframeworks.cc}{la página web del proyecto}, y las +descomprimimos en un directorio para proceder a compilarlas. + +No hay más que seguir +\href{https://openframeworks.cc/setup/linux-install/}{las instrucciones +de instalación para linux}. + +La instalación no es demasiado intrusiva si tienes Ubuntu 18 o mayor y +una versión reciente del gcc. + +En la primera pregunta que nos hace es necesario contestar que no. De lo +contrario falla la compilación. + +Añade los siguientes paquetes a nuestro sistema + +\begin{Shaded} +\begin{Highlighting}[] +\ExtensionTok{installing}\NormalTok{ OF dependencies} +\ExtensionTok{OF}\NormalTok{ needs to install the following packages using apt{-}get:} +\ExtensionTok{curl}\NormalTok{ libjack{-}jackd2{-}0 libjack{-}jackd2{-}dev freeglut3{-}dev libasound2{-}dev libxmu{-}dev libxxf86vm{-}dev g++ libgl1{-}mesa{-}dev libglu1{-}mesa{-}dev libraw1394{-}dev libudev{-}dev libdrm{-}dev libglew{-}dev libopenal{-}dev libsndfile{-}dev libfreeimage{-}dev libcairo2{-}dev libfreetype6{-}dev libssl{-}dev libpulse{-}dev libusb{-}1.0{-}0{-}dev libgtk{-}3{-}dev libopencv{-}dev libassimp{-}dev librtaudio{-}dev libboost{-}filesystem{-}dev libgstreamer1.0{-}dev libgstreamer{-}plugins{-}base1.0{-}dev gstreamer1.0{-}libav gstreamer1.0{-}pulseaudio gstreamer1.0{-}x gstreamer1.0{-}plugins{-}bad gstreamer1.0{-}alsa gstreamer1.0{-}plugins{-}base gstreamer1.0{-}plugins{-}good gdb libglfw3{-}dev liburiparser{-}dev libcurl4{-}openssl{-}dev libpugixml{-}dev libgconf{-}2{-}4 libgtk2.0{-}0 libpoco{-}dev} +\ExtensionTok{Do}\NormalTok{ you want to continue}\PreprocessorTok{?} \PreprocessorTok{[}\SpecialStringTok{Y/n}\PreprocessorTok{]} +\end{Highlighting} +\end{Shaded} + +No te olvides de compilar también el \emph{Project Generator}. + +\subsection{Python}\label{python} + +En Linux Mint Vanessa ya no tenemos \emph{python2} (aunque podemos +instalarlo) + +Para dejar a \emph{python3} como python de sistema instalamos el +paquete: + +\texttt{sudo\ apt\ install\ python-is-python3} + +Después podemos comprobar la versión: + +\begin{Shaded} +\begin{Highlighting}[] +\ExtensionTok{python} \AttributeTok{{-}V} +\ExtensionTok{Python}\NormalTok{ 3.10.6} +\end{Highlighting} +\end{Shaded} + +\subsubsection{Paquetes de sistema relacionados con python que +instalamos}\label{paquetes-de-sistema-relacionados-con-python-que-instalamos} + +Son los que ya comentamos en la sección de instalación de zsh, como ya +dijimos conviene que instalemos los paquetes de desarrollo: + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ apt install python3{-}dev} +\FunctionTok{sudo}\NormalTok{ apt install python3{-}all{-}dev} +\FunctionTok{sudo}\NormalTok{ apt install python3{-}virtualenv python3{-}virtualenvwrapper python3{-}virtualenv{-}clone} +\FunctionTok{sudo}\NormalTok{ apt install pipx} +\CommentTok{\# sudo apt install python3{-}poetry} +\end{Highlighting} +\end{Shaded} + +Ademas añadimos las siguientes lineas al fichero +\texttt{\textasciitilde{}/.profile}: + +\begin{Shaded} +\begin{Highlighting}[] +\CommentTok{\# WORKON\_HOME for virtualenvwrapper} +\ControlFlowTok{if} \BuiltInTok{[} \OtherTok{{-}d} \StringTok{"}\VariableTok{$HOME}\StringTok{/.virtualenvs"} \BuiltInTok{]} \KeywordTok{;} \ControlFlowTok{then} +\VariableTok{WORKON\_HOME}\OperatorTok{=}\StringTok{"}\VariableTok{$HOME}\StringTok{/.virtualenvs"} +\ControlFlowTok{fi} +\end{Highlighting} +\end{Shaded} + +\href{https://virtualenvwrapper.readthedocs.io/en/latest/command_ref.html}{Aquí} +tenemos la referencia de comandos de \emph{virtualenvwrapper}. + +\subsubsection{pyenv}\label{pyenv} + +Instalamos los pre-requisitos: + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ apt{-}get update} +\FunctionTok{sudo}\NormalTok{ apt{-}get install }\AttributeTok{{-}{-}no{-}install{-}recommends}\NormalTok{ make build{-}essential }\DataTypeTok{\textbackslash{}} +\NormalTok{libssl{-}dev zlib1g{-}dev libbz2{-}dev libreadline{-}dev libsqlite3{-}dev }\DataTypeTok{\textbackslash{}} +\NormalTok{wget curl llvm libncurses5{-}dev xz{-}utils tk{-}dev }\DataTypeTok{\textbackslash{}} +\NormalTok{libxml2{-}dev libxmlsec1{-}dev libffi{-}dev liblzma{-}dev} +\end{Highlighting} +\end{Shaded} + +Podemos clonar el repo en nuestro \texttt{home}: + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{git}\NormalTok{ clone https://github.com/pyenv/pyenv.git \textasciitilde{}/.pyenv} +\end{Highlighting} +\end{Shaded} + +Pero también podemos añadir el \emph{bundle} para \emph{Antigen} en el +fichero \texttt{.zshrc} y dejar que se encargue de todo. (Este es el +camino que yo sigo) + +\begin{Shaded} +\begin{Highlighting}[] +\ExtensionTok{antigen}\NormalTok{ bundle mattberther/zsh{-}pyenv} +\end{Highlighting} +\end{Shaded} + +Añadimos al fichero \texttt{\textasciitilde{}/.profile}: + +\begin{Shaded} +\begin{Highlighting}[] +\CommentTok{\# pyenv} +\ControlFlowTok{if} \BuiltInTok{[} \OtherTok{{-}d} \StringTok{"}\VariableTok{$HOME}\StringTok{/.pyenv"} \BuiltInTok{]} \KeywordTok{;} \ControlFlowTok{then} + \BuiltInTok{export} \VariableTok{PYENV\_ROOT}\OperatorTok{=}\StringTok{"}\VariableTok{$HOME}\StringTok{/.pyenv"} + \BuiltInTok{export} \VariableTok{PATH}\OperatorTok{=}\StringTok{"}\VariableTok{$PYENV\_ROOT}\StringTok{/bin:}\VariableTok{$PATH}\StringTok{"} +\ControlFlowTok{fi} +\end{Highlighting} +\end{Shaded} + +Y configuramos en \texttt{\textasciitilde{}/.bashrc} y en +\texttt{\textasciitilde{}/.zshrc} (aunque en el último no es necesario +tocar nada si usamos el \emph{bundle} para \emph{Antigen}): + +\begin{Shaded} +\begin{Highlighting}[] +\ControlFlowTok{if} \BuiltInTok{command} \AttributeTok{{-}v}\NormalTok{ pyenv }\DecValTok{1}\OperatorTok{\textgreater{}}\NormalTok{/dev/null }\DecValTok{2}\OperatorTok{\textgreater{}\&}\DecValTok{1}\KeywordTok{;} \ControlFlowTok{then} + \BuiltInTok{eval} \StringTok{"}\VariableTok{$(}\ExtensionTok{pyenv}\NormalTok{ init }\AttributeTok{{-}}\VariableTok{)}\StringTok{"} +\ControlFlowTok{fi} +\end{Highlighting} +\end{Shaded} + +Podemos probar que todo funciona con: \texttt{pyenv\ install\ -l} + +Una vez instalado hay que estudiarse +\href{https://github.com/pyenv/pyenv/blob/master/COMMANDS.md}{la +referencia de comandos} + +\subsubsection{poetry}\label{poetry} + +Podríamos instalar con: + +\begin{Shaded} +\begin{Highlighting}[] +\ExtensionTok{curl} \AttributeTok{{-}sSL}\NormalTok{ https://raw.githubusercontent.com/python{-}poetry/poetry/master/get{-}poetry.py }\KeywordTok{|} \ExtensionTok{python3} \AttributeTok{{-}} +\end{Highlighting} +\end{Shaded} + +Dejamos la activación solo en el fichero +\texttt{\textasciitilde{}\ /.profile}, añadiendo las siguientes lineas: + +\begin{Shaded} +\begin{Highlighting}[] +\CommentTok{\# poetry} +\ControlFlowTok{if} \BuiltInTok{[} \OtherTok{{-}d} \StringTok{"}\VariableTok{$HOME}\StringTok{/.poetry"}\NormalTok{] }\ErrorTok{;} \ControlFlowTok{then} + \VariableTok{PATH}\OperatorTok{=}\StringTok{"}\VariableTok{$HOME}\StringTok{/.poetry/bin:}\VariableTok{$PATH}\StringTok{"} +\ControlFlowTok{fi} +\end{Highlighting} +\end{Shaded} + +Las actualizaciones se realizan con \texttt{poetry\ self\ update} + +También podríamos instalarlo como un paquete de Ubuntu. + +\subsubsection{Instalación de bpython y +ptpython}\label{instalaciuxf3n-de-bpython-y-ptpython} + +\href{https://bpython-interpreter.org/}{\emph{bpython}} instalado desde +repos \texttt{sudo\ apt\ install\ bpython} + +\href{https://github.com/prompt-toolkit/ptpython}{\emph{ptpython}} +instalado en un virtualenv para probarlo + +\subsubsection{Jupyter}\label{jupyter} + +Una instalación para pruebas. + +\begin{Shaded} +\begin{Highlighting}[] +\ExtensionTok{mkvirtualenv} \AttributeTok{{-}p}\NormalTok{ /usr/bin/python3 jupyter} +\ExtensionTok{python} \AttributeTok{{-}m}\NormalTok{ pip install jupyter} +\end{Highlighting} +\end{Shaded} + +\subsubsection{\texorpdfstring{Instalamos +\texttt{python3.11}}{Instalamos python3.11}}\label{instalamos-python3.11} + +\texttt{python3.11} está ya disponible en los repos oficiales. + +Para dejarla instalada (yo no lo instalo): + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ apt install python3.11 python3.11{-}dev python3.11{-}venv} +\end{Highlighting} +\end{Shaded} + +\subsection{neovim}\label{neovim} + +Vamos a probar \emph{neovim}, ahora mismo la versión de los repos de +Ubuntu está actualizada a la penúltima versión (0.4.3). También podemos +descargar el appimage desde +\href{https://github.com/neovim/neovim/releases}{la página web} + +Es de esperar que alguna vez vuelvan a tener el neovim disponible en los +repos de la aplicación: + +\begin{verbatim} +sudo apt-add-repository ppa:neovim-ppa/stable +sudo apt update +sudo apt install neovim +\end{verbatim} + +Para instalar los módulos de python creamos un \emph{virtualev} que más +tarde añadiremos al fichero \texttt{init.vim}. + +\begin{verbatim} +mkvirtualenv -p /usr/bin/python3 neovim3 +sudo pip install --upgrade neovim +deactivate +\end{verbatim} + +Revisar +\href{https://neovim.io/doc/user/provider.html\#provider-python}{esto} + +\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center} + +\textbf{NOTA}: El siguiente paso ya no parece necesario, las +alternativas se han actualizado con la instalación del \emph{neovim}. + +\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center} + +Para actualizar las alternativas: + +\begin{verbatim} +sudo update-alternatives --install /usr/bin/vi vi /usr/bin/nvim 60 +sudo update-alternatives --config vi +sudo update-alternatives --install /usr/bin/vim vim /usr/bin/nvim 60 +sudo update-alternatives --config vim +\end{verbatim} + +\paragraph{\texorpdfstring{Install +\emph{vim-plug}}{Install vim-plug}}\label{install-vim-plug} + +Ejecutamos: + +\begin{verbatim} +curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \ + https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim +\end{verbatim} + +Configuramos el fichero de configuración de \emph{nvim} +(\texttt{\textasciitilde{}/.config/nvim/init.vim}): + +\begin{verbatim} +" Specify a directory for plugins +" - For Neovim: ~/.local/share/nvim/plugged +" - Avoid using standard Vim directory names like 'plugin' +call plug#begin('~/.local/share/nvim/plugged') + +if has('nvim') + Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' } +else + Plug 'Shougo/deoplete.nvim' + Plug 'roxma/nvim-yarp' + Plug 'roxma/vim-hug-neovim-rpc' +endif + +Plug 'deoplete-plugins/deoplete-jedi' + +" Initialize plugin system +call plug#end() + +let g:deoplete#enable_at_startup = 1 + +" set python enviroments +let g:python_host_prog = '/full/path/to/neovim2/bin/python' +let g:python3_host_prog = '/home/salvari/.virtualenvs/neovim3/bin/python' + +\end{verbatim} + +La primera vez que abramos \emph{nvim} tenemos que instalar los plugin +por comando ejecutando: \texttt{:PlugInstall} + +\textbf{Instalación de \texttt{dein}} + +\begin{longtable}[]{@{}l@{}} +\toprule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\textbf{Nota}: \\ +Solo hay que instalar uno de los dos o \emph{dein} o \emph{plug-vim}. Yo +uso \\ +\emph{plug-vim} así que esto es sólo una referencia. \\ +\end{longtable} + +\url{https://github.com/Shougo/dein.vim} + +\begin{verbatim} +" Add the dein installation directory into runtimepath +set runtimepath+=~/.config/nvim/dein/repos/github.com/Shougo/dein.vim + +if dein#load_state('~/.config/nvim/dein') + call dein#begin('~/.config/nvim/dein') + + call dein#add('~/.config/nvim/dein/repos/github.com/Shougo/dein.vim') + call dein#add('Shougo/deoplete.nvim') + call dein#add('Shougo/denite.nvim') + if !has('nvim') + call dein#add('roxma/nvim-yarp') + call dein#add('roxma/vim-hug-neovim-rpc') + endif + + call dein#end() + call dein#save_state() +endif + +filetype plugin indent on +syntax enable +\end{verbatim} + +\subsection{Firefox developer edition}\label{firefox-developer-edition} + +El rollo de siempre, descargar desde +\href{https://www.mozilla.org/en-US/firefox/developer/}{la página web} +descomprimir en \texttt{\textasciitilde{}/apps} y crear un lanzador. + +\subsection{Navegadores cli}\label{navegadores-cli} + +Herramientas útiles para depuración web + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ apt install httpie links} +\end{Highlighting} +\end{Shaded} + +\subsection{MariaDB}\label{mariadb} + +Ahora siempre uso los servidores de base de datos dockerizados. Pero +sigue siendo interesante instalar los clientes en nuestro sistema con +\texttt{sudo\ apt\ install\ mariadb-client} + +\subsection{Squirrel SQL Client}\label{squirrel-sql-client} + +Bajamos el zip de estándar desde \href{http://www.squirrelsql.org/}{la +página web de Squirrel} (yo prefiero no usar el instalador) + +Como de costumbre descomprimimos en \texttt{\textasciitilde{}/apps} y +creamos una entrada en nuestro menú de aplicaciones. + +Nos descargamos también el \emph{java connector} para MariaDB. Desde la +página oficial. Nos interesa el fichero +\texttt{maria-java-client-2.6.0.jar} + +Configuramos el driver para que sepa donde está el fichero \texttt{.jar} +y ya estamos listos para trabajar. + +El fichero \texttt{squirrel-sql.sh} necesita que lo lancemos desde el +directorio del script. + +\subsection{R y R-studio}\label{r-y-r-studio} + +Primero instalamos la última versión de R en nuestro pc: + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{wget} \AttributeTok{{-}qO{-}}\NormalTok{ https://cloud.r{-}project.org/bin/linux/ubuntu/marutter\_pubkey.asc }\DataTypeTok{\textbackslash{}} + \KeywordTok{|}\ExtensionTok{gpg} \AttributeTok{{-}{-}dearmor} \AttributeTok{{-}o}\NormalTok{ /usr/local/share/keyrings/cran{-}archive{-}keyring.gpg} + +\BuiltInTok{.}\NormalTok{ /etc/os{-}release} +\FunctionTok{sudo}\NormalTok{ echo }\StringTok{"deb [signed{-}by=/usr/local/share/keyrings/cran{-}archive{-}keyring.gpg ] }\DataTypeTok{\textbackslash{}} +\StringTok{https://cloud.r{-}project.org/bin/linux/ubuntu }\VariableTok{$\{UBUNTU\_CODENAME\}}\StringTok{{-}cran40/"} \DataTypeTok{\textbackslash{}} +\KeywordTok{|} \FunctionTok{sudo}\NormalTok{ tee /etc/apt/sources.list.d/cran.list} + +\FunctionTok{sudo}\NormalTok{ apt update} +\FunctionTok{sudo}\NormalTok{ apt install r{-}base} +\end{Highlighting} +\end{Shaded} + +\subsubsection{R-studio}\label{r-studio} + +Ojo, tenemos \emph{R-studio Server} y \emph{R-studio Desktop}, en tu +portátil casi seguro que quieres el \emph{Desktop} y no el +\emph{Server}. + +Para \emph{R-studio Server} descargamos la última versión disponible de +\emph{R-studio} desde la +\href{https://rstudio.com/products/rstudio/download-server/debian-ubuntu/}{página +web} + +Instalamos con \emph{gdebi} (basta con clicar sobre el fichero +\emph{.deb}) + +Para \emph{R-studio Desktop} descargamos la última versión disponible +desde la +\href{https://www.rstudio.com/products/rstudio/download/\#download}{página +web} + +Igual que el \emph{Server} instalamos el paquete del \emph{Desktop} con +\emph{gedebi}. + +\subsection{Octave}\label{octave} + +Instalado desde flatpak + +\begin{verbatim} +sudo flatpak install flathub org.octave.Octave +\end{verbatim} + +\subsection{go Hugo}\label{go-hugo} + +Generador de sitios web estáticos. + +Instalado fichero \texttt{.deb} desde las sección de \emph{releases} de +la página web: \href{https://github.com/gohugoio/hugo}{hugo github} +\textbf{Asegúrate de instalar el Hugo Extended} + +\section{Desarrollo hardware}\label{desarrollo-hardware} + +\subsection{Arduino IDE}\label{arduino-ide} + +Bajamos los paquetes de la página \href{https://www.arduino.cc}{web}, +descomprimimimos en \emph{\textasciitilde/apps/arduino}. + +La distribución del IDE incluye ahora un fichero \texttt{install.sh}que +se encarga de hacer la integración del IDE en los menús de Linux. + +Además también incluye un script (\texttt{arduino-linux-setup.sh}) para +crear las \emph{devrules} y que además desinstala el driver +\emph{modemmanager} y crea grupos nuevos en el sistema si no existen. + +No tengo claro lo de desinstalar el driver así que comentamos la sección +que borra el \emph{modemmanager} del fichero +\texttt{arduino-linux-setup.sh} y lo ejecutamos para que instale el +resto. + +Yo añado el fichero 99-arduino.rules que se encarga de inhibir el +modemmanager para que no capture al CircuitPlayground Express: + +\begin{Shaded} +\begin{Highlighting}[] +\CommentTok{\# for arduino brand, stop ModemManager grabbing port} +\ExtensionTok{ATTRS\{idVendor\}==}\StringTok{"2a03"}\ExtensionTok{,}\NormalTok{ ENV\{ID\_MM\_DEVICE\_IGNORE\}=}\StringTok{"1"} +\CommentTok{\# for sparkfun brand, stop ModemManager grabbing port} +\ExtensionTok{ATTRS\{idVendor\}==}\StringTok{"1b4f"}\ExtensionTok{,}\NormalTok{ ENV\{ID\_MM\_DEVICE\_IGNORE\}=}\StringTok{"1"} +\end{Highlighting} +\end{Shaded} + +Después de añadir ficheros de reglas podemos recargar las reglas +ejecutando: + +\texttt{udevadm\ control\ -\/-reload-rules\ \&\&\ udevadm\ trigger} + +Tenemos que crear los ficheros \texttt{.desktop}. + +\subsubsection{Arduino IDE 2}\label{arduino-ide-2} + +Descargamos el fichero \emph{appmimage} de la página de Arduino y +creamos el fichero \texttt{.desktop}. + +\subsubsection{\texorpdfstring{Añadir soporte para \emph{Feather +M0}}{Añadir soporte para Feather M0}}\label{auxf1adir-soporte-para-feather-m0} + +Arrancamos el IDE Arduino y en la opción de \emph{Preferences::Aditional +Board Managers URLs} añadimos la dirección +\texttt{https://adafruit.github.io/arduino-board-index/package\_adafruit\_index.json}, +si tenemos otras URL, simplemente añadimos esta separada por una coma. + +Ahora desde el \emph{Board Manager} instalamos: + +\begin{itemize} +\tightlist +\item + Arduino SAMD Boards +\item + Adafruit SAMD Boards +\end{itemize} + +\subsubsection{\texorpdfstring{Añadir soporte para \emph{Circuit +Playground +Express}}{Añadir soporte para Circuit Playground Express}}\label{auxf1adir-soporte-para-circuit-playground-express} + +Bastaría con instalar \emph{Arduino SAMD Boards} + +\subsubsection{Añadir soporte para +STM32}\label{auxf1adir-soporte-para-stm32} + +Tenemos varias URL posibles para configurar en las preferencias del IDE +Arduino: + +\begin{itemize} +\tightlist +\item + \url{https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json} + (esta deber ser la oficial) +\end{itemize} + +Pero la oficial no da soporte para usar el \emph{st-link}, necesitamos +añadir alguna más. + +\begin{itemize} +\tightlist +\item + \url{http://dan.drown.org/stm32duino/package_STM32duino_index.json} + (recomendada por Tutoelectro, nos da soporte para el st-link) +\end{itemize} + +\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center} + +\textbf{NOTA}: Hasta donde yo se la de arriba es la única URL que +permite usar el st-link + +\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center} + +He optado por añadir los dos ficheros json al IDE, la oficial tiene +buena pinta pero parece que no soporta st-link. Con la otra podremos +usarlo sin problemas. + +Instalamos la biblioteca \texttt{stm32\ cores} que corresponde al origen +de software oficial y la biblioteca \texttt{STM32F1xx/GD32F1xx}, esta +última es la que nos dará soporte explícito para el st-link + +Lo probamos con el \emph{Blink} y funciona perfectamente con las +opciones de la \hyperref[figura_1]{Figura 1} + +\begin{figure} +\centering +\includegraphics[width=0.3\linewidth,height=\textheight,keepaspectratio]{src/img/stm32_arduino_opts.jpg} +\caption{Opciones Arduino para STM32 con st-link}\label{figura_1} +\end{figure} + +\subsubsection{Añadir soporte para ESP32 y +ESP8266}\label{auxf1adir-soporte-para-esp32-y-esp8266} + +Añadimos las URL: + +\begin{itemize} +\tightlist +\item + \url{https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json} + (soporte para ESP32) +\item + \url{http://arduino.esp8266.com/stable/package_esp8266com_index.json} + (soporte para ESP8266) +\end{itemize} + +Añadimos la librería: + +\begin{itemize} +\tightlist +\item + ESP32 (de espressif) +\end{itemize} + +\subsubsection{Añadir biblioteca de soporte para +Makeblock}\label{auxf1adir-biblioteca-de-soporte-para-makeblock} + +\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center} + +\textbf{Nota}: Pendiente de instalar + +\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center} + +Clonamos el +\href{https://github.com/Makeblock-official/Makeblock-Libraries}{repo +oficial en github}. + +Una vez que descarguemos las librerias es necesario copiar el directorio +\texttt{Makeblock-Libraries/makeblock} en nuestro directorio de +bibliotecas de Arduino. En mi caso +\texttt{\textasciitilde{}/Arduino/libraries/}. + +Una vez instaladas las bibliotecas es necesario reiniciar el IDE Arduino +si estaba arrancado. Podemos ver si se ha instalado correctamente +simplemente echando un ojo al menú de ejemplos en el IDE, tendríamos que +ver los ejemplos de \emph{Makeblock}. + +Un detalle importante para programar el Auriga-Me es necesario +seleccionar el micro Arduino Mega 2560 en el IDE Arduino. + +\subsection{Pinguino IDE}\label{pinguino-ide} + +\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center} + +\textbf{Nota}: Pendiente de instalar + +\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center} + +Tenemos el paquete de instalación disponible en su página +\href{http://pinguino.cc/download.php}{web} + +Ejecutamos el programa de instalación. El programa descargará los +paquetes Debian necesarios para dejar el IDE y los compiladores +instalados. + +Al acabar la instalación he tenido que crear el directorio +\emph{\textasciitilde/Pinguino/v11}, parece que hay algún problema con +el programa de instalación y no lo crea automáticamente. + +El programa queda correctamente instalado en \emph{/opt} y arranca +correctamente, habrá que probarlo con los micros. + +\subsection{stm32 cubeide}\label{stm32-cubeide} + +Nos bajamos el instalador genérico. Tendremos que: + +\begin{itemize} +\tightlist +\item + aceptar un montón de acuerdos de licencias +\item + indicarle un directorio de instalación (en mi caso + \texttt{\textasciitilde{}/apps/st/st/stm32cubeide\_1.4.0}) +\item + darle la password de root para instalar ficheros de udev, + concretamente: + + \begin{itemize} + \tightlist + \item + \texttt{udev/rules.d/49-stlinkv1.rules} + \item + \texttt{udev/rules.d/49-stlinkv2-1.rules} + \item + \texttt{udev/rules.d/49-stlinkv2.rules} + \item + \texttt{udev/rules.d/49-stlinkv3.rules} + \item + \texttt{udev/rules.d/99-jlink.rules} + \end{itemize} +\end{itemize} + +\subsection{esp-idf}\label{esp-idf} + +\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center} + +\textbf{MUY IMPORTANTE} es más fácil instalar el esp-idf a través de +\emph{Platformio} pero dejo las instrucciones de instalación que usé en +su dia como referencia. + +\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center} + +Instalamos las dependencias (cmake ya lo tenemos instalado) + +\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center} + +\textbf{NOTA}: No es necesario instalar los paquetes de python que nos +especifican en las instrucciones de instalación del \emph{esp-idf}, se +instalarán automáticamente en el siguiente paso. + +\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center} + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ apt{-}get install gperf cmake ninja{-}build ccache libffi{-}dev libssl{-}dev} +\end{Highlighting} +\end{Shaded} + +Ahora creamos un directorio para nuestro \emph{tool-chain}: + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{mkdir}\NormalTok{ \textasciitilde{}/esp} +\BuiltInTok{cd}\NormalTok{ \textasciitilde{}/esp} +\FunctionTok{git}\NormalTok{ clone }\AttributeTok{{-}{-}recursive}\NormalTok{ https://github.com/espressif/esp{-}idf} +\end{Highlighting} +\end{Shaded} + +También es necesario que nuestro usuario pertenezca al grupo +\texttt{dialout}, pero eso ya deberíamos tenerlo hecho de antes. + +Una vez clonado el repo ejecutamos el script de instalación + +\begin{Shaded} +\begin{Highlighting}[] +\BuiltInTok{cd}\NormalTok{ \textasciitilde{}/esp/esp{-}idf} +\ExtensionTok{./install.sh} +\end{Highlighting} +\end{Shaded} + +Este script nos va a dejar instaladas todas las herramientas necesarias +en el directorio \texttt{\textasciitilde{}/.expressif} + +\textbf{Nota}: para que funcione correctamente en Linux Mint es +necesario que el script \texttt{tools/idf\_tools.py} apunte al python3 +de nuestro sistema. Basta con editar la primera linea \emph{shebang} del +script. + +Estas son las bibliotecas que deja instaladas: + +\begin{Shaded} +\begin{Highlighting}[] +\ExtensionTok{Installing}\NormalTok{ ESP{-}IDF tools} +\ExtensionTok{Installing}\NormalTok{ tools: xtensa{-}esp32{-}elf, xtensa{-}esp32s2{-}elf, esp32ulp{-}elf, esp32s2ulp{-}elf, openocd{-}esp32} +\end{Highlighting} +\end{Shaded} + +Para empezar a trabajar bastará con hacer un \emph{source} del fichero +\texttt{\textasciitilde{}/apps/esp/esp-idf/export.sh}: + +\begin{Shaded} +\begin{Highlighting}[] +\BuiltInTok{.}\NormalTok{ \textasciitilde{}/apps/esp/esp{-}idf/export.sh} +\end{Highlighting} +\end{Shaded} + +\subsection{KiCAD}\label{kicad} + +En la \href{http://kicad-pcb.org/download/linux-mint/}{página web del +proyecto} nos recomiendan el ppa a usar para instalar la última versión +estable: + +\begin{verbatim} +sudo add-apt-repository --yes ppa:kicad/kicad-5.1-releases +sudo apt-get update +sudo apt install kicad +\end{verbatim} + +Paciencia, el paquete \texttt{kicad-packages3d} tarda un buen rato en +descargarse. + +Algunas librerías alternativas: + +\begin{itemize} +\tightlist +\item + \href{https://github.com/freetronics/freetronics_kicad_library}{Freetronics} + una libreria que no solo incluye Shield para Arduino sino una completa + colección de componentes que nos permitirá hacer proyectos completos. + \href{http://www.freetronics.com}{Freetronics} es una especie de + BricoGeek australiano, publica tutoriales, vende componentes, y al + parecer mantiene una biblioteca para KiCAD. La biblioteca de + Freetronics se mantiene en un repo de github. Lo suyo es incorporarla + a cada proyecto, por que si la actualizas se pueden romper los + proyectos que estes haciendo. +\item + \href{http://meta-blog.eklablog.com/kicad-librairie-arduino-pretty-p930786}{eklablog} + Esta biblioteca de componentes está incluida en el github de KiCAD, + así que teoricamente no habría que instalarla en nuestro disco duro. +\end{itemize} + +\subsubsection{Actualizar a KiCAD 6.0}\label{actualizar-a-kicad-6.0} + +Hacemos un \texttt{sudo\ apt\ purge} de todos los paquetes del antiguo +KiCAD. Desactivamos el antiguo repo y ejecutamos: + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ add{-}apt{-}repository }\AttributeTok{{-}{-}yes}\NormalTok{ ppa:kicad/kicad{-}6.0{-}releases} +\FunctionTok{sudo}\NormalTok{ apt update} +\FunctionTok{sudo}\NormalTok{ apt install }\AttributeTok{{-}{-}install{-}recommends}\NormalTok{ kicad} +\CommentTok{\# If you want demo projects} +\CommentTok{\# sudo apt install kicad{-}demos} +\end{Highlighting} +\end{Shaded} + +No hay \texttt{demos} de momento en el nuevo KiCAD 6.0 + +\subsubsection{Actualizar a KiCAD 7}\label{actualizar-a-kicad-7} + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ add{-}apt{-}repository }\AttributeTok{{-}{-}yes}\NormalTok{ ppa:kicad/kicad{-}7.0{-}releases} +\FunctionTok{sudo}\NormalTok{ apt update} +\FunctionTok{sudo}\NormalTok{ apt install }\AttributeTok{{-}{-}install{-}recommends}\NormalTok{ kicad} +\end{Highlighting} +\end{Shaded} + +\subsection{Wireviz}\label{wireviz} + +Una herramienta para documentar cableados de proyectos. Es una +aplicación \emph{Python} que usa \emph{Graphviz}, lo he instalado con +\texttt{pipx}. + +\begin{Shaded} +\begin{Highlighting}[] +\ExtensionTok{pyenv}\NormalTok{ global ve\_sys} +\ExtensionTok{pipx}\NormalTok{ install wireviz} +\ExtensionTok{pyenv}\NormalTok{ global system} +\end{Highlighting} +\end{Shaded} + +\subsection{Analizador lógico}\label{analizador-luxf3gico} + +Mi analizador es un OpenBench de Seedstudio, +\href{http://dangerousprototypes.com/docs/Open_Bench_Logic_Sniffer}{aquí +hay mas info} + +\subsubsection{Sigrok}\label{sigrok} + +Instalamos \textbf{Sigrok}, simplemente desde los repos de Debian: + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ aptitude install sigrok} +\end{Highlighting} +\end{Shaded} + +Al instalar \textbf{Sigrok} instalamos también \textbf{Pulseview}. + +Si al conectar el analizador, echamos un ojo al fichero \emph{syslog} +vemos que al conectarlo se mapea en un puerto tty. + +Si arrancamos \textbf{Pulseview} (nuestro usuario tiene que estar +incluido en el grupo \emph{dialout}), en la opción \emph{File::Connect +to device}, escogemos la opción \emph{Openbench} y le pasamos el puerto. +Al pulsar la opción \emph{Scan for devices} reconoce el analizador +correctamente como un \emph{Sump Logic Analyzer}. + +\subsubsection{Sump logic analyzer}\label{sump-logic-analyzer} + +Este es el software recomendado para usar con el analizador. + +Descargamos el paquete de la \href{https://www.sump.org}{página del +proyecto}, o más concretamente de +\href{https://www.sump.org/projects/analyzer/}{esta página} y +descomprimimos en \emph{\textasciitilde/apps}. + +Instalamos las dependencias: + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ apt install librxtx{-}java} +\end{Highlighting} +\end{Shaded} + +Editamos el fichero \emph{\textasciitilde/apps/Logic +Analyzer/client/run.sh} y lo dejamos así: + +\begin{verbatim} +#!/bin/bash + +# java -jar analyzer.jar $* +java -cp /usr/share/java/RXTXcomm.jar:analyzer.jar org.sump.analyzer.Loader +\end{verbatim} + +Y ya funciona. + +\subsubsection{OLS}\label{ols} + +\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center} + +\textbf{Nota}: Pendiente de instalar + +\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center} + +\href{https://www.lxtreme.nl/ols/}{Página oficial} + +\subsection{IceStudio}\label{icestudio} + +Instalamos dependencias con \texttt{sudo\ apt\ install\ xclip} + +Bajamos el \emph{AppImage} desde el +\href{https://github.com/FPGAwars/icestudio}{github de IceStudio} y lo +dejamos en \texttt{\textasciitilde{}/apps/icestudio} + +\subsection{PlatformIO}\label{platformio} + +\subsubsection{VS Code}\label{vs-code} + +Añadimos el origen de software: + +\begin{verbatim} +curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg +sudo install -o root -g root -m 644 packages.microsoft.gpg /usr/share/keyrings/ +sudo sh -c 'echo "deb [arch=amd64 signed-by=/usr/share/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list' +\end{verbatim} + +E instalamos + +\begin{verbatim} +sudo apt update +sudo apt install code # alternativamente code-insiders (es como la versión beta, se pueden instalar los dos) +\end{verbatim} + +Ahora + +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\tightlist +\item + lanzamos el editor +\item + abrimos el gestor de extensiones +\item + buscamos el platformio ide +\item + instalamos +\end{enumerate} + +Seguimos las instrucciones de +\href{https://docs.platformio.org/en/latest/ide/vscode.html\#quick-start}{aqui} + +\subsubsection{Incluir platform.io CLI en el +PATH}\label{incluir-platform.io-cli-en-el-path} + +Esto es una malísima idea, \textbf{NO LO HAGAS} + +Las instrucciones indican que hagamos lo siguiente para usar Platformio +desde linea de comandos pero no es conveniente hacerlo. + +Modificamos el fichero \texttt{\textasciitilde{}/.profile} añadiendo las +siguientes lineas: + +\begin{verbatim} +if [ -d "$HOME/.platformio/penv/bin"] ; then + PATH="$PATH:$HOME/.platformio/penv/bin" +fi +\end{verbatim} + +Si quieres usar Platformio desde linea de comandos, es mejor activar +manualmente el entorno virtual con +\texttt{source\ \textasciitilde{}/.platformio/penv/bin/activate} + +\subsubsection{vscodium}\label{vscodium} + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{wget} \AttributeTok{{-}qO} \AttributeTok{{-}}\NormalTok{ https://gitlab.com/paulcarroty/vscodium{-}deb{-}rpm{-}repo/raw/master/pub.gpg }\KeywordTok{|} \ExtensionTok{gpg} \AttributeTok{{-}{-}dearmor} \KeywordTok{|} \FunctionTok{sudo}\NormalTok{ dd of=/etc/apt/trusted.gpg.d/vscodium.gpg} +\BuiltInTok{echo} \StringTok{\textquotesingle{}deb https://paulcarroty.gitlab.io/vscodium{-}deb{-}rpm{-}repo/debs/ vscodium main\textquotesingle{}} \KeywordTok{|} \FunctionTok{sudo}\NormalTok{ tee }\AttributeTok{{-}{-}append}\NormalTok{ /etc/apt/sources.list.d/vscodium.list} +\FunctionTok{sudo}\NormalTok{ apt update }\KeywordTok{\&\&} \FunctionTok{sudo}\NormalTok{ apt install codium} +\end{Highlighting} +\end{Shaded} + +\subsection{RepRap}\label{reprap} + +\subsubsection{OpenScad}\label{openscad} + +El OpenSCAD está disponible en los orígenes de software, así que +\texttt{sudo\ apt\ install\ openscad}. + +\subsubsection{Slic3r}\label{slic3r} + +Descargamos la estable desde la \href{https://slic3r.org}{página web} y +como de costumbre descomprimimos en \texttt{\textasciitilde{}/apps} y +creamos un lanzador con \emph{MenuLibre} + +\subsubsection{Slic3r Prusa Edition}\label{slic3r-prusa-edition} + +Una nueva versión del clásico \emph{Slic3r} con muchas mejoras. +Descargamos la \emph{appimage} desde la +\href{https://www.prusa3d.com/slic3r-prusa-edition/}{página web} y ya +sabeis, descomprimir en \texttt{\textasciitilde{}/apps} y dar permisos +de ejecución. + +\subsubsection{ideaMaker}\label{ideamaker} + +Una aplicación más para generar gcode con muy buena pinta, tenemos el +paquete \emph{deb} disponible en su +\href{https://www.raise3d.com/pages/ideamaker}{página web}. Instalamos +con el gestor de software. + +\subsubsection{Ultimaker Cura}\label{ultimaker-cura} + +Descargamos el \emph{AppImage} desde la +\href{https://github.com/Ultimaker/Cura/releases}{página web} + +\subsubsection{Pronterface}\label{pronterface} + +Seguimos las instrucciones para Ubuntu Focal: + +Instalamos las dependencias: \texttt{sudo\ apt\ install\ libsdl2-dev} + +Clonamos el repo: + +\begin{verbatim} +cd ~/apps +git clone https://github.com/kliment/Printrun.git +cd Printrun +mkvirtualenv -p /usr/bin/python3 printrun +python -m pip install https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-20.04/wxPython-4.1.0-cp38-cp38-linux_x86_64.whl +pip install -r requirements.txt +# sudo apt-get install libdbus-glib-1-dev libdbus-1-dev +\end{verbatim} + +Y ya lo tenemos todo listo para ejecutar. + +\subsection{Cortadora de vinilos}\label{cortadora-de-vinilos} + +\subsubsection{Inkcut}\label{inkcut} + +Instalado en un entorno virtual: + +\begin{Shaded} +\begin{Highlighting}[] +\ExtensionTok{mkvirtualenv} \AttributeTok{{-}p} \KeywordTok{\textasciigrave{}}\FunctionTok{which}\NormalTok{ python3}\KeywordTok{\textasciigrave{}}\NormalTok{ inkcut} + +\FunctionTok{sudo}\NormalTok{ apt install libxml2{-}dev libxslt{-}dev libcups2{-}dev} + +\ExtensionTok{pip}\NormalTok{ install PyQt5} + +\ExtensionTok{pip}\NormalTok{ install inkcut} +\end{Highlighting} +\end{Shaded} + +\subsubsection{Plugin para inkscape}\label{plugin-para-inkscape} + +Instalamos dependencias: + +\begin{Shaded} +\begin{Highlighting}[] +\ExtensionTok{pip}\NormalTok{ install python{-}usb} +\end{Highlighting} +\end{Shaded} + +Instalamos el fichero \texttt{.deb} desde la web +\url{https://github.com/fablabnbg/inkscape-silhouette/releases} + +\subsection{Drone}\label{drone} + +\subsubsection{qgroundcontrol}\label{qgroundcontrol} + +Descargamos +\href{https://s3-us-west-2.amazonaws.com/qgroundcontrol/latest/QGroundControl.AppImage}{el +appimage} + +\subsubsection{missionplanner}\label{missionplanner} + +Para usar \emph{Mission Planner} en Linux Mint se recomienda instalar +los paquetes: + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ apt install mono{-}complete festival} +\end{Highlighting} +\end{Shaded} + +Descargamos el MissionPlanner desde +\href{https://firmware.ardupilot.org/Tools/MissionPlanner/MissionPlanner-latest.zip}{aquí} + +\href{https://www.rcgroups.com/forums/showthread.php?2179591-Installing-MissionPlanner-1-3-X-on-Ubuntu-17-04}{Descripción +de la instalación} + +Una vez descomprimido el \texttt{zip} ejecutamos: +\texttt{mono\ MissionPlanner.exe} + +\subsection{node-red}\label{node-red} + +Para instalar node-red en linux necesitamos instalar primero +\texttt{node.js}. Hay varias formas de instalar \texttt{node.js}, yo voy +a optar por instalar \texttt{nvm} que es el \textbf{n}ode +\textbf{v}ersion \textbf{m}anager. + +Para ello ejecutamos el siguiente comando (la versión actual de +\texttt{nvm} es la 0.37.0) + +\begin{Shaded} +\begin{Highlighting}[] +\ExtensionTok{curl} \AttributeTok{{-}o{-}}\NormalTok{ https://raw.githubusercontent.com/nvm{-}sh/nvm/v0.37.0/install.sh }\KeywordTok{|} \FunctionTok{bash} +\end{Highlighting} +\end{Shaded} + +El script de instalación añade las siguientes lineas al fichero +\texttt{\textasciitilde{}/.bashrc}, nosotros las movemos al fichero +\texttt{\textasciitilde{}/.profile} + +\begin{Shaded} +\begin{Highlighting}[] +\BuiltInTok{export} \VariableTok{NVM\_DIR}\OperatorTok{=}\StringTok{"}\VariableTok{$HOME}\StringTok{/.nvm"} +\BuiltInTok{[} \OtherTok{{-}s} \StringTok{"}\VariableTok{$NVM\_DIR}\StringTok{/nvm.sh"} \BuiltInTok{]} \KeywordTok{\&\&} \ExtensionTok{\textbackslash{}.} \StringTok{"}\VariableTok{$NVM\_DIR}\StringTok{/nvm.sh"} \CommentTok{\# This loads nvm} +\BuiltInTok{[} \OtherTok{{-}s} \StringTok{"}\VariableTok{$NVM\_DIR}\StringTok{/bash\_completion"} \BuiltInTok{]} \KeywordTok{\&\&} \ExtensionTok{\textbackslash{}.} \StringTok{"}\VariableTok{$NVM\_DIR}\StringTok{/bash\_completion"} \CommentTok{\# This loads nvm bash\_completion} +\end{Highlighting} +\end{Shaded} + +Para comprobar la instalación usamos \texttt{command\ -v\ nvm} que nos +devolverá \texttt{nvm}. \texttt{which} no funciona en este caso por que +es un script para aplicarle \texttt{source} + +\subsubsection{\texorpdfstring{Instalación de +\texttt{node.js}}{Instalación de node.js}}\label{instalaciuxf3n-de-node.js} + +Ahora que tenemos \texttt{nvm} instalado, ya podemos instalar fácilmente +la versión o versiones que queramos de \texttt{node.js} + +\begin{Shaded} +\begin{Highlighting}[] +\ExtensionTok{nvm}\NormalTok{ ls{-}remote }\CommentTok{\# para listar las versiones disponibles} +\ExtensionTok{nvm}\NormalTok{ install node }\CommentTok{\# instala la última versión disponible} +\end{Highlighting} +\end{Shaded} + +\subsubsection{\texorpdfstring{Instalación de +\texttt{mosquitto}}{Instalación de mosquitto}}\label{instalaciuxf3n-de-mosquitto} + +\texttt{mosquitto} es un \emph{mqtt broker} muy sencillo y completo, +aunque no es capaz de aguantar cargas grandes, para aprender es +perfecto. + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ apt{-}add{-}repository ppa:mosquitto{-}dev/mosquitto{-}ppa} +\FunctionTok{sudo}\NormalTok{ apt{-}get update} +\FunctionTok{sudo}\NormalTok{ apt install mosquitto mosquitto{-}clients} +\end{Highlighting} +\end{Shaded} + +Con esto queda el servicio instalado y funcionando +(\texttt{scs\ mosquitto} o \texttt{systemctl\ status\ mosquitto}) + +Si queremos el servicio parado para arrancarlo nosotros manualmente: + +\begin{Shaded} +\begin{Highlighting}[] +\ExtensionTok{scsp}\NormalTok{ mosquitto.service} +\ExtensionTok{scd}\NormalTok{ mosquitto.service} +\end{Highlighting} +\end{Shaded} + +Y sin alias sería: + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ systemctl stop mosquitto.service} +\FunctionTok{sudo}\NormalTok{ systemctl disable mosquitto.service} +\end{Highlighting} +\end{Shaded} + +Para arrancarlo cuando lo necesitemos le damos un \emph{start} con +\texttt{scst\ mosquitto.service} o +\texttt{sudo\ systemctl\ start\ mosquitto.service} + +\subsubsection{Instalación de +Influxdb}\label{instalaciuxf3n-de-influxdb} + +Seguimos el método para ubuntu: + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{wget} \AttributeTok{{-}qO{-}}\NormalTok{ https://repos.influxdata.com/influxdb.key }\KeywordTok{|} \FunctionTok{sudo}\NormalTok{ apt{-}key add }\AttributeTok{{-}} +\CommentTok{\#source /etc/lsb{-}release} +\VariableTok{DISTRIB\_ID}\OperatorTok{=}\NormalTok{ubuntu} +\VariableTok{DISTRIB\_CODENAME}\OperatorTok{=}\NormalTok{focal} +\BuiltInTok{echo} \StringTok{"deb https://repos.influxdata.com/}\VariableTok{$\{DISTRIB\_ID\}}\StringTok{ }\VariableTok{$\{DISTRIB\_CODENAME\}}\StringTok{ stable"} \KeywordTok{|} \FunctionTok{sudo}\NormalTok{ tee /etc/apt/sources.list.d/influxdb.list} + +\ExtensionTok{apt}\NormalTok{ update} +\ExtensionTok{apt}\NormalTok{ install influxdb} +\ExtensionTok{apt}\NormalTok{ install telegraf} +\end{Highlighting} +\end{Shaded} + +\subsubsection{\texorpdfstring{Instalación de +\texttt{node-red}}{Instalación de node-red}}\label{instalaciuxf3n-de-node-red} + +Una vez instalado el \texttt{node.js} instalar el \texttt{node-red} es +muy fácil + +\begin{Shaded} +\begin{Highlighting}[] +\ExtensionTok{nvm}\NormalTok{ use node} +\ExtensionTok{npm}\NormalTok{ install }\AttributeTok{{-}g} \AttributeTok{{-}{-}unsafe{-}perm}\NormalTok{ node{-}red} +\end{Highlighting} +\end{Shaded} + +\section{Aplicaciones de gráficos}\label{aplicaciones-de-gruxe1ficos} + +\subsection{LibreCAD}\label{librecad} + +Diseño en 2D + +\begin{verbatim} +sudo apt install librecad +\end{verbatim} + +\subsection{FreeCAD}\label{freecad} + +No hay ppa disponible para Ubuntu 20. + +Instalamos \emph{AppImage} desde +\href{https://wiki.freecadweb.org/AppImage\#FreeCAD_AppImages}{aquí} + +Dejo la instalación desde ppa como recordatorio. + +\begin{verbatim} +sudo add-apt-repository ppa:freecad-maintainers/freecad-stable +sudo apt update +sudo install freecad +\end{verbatim} + +\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center} + +\textbf{NOTA:} the ccx package brings CalculiX support to the FEM +workbench, and needs to be installed separately. + +\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center} + +\subsection{Inkscape}\label{inkscape} + +El programa libre para creación y edición de gráficos vectoriales. + +\begin{verbatim} +sudo add-apt-repository ppa:inkscape.dev/stable +sudo apt update +sudo apt install inkscape +\end{verbatim} + +\subsection{Gimp}\label{gimp} + +El programa para edición y retocado de imágenes. + +Parece que ahora mismo los repos están más actualizados que el ppa. Así +que bastaría con: + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ apt install gimp gimp{-}data gimp{-}texturize }\DataTypeTok{\textbackslash{}} +\NormalTok{gimp{-}data{-}extras gimp{-}gap gmic gimp{-}gmic} +\end{Highlighting} +\end{Shaded} + +De todas formas dejo aquí las instrucciones para instalar desde el ppa +por si hacen falta algún dia: + +\begin{verbatim} +sudo apt remove gimp gimp-data +sudo add-apt-repository ppa:otto-kesselgulasch/gimp +sudo apt update +sudo apt upgrade +sudo apt install gimp gimp-data gimp-texturize \ +gimp-data-extras gimp-gap gmic gimp-gmic gimp-python +\end{verbatim} + +\subsubsection{Plugins de Gimp}\label{plugins-de-gimp} + +Para instalar los principales plugins basta con: + +\begin{verbatim} +sudo apt install gimp-plugin-registry +\end{verbatim} + +\subsection{Krita}\label{krita} + +La versión disponible en orígenes de software está bastante por detrás +de la disponible en la web. Basta con descargar el \emph{Appimage} desde +la \href{https://krita.org}{página web} + +Lo copiamos a \texttt{\textasciitilde{}/apps/krita} y creamos un +lanzador con el editor de menús. + +Alternativamente también lo tenemos disponible por ppa en +\url{https://launchpad.net/~kritalime/+archive/ubuntu/ppa} + +\subsection{MyPaint}\label{mypaint} + +Desde el \href{https://github.com/mypaint/}{github} tenemos disponible +la última versión en formato \emph{appimage}. La descargamos la dejamos +en \texttt{\textasciitilde{}/apps} y creamos un acceso con +\emph{Menulibre}, como siempre. + +\subsection{Alchemy}\label{alchemy} + +Igual que el \emph{MyPaint} descargamos desde +\href{http://al.chemy.org}{la página web}, descomprimimos en +\texttt{\textasciitilde{}/apps} y creamos un accso con \emph{Menulibre}. + +\subsection{Capturas de pantalla}\label{capturas-de-pantalla} + +El \href{https://flameshot.org}{\emph{flameshot}} cubre el 99\% de mis +necesidades: \texttt{sudo\ apt\ install\ flameshot} instala la última +versión, parece que el desarrollo se detuvo en 2022. + +El \href{https://github.com/DamirPorobic/ksnip}{\emph{ksnip}} por si +tenemos que hacer una captura con retardo, puede instalarse también +bajando el paquete \texttt{.deb} desde la página web. O bien instalando +con apt (la versión estable no ha cambiado desde el 2023, en el momento +de escribir esto) + +Shutter vuelve a estar disponible, al instalar desde este ppa ya queda +con las opciones de edición habilitadas: + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ add{-}apt{-}repository ppa:linuxuprising/shutter} +\FunctionTok{sudo}\NormalTok{ apt update} +\FunctionTok{sudo}\NormalTok{ apt install shutter} +\end{Highlighting} +\end{Shaded} + +\subsection{Reoptimizar imágenes}\label{reoptimizar-imuxe1genes} + +\subsubsection{ImageMagick}\label{imagemagick} + +Instalamos desde los repos, simplemente: + +\begin{verbatim} +sudo apt install imagemagick +\end{verbatim} + +\subsubsection{Imagine}\label{imagine} + +Nos bajamos un \emph{AppImage} desde el +\href{https://github.com/meowtec/Imagine/releases}{github} de la +aplicación + +Tiene toda la pinta de que Imagine no me va con los graficos nvidia (con +el doble monitor) + +\subsection{dia}\label{dia} + +Un programa para crear diagramas + +\begin{verbatim} +sudo apt install dia dia-shapes gsfonts-x11 +\end{verbatim} + +\subsection{Blender}\label{blender} + +Bajamos el Blender linkado estáticamente de +\href{https://www.blender.org}{la página web} y lo descomprimimos en +\texttt{\textasciitilde{}/apps/blender}. + +El paquete incluye un fichero \texttt{blender.desktop} que podemos +editar y copiar en \texttt{\textasciitilde{}/.local/share/applications}. + +\subsection{Structure Synth}\label{structure-synth} + +Instalado desde repos, junto con sunflow para explorar un poco. + +\begin{verbatim} +sudo apt install structure-synth sunflow +\end{verbatim} + +\subsection{Heron animation}\label{heron-animation} + +El proyecto parece abandonado. El software ya no funciona en el último +linux. + +\subsection{Stopmotion}\label{stopmotion} + +Primero probamos el del repo: \texttt{sudo\ apt\ install\ stopmotion} + +\subsection{Instalación del driver digiment para tabletas gráficas +Huion}\label{instalaciuxf3n-del-driver-digiment-para-tabletas-gruxe1ficas-huion} + +Descargamos el fichero \texttt{.deb} de +\href{https://github.com/DIGImend/digimend-kernel-drivers}{la página +web} y funciona perfectamente. + +Para comprobar: + +\begin{verbatim} +xinput --list +dkms status +\end{verbatim} + +La referencia para el antiguo método que usaba para instalar los +drivers: + +\begin{itemize} +\tightlist +\item + \href{https://davidrevoy.com/article331/setup-huion-giano-wh1409-tablet-on-linux-mint-18-1-ubuntu-16-04}{Aquí} +\end{itemize} + +\section{Sonido}\label{sonido} + +\subsection{Spotify}\label{spotify} + +Spotify instalado desde las opciones de Linux Mint via flatpak. + +\subsection{Audacity}\label{audacity} + +Instalamos Audacity desde la página web descargando un \emph{Appimage}. + +Instalamos también el plugin +\href{https://theaudacitytopodcast.com/chriss-dynamic-compressor-plugin-for-audacity/}{Chris's +Dynamic Compressor plugin} + +\subsection{Clementine}\label{clementine} + +La version disponible en los orígenes de software parece al dia: + +\begin{verbatim} +sudo apt install clementine +\end{verbatim} + +\subsection{somafm}\label{somafm} + +Instalamos el cli con: + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ apt install jq mpv} +\BuiltInTok{cd}\NormalTok{ \textasciitilde{}/.local/bin} +\FunctionTok{wget}\NormalTok{ https://raw.githubusercontent.com/rockymadden/somafm{-}cli/master/src/somafm} +\FunctionTok{chmod}\NormalTok{ 744 somafm} + +\ExtensionTok{somafm} \AttributeTok{{-}{-}help} + +\ExtensionTok{somafm}\NormalTok{ ls} +\ExtensionTok{somafm}\NormalTok{ listen defcon }\AttributeTok{{-}{-}quality}\OperatorTok{=}\NormalTok{highest} +\end{Highlighting} +\end{Shaded} + +\section{Video}\label{video} + +\subsection{Shotcut}\label{shotcut} + +Nos bajamos la \emph{AppImage} para Linux desde la +\href{https://www.shotcut.org/}{página web}. + +La dejamos en \texttt{\textasciitilde{}/apps/video/shotcut} y: + +\begin{verbatim} +cd +chmod 744 Shotcutxxxxxx.AppImage +./Shotcutxxxxxx.AppImage +\end{verbatim} + +\subsection{kdenlive}\label{kdenlive} + +Está disponible \href{https://kdenlive.org}{en la web} como ppa o como +\emph{appimage}. Lo he bajado como \emph{appimage} para probarlo. + +\subsection{Openshot}\label{openshot} + +También descargado desde \href{https://www.openshot.org}{su web} como +\emph{appimage}, para probar. Tienen un ppa disponible. + +\subsection{Avidemux}\label{avidemux} + +Descargado \emph{appimage} desde +\href{http://avidemux.sourceforge.net/}{la web} + +\subsection{Handbrake}\label{handbrake} + +Instalado como flatpak desde \href{https://handbrake.fr/}{su web}. + +\subsection{Grabación de screencast}\label{grabaciuxf3n-de-screencast} + +\subsubsection{Vokoscreen, Kazam y +SimpleScreenRecorder}\label{vokoscreen-kazam-y-simplescreenrecorder} + +Instalados desde los repos oficiales: + +\begin{verbatim} +sudo apt update +sudo apt install vokoscreen vokoscreen-ng kazam simplescreenrecorder +\end{verbatim} + +Escoge el que más te guste. + +\subsubsection{OBS}\label{obs} + +Añadimos el repositorio + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ add{-}apt{-}repository ppa:obsproject/obs{-}studio} +\FunctionTok{sudo}\NormalTok{ apt update} +\FunctionTok{sudo}\NormalTok{ apt install obs{-}studio} +\end{Highlighting} +\end{Shaded} + +\subsection{Grabación de podcast}\label{grabaciuxf3n-de-podcast} + +\subsubsection{Mumble}\label{mumble} + +Podemos instalarlo desde flatpak o bajarnos +\href{https://launchpad.net/~mumble/+archive/ubuntu/release/+packages}{el +paquete antiguo} (parece que funciona bien). + +Mumble no está disponible desde el PPA, aunque dejo aquí las +instrucciones por si lo corrigen. + +\begin{verbatim} +sudo add-apt-repository ppa:mumble/release +sudo apt update + sudo apt install mumble +\end{verbatim} + +\subsection{Clientes de youtube}\label{clientes-de-youtube} + +\subsubsection{smtube}\label{smtube} + +Instalado el ppa siguiendo instrucciones de +\href{http://www.smtube.org/}{su página web}. + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ add{-}apt{-}repository ppa:rvm/smplayer} +\FunctionTok{sudo}\NormalTok{ apt{-}get update} +\FunctionTok{sudo}\NormalTok{ apt{-}get install smtube} +\end{Highlighting} +\end{Shaded} + +\subsubsection{Freetube}\label{freetube} + +Descargado el \texttt{.deb} desde +\href{https://freetubeapp.io/\#download}{su página web}. + +\section{Fotografía}\label{fotografuxeda} + +\subsection{Rawtherapee}\label{rawtherapee} + +Bajamos el AppImage desde la \href{http://rawtherapee.com/}{página web} +al directorio \texttt{\textasciitilde{}/apps/image/rawtherapee}. + +Como siempre: + +\begin{enumerate} +\tightlist +\item + Hacemos el fichero ejecutable +\item + Creamos un enlace \texttt{current} +\item + Creamos un fichero \texttt{.desktop} +\end{enumerate} + +\subsection{Darktable}\label{darktable} + +Instalamos ppa (ver +\href{https://software.opensuse.org/download/package?package=darktable&project=graphics\%3Adarktable}{esta +web}) + +\begin{verbatim} +echo 'deb [signed-by=/usr/share/keyrings/darktable-archive-keyring.gpg] http://download.opensuse.org/repositories/graphics:/darktable/xUbuntu_22.04/ /' | sudo tee /etc/apt/sources.list.d/graphics:darktable.list +curl -fsSL https://download.opensuse.org/repositories/graphics:darktable/xUbuntu_22.04/Release.key | gpg --dearmor | sudo tee /usr/share/keyrings/darktable-archive-keyring.gpg > /dev/null +sudo apt update +sudo apt install darktable +\end{verbatim} + +Se instala la última versión de Darktable (4.2.0) + +\subsection{Digikam}\label{digikam} + +Instalado desde la \href{https://www.digikam.org/}{página web} de la +aplicación con appimage. + +\subsection{Webcamoid}\label{webcamoid} + +Descargada la appimage desde la +\href{https://webcamoid.github.io/}{página web} + +\section{Seguridad}\label{seguridad} + +\subsection{Autenticación en servidores por clave +pública}\label{autenticaciuxf3n-en-servidores-por-clave-puxfablica} + +Generar contraseñas para conexión servidores remotos: + +\begin{verbatim} +cd ~ +ssh-keygen -b 4096 [-t dsa | ecdsa | ed25519 | rsa | rsa1] +cat .ssh/ +\end{verbatim} + +Solo resta añadir nuestra clave pública en el fichero +\texttt{authorized\_keys} del servidor remoto. + +\begin{verbatim} +cat ~/.ssh/id_xxx.pub | ssh user@hostname 'cat >> .ssh/authorized_keys' +\end{verbatim} + +\href{https://www.digitalocean.com/community/tutorials/understanding-the-ssh-encryption-and-connection-process}{¿Cómo +funciona esto?} + +\subsection{Claves gpg}\label{claves-gpg} + +\texttt{gpg\ -\/-gen-key} Para generar nuestra clave. + +\begin{itemize} +\tightlist +\item + \textbf{Siempre} hay que ponerle una fecha de expiración, la puedes + cambiar más tarde. +\item + \textbf{Siempre} hay que escoger la máxima longitud posible +\end{itemize} + +\subsection{Seahorse}\label{seahorse} + +Para manejar todas nuestras claves con comodidad: + +\texttt{sudo\ apt\ install\ seahorse} + +\subsection{Conexión a github con claves +ssh}\label{conexiuxf3n-a-github-con-claves-ssh} + +Usando este método podemos conectarnos a github sin tener que teclear la +contraseña en cada conexión. + +\subsubsection{Claves ssh}\label{claves-ssh} + +Podemos echar un ojo a nuestras claves desde \texttt{seahorse} la +aplicación de gestión de claves que hemos instalado. También podemos ver +las claves que tenemos generadas: + +\begin{verbatim} +ls -al ~/.ssh +\end{verbatim} + +En las claves listadas nuestras claves públicas aparecerán con extensión +\texttt{.pub} + +También podemos comprobar que claves hemos añadido ya a nuestro agente +ssh con: + +\begin{verbatim} +ssh-add -l +\end{verbatim} + +Para generar una nueva pareja de claves ssh: + +\begin{verbatim} +ssh-keygen -t rsa -b 4096 -C "your_email@example.com" +\end{verbatim} + +Podremos dar un nombre distintivo a los ficheros de claves generados y +poner una contraseña adecuada a la clave. Si algún dia queremos cambiar +la contraseña: + +\begin{verbatim} +ssh-keygen -p +\end{verbatim} + +Ahora tenemos que añadir nuestra clave ssh en nuestra cuenta de github, +para ello editamos con nuestro editor de texto favorito el fichero +\texttt{\textasciitilde{}/.ssh/id\_rsa.pub} y copiamos el contenido +integro. Después pegamos ese contenido en el cuadro de texto de la web +de github. + +Para comprobar que las claves instaladas en github funcionan +correctamente: + +\begin{verbatim} +ssh -T git@github.com +Hi salvari! You've successfully authenticated, but GitHub does not provide shell access. +\end{verbatim} + +Este mensaje indica que todo ha ido bien. + +Ahora en los repos donde queramos usar ssh debemos cambiar el remote: + +\begin{verbatim} +git remote set-url origin git@github.com:$USER/$REPONAME.git +\end{verbatim} + +\subsection{Signal}\label{signal} + +El procedimiento recomendado en la página oficial lo modifico para dejar +las claves GPG en \texttt{/usr/local/keyrings} + +\begin{Shaded} +\begin{Highlighting}[] +\CommentTok{\# 1. Install our official public software signing key} +\FunctionTok{wget} \AttributeTok{{-}O{-}}\NormalTok{ https://updates.signal.org/desktop/apt/keys.asc }\KeywordTok{|} \ExtensionTok{gpg} \AttributeTok{{-}{-}dearmor} \OperatorTok{\textgreater{}}\NormalTok{ signal{-}desktop{-}keyring.gpg} +\FunctionTok{cat}\NormalTok{ signal{-}desktop{-}keyring.gpg }\KeywordTok{|} \FunctionTok{sudo}\NormalTok{ tee }\AttributeTok{{-}a}\NormalTok{ /usr/local/share/keyrings/signal{-}desktop{-}keyring.gpg }\OperatorTok{\textgreater{}}\NormalTok{ /dev/null} + +\CommentTok{\# 2. Add our repository to your list of repositories} +\BuiltInTok{echo} \StringTok{\textquotesingle{}deb [arch=amd64 signed{-}by=/usr/local/share/keyrings/signal{-}desktop{-}keyring.gpg] https://updates.signal.org/desktop/apt xenial main\textquotesingle{}} \KeywordTok{|}\DataTypeTok{\textbackslash{}} + \FunctionTok{sudo}\NormalTok{ tee }\AttributeTok{{-}a}\NormalTok{ /etc/apt/sources.list.d/signal{-}xenial.list} + +\CommentTok{\# 3. Update your package database and install signal} +\FunctionTok{sudo}\NormalTok{ apt update }\KeywordTok{\&\&} \FunctionTok{sudo}\NormalTok{ apt install signal{-}desktop} +\end{Highlighting} +\end{Shaded} + +Parece que todo funciona correctamente pero necesité un reinicio del +ordenador para que Signal arrancase correctamente. + +\subsection{Element (cliente de +matrix.org)}\label{element-cliente-de-matrix.org} + +Instalamos con: + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ apt install }\AttributeTok{{-}y}\NormalTok{ wget apt{-}transport{-}https} + +\FunctionTok{sudo}\NormalTok{ wget }\AttributeTok{{-}O}\NormalTok{ /usr/share/keyrings/element{-}io{-}archive{-}keyring.gpg }\DataTypeTok{\textbackslash{}} +\NormalTok{https://packages.element.io/debian/element{-}io{-}archive{-}keyring.gpg} + +\BuiltInTok{echo} \StringTok{"deb [signed{-}by=/usr/share/keyrings/element{-}io{-}archive{-}keyring.gpg] }\DataTypeTok{\textbackslash{}} +\StringTok{https://packages.element.io/debian/ default main"} \DataTypeTok{\textbackslash{}} +\KeywordTok{|} \FunctionTok{sudo}\NormalTok{ tee /etc/apt/sources.list.d/element{-}io.list} + +\FunctionTok{sudo}\NormalTok{ apt update} + +\FunctionTok{sudo}\NormalTok{ apt install element{-}desktop} +\end{Highlighting} +\end{Shaded} + +\subsection{Lector DNI electrónico}\label{lector-dni-electruxf3nico} + +Descargamos la aplicación en formato \texttt{.deb} desde +\href{https://www.dnielectronico.es/PortalDNIe/PRF1_Cons02.action?pag=REF_1112}{la +página de descargas del portal DNIe}. + +Automáticamente nos instalará las dependecias: \texttt{libccid}, +\texttt{pcsd} y \texttt{pinentry-gtk2}. A mayores instalamos: + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ apt{-}get install pcsc{-}tools opensc} +\end{Highlighting} +\end{Shaded} + +El opensc no es necesario para el DNIe, pero nos permite usar otras +tarjetas. + +Como root ejecutamos pcsc\_scan: + +\begin{verbatim} +root@rasalhague:~# pcsc_scan +PC/SC device scanner +V 1.4.23 (c) 2001-2011, Ludovic Rousseau +Compiled with PC/SC lite version: 1.8.11 +Using reader plug'n play mechanism +Scanning present readers... +Waiting for the first reader... +\end{verbatim} + +Si insertamos el lector veremos algo como esto: + +\begin{verbatim} +root@rasalhague:~# pcsc_scan +PC/SC device scanner +V 1.4.23 (c) 2001-2011, Ludovic Rousseau +Compiled with PC/SC lite version: 1.8.11 +Using reader plug'n play mechanism +Scanning present readers... +Waiting for the first reader...found one +Scanning present readers... +0: C3PO LTC31 v2 (11061005) 00 00 + +Wed Jan 25 01:17:20 2017 +Reader 0: C3PO LTC31 v2 (11061005) 00 00 + Card state: Card removed, +\end{verbatim} + +Si insertamos un DNI veremos que se lee la información de la tarjeta +insertada: + +\begin{verbatim} +Reader 0: C3PO LTC31 v2 (11061005) 00 00 + Card state: Card inserted, +\end{verbatim} + +y mas rollo + +Para abrir los certificados en el navegador Firefox, nos lo explica +\href{https://www.agenciatributaria.es/AEAT.internet/Inicio/Ayuda/_comp_Consultas_informaticas/Categorias/Firma_digital__certificado_o_DNIe__y_sistema_Cl_ve_PIN/DNI_electronico__DNIe_/Comprobaciones_tecnicas_para_el_funcionamiento_del_DNIe/Comprobaciones_tecnicas_del_DNIe_con_Mozilla_Firefox_y_Linux/Comprobaciones_tecnicas_del_DNIe_con_Mozilla_Firefox_y_Linux.shtml}{esta +página de la AEAT} + +Como se puede ver el link de la AEAT, los pasos necesarios para Firefox +son: + +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\tightlist +\item + Vamos a preferencias y buscamos `cert' +\item + En el diálogo de certificados abrimos los + \texttt{Dispositivos\ de\ Seguridad} (\emph{Security Devices}) +\item + Para dar de alta un nuevo dispositivo pulsamos el botón + \texttt{Cargar} (\emph{Load}) +\item + Damos un nombre (p.ej. \texttt{DNIe}) y asociamos el driver: + \texttt{/usr/lib/libpkcs11-dnie.so} +\item + Adicionalmente podemos \texttt{Cargar} (crear), otro dispositivo con + el driver \texttt{opensc}, no es necesario para el DNIe pero nos añade + soporte para otras tarjetas. (Nombre: OtrasTarjetas, Driver: + `/usr/lib/x86\_64-linux-gnu/pkcs11/opensc-pkcs11.so) +\end{enumerate} + +\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center} + +\textbf{NOTA}: + +Para cada tarjeta puede hacer falta un driver diferente, tendrás que +investigar con ayuda del \texttt{pcsc\_scan} y herramientas similares. + +\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center} + +\subsection{Instalación de +wireguard.}\label{instalaciuxf3n-de-wireguard.} + +Instalamos con: + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ apt install wireguard} +\end{Highlighting} +\end{Shaded} + +\section{Virtualizaciones y +contenedores}\label{virtualizaciones-y-contenedores} + +\subsection{\texorpdfstring{Instalación de +\emph{virtualBox}}{Instalación de virtualBox}}\label{instalaciuxf3n-de-virtualbox} + +Instalamos desde los repos de Ubuntu + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ apt install virtualbox virtualbox{-}ext{-}pack virtualbox{-}guest{-}additions{-}iso virtualbox{-}guest{-}x11} +\end{Highlighting} +\end{Shaded} + +\subsection{Docker}\label{docker} + +Tenemos que añadir el repositorio correspondiente a nuestra +distribución: + +\begin{verbatim} +# Be safe +sudo apt remove docker docker-engine docker.io +sudo apt autoremove +sudo apt update + +# Install pre-requisites +sudo apt install ca-certificates curl gnupg lsb-release + +# Import the GPG key + sudo mkdir -m 0755 -p /usr/local/share/keyrings + curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/local/share/keyrings/docker.gpg + +# Add the repo for Docker + +echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/usr/local/share/keyrings/docker.gpg] https://download.docker.com/linux/debian \ + $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + +# Update the package database + +sudo apt update +# + +apt-cache policy docker-ce + +sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin + +sudo gpasswd -a username docker +\end{verbatim} + +Esto dejará el servicio \emph{docker} funcionando y habilitado +(arrancará en cada reinicio del ordenador) + +La forma de pararlo es: + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ systemctl stop docker} +\FunctionTok{sudo}\NormalTok{ systemctl disable docker} +\ExtensionTok{systemctl}\NormalTok{ status docker} +\end{Highlighting} +\end{Shaded} + +Añadimos el \emph{bundle} \textbf{docker} en nuestro fichero +\texttt{\textasciitilde{}/.zshrc} para tener autocompletado en comandos +de docker. + +Para usar \emph{docker} tendremos que arrancarlo, con los alias de +nuestro sistema para \emph{systemd} ejecutamos: + +\begin{Shaded} +\begin{Highlighting}[] +\ExtensionTok{scst}\NormalTok{ docker }\CommentTok{\# para arrancar el servicio} + +\ExtensionTok{scsp}\NormalTok{ docker }\CommentTok{\# para parar el servicio} +\end{Highlighting} +\end{Shaded} + +\section{Utilidades para mapas y +cartografía}\label{utilidades-para-mapas-y-cartografuxeda} + +\subsection{josm}\label{josm} + +Descargamos y añadimos la clave gpg: + +\begin{verbatim} +wget -q https://josm.openstreetmap.de/josm-apt.key -O- | sudo apt-key add - +\end{verbatim} + +Añadimos el origen de software: + +\begin{verbatim} +sudo add-apt-repository "deb [arch=amd64] https://josm.openstreetmap.de/apt $(. /etc/os-release; echo "$UBUNTU_CODENAME") universe" +\end{verbatim} + +Y ahora procedemos a la instalación: + +\begin{verbatim} +sudo apt update +sudo apt install openjfx josm +\end{verbatim} + +Alternativamente también podemos instalar la versión ``nightly'' con el +siguiente comando, pero tendréis actualizaciones diarias: + +\begin{verbatim} +sudo apt josm-latest +\end{verbatim} + +Ya estamos listos para editar Open Street Map offline. + +\subsection{MOBAC}\label{mobac} + +Bajamos el paquete desde \href{http://mobac.sourceforge.net/}{la página +web} y descomprimimos en \texttt{\textasciitilde{}/apps/mobac} como de +costumbre nos creamos una entrada de menú con \emph{MenuLibre}. + +Conviene bajarse wms adicionales para MOBAC y leerse +\href{http://mobac.sourceforge.net/wiki/index.php/Custom_XML_Map_Sources}{la +wiki} + +\subsubsection{Referencias}\label{referencias-1} + +*{[}Cartografía digital{]} +(https://digimapas.blogspot.com.es/2015/01/oruxmaps-vii-mapas-de-mobac.html) + +\subsection{QGIS}\label{qgis} + +Añadimos la clave gpg: + +\begin{verbatim} +wget -q https://qgis.org/downloads/qgis-2019.gpg.key -O- | sudo apt-key add - +\end{verbatim} + +Ejecutamos: + +\begin{verbatim} +sudo add-apt-repository "deb [arch=amd64] https://qgis.org/debian $(. /etc/os-release; echo "$UBUNTU_CODENAME") main" +\end{verbatim} + +E instalamos como siempre + +\begin{verbatim} +sudo apt update +sudo apt install qgis +\end{verbatim} + +\subsubsection{Referencias}\label{referencias-2} + +\begin{itemize} +\tightlist +\item + \href{https://mappinggis.com/2015/09/como-conectar-con-servicios-wms-y-wfs-con-arcgis-qgis-y-gvsig/}{Conectar + WMS con QGIS} +\item + \href{https://www.altergeosistemas.com/blog/2014/03/28/importando-datos-de-osm-en-qgis-2/}{Importar + OSM en QGIS} +\item + \href{http://learnosm.org/es/osm-data/osm-in-qgis/}{Learn OSM} +\item + \href{http://www.qgistutorials.com/es/docs/downloading_osm_data.html}{QGIS + Tutorials} +\end{itemize} + +\section{Recetas variadas}\label{recetas-variadas} + +\subsection{Añadir las claves GPG de un +repo}\label{auxf1adir-las-claves-gpg-de-un-repo} + +\textbf{Este método está obsoleto y no se recomienda} + +\begin{verbatim} +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F7E06F06199EF2F2 +\end{verbatim} + +Hasta ahora añadíamos las claves usando el programa \texttt{apt-key} +como se describe arriba. El programa añade las claves en el ``llavero'' +\texttt{/etc/apt/trusted.gpg}. El gestor de paquetes \texttt{apt} confía +ciegamente en las claves de este llavero. Eso permite que cualquier +clave presente en el ``llavero'' sirva para instalar cualquier programa. +No hay una relación unívoca entre claves y programas. + +Para evitar el \emph{warning} podríamos almacenar las claves en +\texttt{/etc/apt/trusted.d}, cada clave en si fichero separado. Pero eso +dejaría el verdadero problema de establecer una relación entre clave y +repo sin solucionar. + +Si seguimos las recomendaciones de \textbf{\emph{Debian}}, deberíamos +tener un directorio solo accesible por \texttt{root}. Por ejemplo +\texttt{/usr/local/share/keyring} y deberíamos almacenar las claves con +nombres de la forma: +\texttt{\textless{}keyword\textgreater{}-archive-keyring.gpg}. + +Una vez que tengamos la clave disponible debemos especificar para cada +origen de software que clave le aplica para la autenticación de +paquetes. + +\textbf{En resumen}: + +\begin{itemize} +\tightlist +\item + Las claves gpg de los repo se quedarán almacenadas en + \texttt{/usr/local/share/keyring}, estarán en formato \emph{dearmored} + y con los nombres en la forma canónica + \texttt{\textless{}keyword\textgreater{}-archive-keyring.gpg} +\item + Las especificaciones de los orígenes de software harán referencia + explícita a la clave que hay que usar para comprobarlas, es decir, + tendrán la forma: + \texttt{deb\ {[}signed-by=/usr/share/keyrings/\textless{}myrepository\textgreater{}-archive-keyring.gpg{]}\ \textless{}https://repository.example.com/debian/\ stable\ main\textgreater{}} +\end{itemize} + +\subsubsection{\texorpdfstring{Si la clave ya estaba en +\texttt{trusted.gpg}}{Si la clave ya estaba en trusted.gpg}}\label{si-la-clave-ya-estaba-en-trusted.gpg} + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ apt{-}key list} + +\CommentTok{\# Obtendremos un lista de claves e identificamos la conflictiva:} +\CommentTok{\#} +\CommentTok{\# pub rsa1024 2009{-}01{-}22 [SC]} +\CommentTok{\# E1DD 2702 88B4 E603 0699 E45F A171 5D88 E1DF 1F24} +\CommentTok{\# uid [ unknown] Launchpad PPA for Ubuntu Git Maintainers} +\CommentTok{\#} + + +\CommentTok{\# Exportamos la clave al "llavero":} +\FunctionTok{sudo}\NormalTok{ apt{-}key export E1DF1F24 }\KeywordTok{|}\FunctionTok{sudo}\NormalTok{ gpg }\AttributeTok{{-}{-}dearmour} \AttributeTok{{-}o}\NormalTok{ /usr/local/share/gitMaintainers{-}archive{-}keyring.gpg} + +\CommentTok{\# Editamos el fichero de orígenes del sw y probamos a actualizar} +\FunctionTok{sudo}\NormalTok{ apt update} + +\CommentTok{\# si todo va bien podemos borrar la clave del trusted.gpg} +\FunctionTok{sudo}\NormalTok{ apt{-}key del E1DF1F24} +\end{Highlighting} +\end{Shaded} + +\subsubsection{Descargando una clave con +wget}\label{descargando-una-clave-con-wget} + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{wget} \AttributeTok{{-}O{-}} \OperatorTok{\textless{}}\NormalTok{https://example.com/key/repo{-}key.gpg}\OperatorTok{\textgreater{}} \KeywordTok{|} \DataTypeTok{\textbackslash{}} +\ExtensionTok{gpg} \AttributeTok{{-}{-}dearmor} \AttributeTok{{-}o}\NormalTok{ /usr/local/share/keyrings/}\OperatorTok{\textless{}}\NormalTok{myrepository}\OperatorTok{\textgreater{}}\NormalTok{{-}archive{-}keyring.gpg} +\end{Highlighting} +\end{Shaded} + +\subsubsection{Importando claves directamente de un +keyserver}\label{importando-claves-directamente-de-un-keyserver} + +** REVISAR, ESTO FALLA ** + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ gpg }\AttributeTok{{-}{-}no{-}default{-}keyring} \AttributeTok{{-}{-}keyring}\NormalTok{ /usr/local/share/keyrings/}\OperatorTok{\textless{}}\NormalTok{myrepository}\OperatorTok{\textgreater{}}\NormalTok{{-}archive{-}keyring.gpg }\DataTypeTok{\textbackslash{}} +\NormalTok{{-}{-}keyserver }\OperatorTok{\textless{}}\NormalTok{hkp://keyserver.ubuntu.com:80}\OperatorTok{\textgreater{}}\NormalTok{ {-}{-}recv{-}keys }\OperatorTok{\textless{}}\NormalTok{fingerprint}\OperatorTok{\textgreater{}} +\end{Highlighting} +\end{Shaded} + +\subsection{Solucionar problemas de menús duplicados usando +menulibre}\label{solucionar-problemas-de-menuxfas-duplicados-usando-menulibre} + +\begin{longtable}[]{@{}l@{}} +\toprule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\textbf{Nota}: Ya no uso \emph{MenuLibre} \\ +\end{longtable} + +En el directorio +\texttt{\textasciitilde{}/.config/menus/applications-merged} borramos +todos los ficheros que haya. + +\subsection{Mapear un servidor webdav en nuestro sistema de +ficheros}\label{mapear-un-servidor-webdav-en-nuestro-sistema-de-ficheros} + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ apt install davfs2} + +\FunctionTok{sudo}\NormalTok{ mount }\AttributeTok{{-}t}\NormalTok{ davfs }\OperatorTok{\textless{}}\NormalTok{server{-}url + path}\OperatorTok{\textgreater{}} \OperatorTok{\textless{}}\NormalTok{mount point}\OperatorTok{\textgreater{}}\NormalTok{ {-}o uid=}\OperatorTok{\textless{}}\NormalTok{user login}\OperatorTok{\textgreater{}} +\end{Highlighting} +\end{Shaded} + +Si en algún momento queremos reconfigurar el paquete podemos ejecutar +\texttt{dpkg-reconfigure\ davfs2} + +Finalmente para mi usuario: + +\begin{Shaded} +\begin{Highlighting}[] +\CommentTok{\# añadimos el usuario al grupo davfs2} +\FunctionTok{sudo}\NormalTok{ gpasswd }\AttributeTok{{-}a} \OperatorTok{\textless{}}\NormalTok{userlogin}\OperatorTok{\textgreater{}}\NormalTok{ davfs2} +\end{Highlighting} +\end{Shaded} + +Añadimos al fichero \texttt{/etc/fstab} la linea del servidor webdav: + +\begin{Shaded} +\begin{Highlighting}[] +\OperatorTok{\textless{}}\NormalTok{server{-}url }\ExtensionTok{+}\NormalTok{ path}\OperatorTok{\textgreater{}} \OperatorTok{\textless{}}\NormalTok{mount point}\OperatorTok{\textgreater{}}\NormalTok{ davfs rw,user,uid=salvari,noauto 0 0} +\end{Highlighting} +\end{Shaded} + +Añadimos las credenciales al fichero +\texttt{\textasciitilde{}/.davfs2/secrets} que sería una linea con +\texttt{\textless{}mount\ point\textgreater{}\ \ \textless{}webdav-user\textgreater{}\ \textless{}webdav-passwd\textgreater{}} + +Con eso ya podremos montar el webdav con nuestro usuario sin mas que +ejecutar \texttt{mount\ \textless{}mount\ point\textgreater{}} + +\subsection{\texorpdfstring{Solucionar el problema de ``paquetes +mantenidos'' (\emph{The following packages have been kept +back})}{Solucionar el problema de ``paquetes mantenidos'' (The following packages have been kept back)}}\label{solucionar-el-problema-de-paquetes-mantenidos-the-following-packages-have-been-kept-back} + +Cuando hacemos \texttt{sudo\ apt\ upgrade} si alguno de los paquetes que +se va a actualizar tiene \textbf{nuevas dependencias} no se actualizará +y nos dará el error del título. La solución pasa por ejecutar: + +\texttt{sudo\ apt\ install\ -\/-only-upgrade\ \textless{}paquete\textgreater{}} + +\subsection{Formatear memoria usb}\label{formatear-memoria-usb} + +``The driver descriptor says the physical block size is 2048 bytes, but +Linux says it is 512 bytes.'' + +Este comando borró todas las particiones de la memoria: + +\texttt{sudo\ dd\ if=/dev/zero\ of=/dev/sdd\ bs=2048\ count=32\ \&\&\ sync} + +I'm assuming your using gparted. + +First delete whatever partitions you can\ldots just keep pressing +ignore. + +There will be one with a black outline\ldots you will have to unmount +it\ldots just right click on it and unmount. + +Again you will have to click your way through ignore..if fix is an +option choose it also. + +Once all this is done\ldots{} you can select the device menu and choose +new partition table. + +Select MSdos + +Apply and choose ignore again. + +Once it's done it show it's real size. + +Next you can format the drive to whichever file system you like. + +It's a pain in the behind this way, but it's the only way I get it +done..I put live iso's on sticks all the time and have to remove them. I +get stuck going through this process every time. + +\subsection{Copiar la clave pública ssh en un servidor +remoto}\label{copiar-la-clave-puxfablica-ssh-en-un-servidor-remoto} + +\texttt{cat\ /home/tim/.ssh/id\_rsa.pub\ \textbar{}\ ssh\ tim@just.some.other.server\ \textquotesingle{}cat\ \textgreater{}\textgreater{}\ .ssh/authorized\_keys\textquotesingle{}} + +O también: + +\texttt{ssh-copy-id\ -i\ \textasciitilde{}/.ssh/id\_rsa.pub\ username@remote.server} + +\subsection{ssh access from termux}\label{ssh-access-from-termux} + +\url{https://linuxconfig.org/ssh-into-linux-your-computer-from-android-with-termux} + +\subsection{SDR instalaciones varias}\label{sdr-instalaciones-varias} + +Vamos a trastear con un dispositivo +\href{https://www.rtl-sdr.com/}{RTL-SDR.com}. + +Tenemos un montón de información en el blog de +\href{https://sdrgal.wordpress.com/}{SDR Galicia} y tienen incluso una +guia de instalación muy completa, pero yo voy a seguir una guía un poco +menos ambiciosa, por lo menos hasta que pueda hacer el curso que +imparten ellos mismos (SDR Galicia) + +La guía en cuestión la podemos encontrar +\href{https://ranous.wordpress.com/rtl-sdr4linux/}{aquí} + +Seguimos los pasos de instalación: + +\begin{itemize} +\tightlist +\item + La instalación de \texttt{git}, \texttt{cmake} y + \texttt{build-essential} ya la tengo hecha. +\end{itemize} + +\begin{verbatim} +sudo apt-get install libusb-1.0-0-dev +\end{verbatim} + +\subsection{Posible problema con modemmanager y micros +programables}\label{posible-problema-con-modemmanager-y-micros-programables} + +Programando el \emph{Circuit Playground Express} con el \emph{Arduino +IDE} tenía problemas continuos para hacer los \emph{uploads}, al parecer +el servicio \emph{ModemManager} es el culpable, se pasa todo el tiempo +capturando los nuevos puertos serie por que considera que todo es un +modem. + +Una prueba rápida para comprobarlo: +\texttt{sudo\ systemctl\ stop\ ModemManager} + +Con esto funciona todo bien, pero en el siguiente arranque volvera a +cargarse. + +Para dar una solución definitiva se puede programar una regla para +impedir que el \emph{ModemManager} capture el puerto con un dispositivo + +Creamos un fichero con permisos de \texttt{root} en el directorio +\texttt{/etc/udev/rules.d} que llamaremos: \texttt{99-arduino.rules} + +Dentro de ese fichero especificamos los codigos VID/PID que se deben +ignorar: + +\begin{verbatim} +# for arduino brand, stop ModemManager grabbing port +ATTRS{idVendor}=="2a03", ENV{ID_MM_DEVICE_IGNORE}="1" +# for sparkfun brand, stop ModemManager grabbing port +ATTRS{idVendor}=="1b4f", ENV{ID_MM_DEVICE_IGNORE}="1" +\end{verbatim} + +Ojo que si tienes SystemV no va a funcionar. + +https://starter-kit.nettigo.eu/2015/serial-port-busy-for-avrdude-on-ubuntu-with-arduino-leonardo-eth/ + +https://www.codeproject.com/Tips/349002/Select-a-USB-Serial-Device-via-its-VID-PID + +\subsection{Programar los nanos con chip ch340 o +ch341}\label{programar-los-nanos-con-chip-ch340-o-ch341} + +Linux mapea el chip correctamente en un puerto \texttt{/dev/ttyUSB0} y +con eso basta, que no te lien con el cuento de ``drivers para linux'' + +Todo lo que hace falta es configurar correctamente el \emph{Arduino +IDE}, hay que escoger: + +\begin{verbatim} +Board: "Arduino Nano" +Processor: "ATmega168" +Port: "/dev/ttyUSB0" +\end{verbatim} + +Y ya funciona todo. + +\subsection{\texorpdfstring{Linux Mint 20 es \emph{python +agnostic}}{Linux Mint 20 es python agnostic}}\label{linux-mint-20-es-python-agnostic} + +En principio no podemos invocar a \texttt{python} por que no se ha +escogido una versión por defecto. + +Tenemos dos opciones: + +\begin{Shaded} +\begin{Highlighting}[] +\ExtensionTok{apt}\NormalTok{ install python{-}is{-}python2} +\ExtensionTok{apt}\NormalTok{ install python{-}is{-}python3} +\end{Highlighting} +\end{Shaded} + +\subsection{Instalar chromium sin +snapdrop}\label{instalar-chromium-sin-snapdrop} + +Este rodeo ya no es necesario en las versiones modernas de Linux Mint + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{sudo}\NormalTok{ apt install keepassxc gnucash deluge rsync grsync rar unrar }\DataTypeTok{\textbackslash{}} +\NormalTok{zip unzip unace bzip2 lzop p7zip p7zip{-}full p7zip{-}rar }\DataTypeTok{\textbackslash{}} +\NormalTok{most mc tree neofetch fasd silversearcher{-}ag ack mate{-}tweak filezilla }\DataTypeTok{\textbackslash{}} +\NormalTok{rofi} +\end{Highlighting} +\end{Shaded} + +\subsection{Especificar como debe abrir los enlaces ``magnet'' el +navegador +mozilla}\label{especificar-como-debe-abrir-los-enlaces-magnet-el-navegador-mozilla} + +\begin{itemize} +\tightlist +\item + Vamos al url \texttt{about:config} +\item + Añadimos la opción \texttt{network.protocol-handler.external.magnet} + con valor \texttt{True} +\item + En \emph{Settings} buscamos \emph{Applications} y nos aseguramos de + que no tenga marcado por defecto \emph{Save} sino \emph{Ask} +\item + La próxima vez que queramos descargar un enlace magnet nos preguntará + que aplicación queremos usar. +\end{itemize} + +\end{document} diff --git a/src/500_graph.md b/src/500_graph.md index cb36caf..6fd3fc3 100644 --- a/src/500_graph.md +++ b/src/500_graph.md @@ -101,9 +101,9 @@ accso con _Menulibre_. ## Capturas de pantalla -El [_flameshot_](https://flameshot.org) cubre el 99% de mis necesidades: `sudo apt install flameshot` funciona bien pero podemos instalar la última version descargando el paquete `.deb` desde la página web. +El [_flameshot_](https://flameshot.org) cubre el 99% de mis necesidades: `sudo apt install flameshot` instala la última versión, parece que el desarrollo se detuvo en 2022. -El [_ksnip_](https://github.com/DamirPorobic/ksnip) por si tenemos que hacer una captura con retardo, puede instalarse también bajando el paquete `.deb` desde la página web. +El [_ksnip_](https://github.com/DamirPorobic/ksnip) por si tenemos que hacer una captura con retardo, puede instalarse también bajando el paquete `.deb` desde la página web. O bien instalando con apt (la versión estable no ha cambiado desde el 2023, en el momento de escribir esto) Shutter vuelve a estar disponible, al instalar desde este ppa ya queda con las opciones de edición habilitadas: