From 9360af570cd0e704ed61f42668fadc145cdfb701 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Alvari=C3=B1o?= Date: Sat, 29 Aug 2020 11:52:05 +0200 Subject: [PATCH] Adds some minor changes in makefile --- README.md | 1155 ++++++++++++++++++++------------------ makefile | 30 +- out/LinuxMintUlyana.dw | 1 + out/LinuxMintUlyana.epub | Bin 79090 -> 79148 bytes out/LinuxMintUlyana.mw | 21 +- out/LinuxMintUlyana.odt | Bin 75156 -> 75174 bytes out/LinuxMintUlyana.pdf | Bin 229734 -> 229823 bytes out/LinuxMintUlyana.tex | 4 + src/100_intro.md | 4 +- src/200_basics.md | 20 +- src/850_recipes.md | 2 + 11 files changed, 652 insertions(+), 585 deletions(-) diff --git a/README.md b/README.md index 64339dd..72a80b1 100644 --- a/README.md +++ b/README.md @@ -1,55 +1,59 @@ -# Introducción +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 - +- 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 +- Un Lenovo Legion + + - Core i7-9750H -# Programas básicos + - Nvidia GTX1650-4Gb (+ intel integrada) -## Linux Mint + - 16Gb RAM + + - 512Gb SSD + 1Tb HDD + +Programas básicos +================= + +Linux Mint +---------- Linux Mint incluye `sudo` y las aplicaciones que uso habitualmente para gestión de paquetes por defecto (*aptitude* y *synaptic*). -Interesa tener instalado el paquete *ppa-purge* (`sudo apt install -ppa-purge`). Sirve para eliminar ppas junto con los programas instalados -desde ese ppa. +Interesa tener instalado el paquete *ppa-purge* +(`sudo apt install ppa-purge`). Sirve para eliminar ppas junto con los +programas instalados desde ese ppa. Tampoco voy a enredar nada con los orígenes del software (de momento), es decir no voy a cambiar al depósito regional. -## Firmware +Firmware +-------- Ya no es necesario intalar los paquetes de *microcode* la instalación de Ulyana se encargó de instalar: - - `amd64-microcode` - - `intel-microcode` +- `amd64-microcode` +- `intel-microcode` Instalamos el driver de nvidia recomendado, el *Mint* nos avisa de que tenemos que revisar la instalación de los drivers. @@ -57,11 +61,12 @@ tenemos que revisar la instalación de los drivers. El driver de Nvidia viene muy mejorado. Merece la pena ver todas las opciones. -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]` +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]` -## Control de configuraciones con git +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 @@ -73,7 +78,7 @@ controlados los cambios de configuración y ayuda en caso de problemas. ### Instalación de `etckeeper` -¡Ojo\!, nos hacemos `root` para ejecutar: +¡Ojo!, nos hacemos `root` para ejecutar: sudo su - git config --global user.email xxxxx@whatever.com @@ -120,7 +125,8 @@ 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. -## Parámetros de disco duro +Parámetros de disco duro +------------------------ Tengo un disco duro ssd y otro hdd normal. @@ -169,15 +175,16 @@ 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** +- `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 [esto](https://easylinuxtipsproject.blogspot.com/p/speed-mint.html) -## Fuentes (tipográficas) adicionales +Fuentes (tipográficas) adicionales +---------------------------------- Instalamos algunas fuentes desde los orígenes de software: @@ -187,7 +194,8 @@ Instalamos algunas fuentes desde los orígenes de software: Y la fuente [Mensch](https://robey.lag.net/2010/06/21/mensch-font.html) la bajamos directamente al directorio `~/.local/share/fonts` -## Firewall +Firewall +-------- `ufw` y `gufw` vienen instalados por defecto, pero no activados. @@ -197,80 +205,81 @@ la bajamos directamente al directorio `~/.local/share/fonts` ufw status verbose aptitude install gufw ------ +------------------------------------------------------------------------ > **Nota**: Ojo con el log de `ufw`, tampoco le sienta muy bien al ssd > esa escritura masiva. Yo normalmente lo dejo desactivado excepto > cuando valido una nueva configuración. ------ +------------------------------------------------------------------------ -## Aplicaciones variadas +Aplicaciones variadas +--------------------- > **Nota**: Ya no instalamos *menulibre*, Linux Mint tiene una utilidad > de edición de menús. - - Keepass2 - Para mantener nuestras contraseñas a buen recaudo +Keepass2 +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. +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) +Deluge +Programa de descarga de torrents (acuérdate de configurar tus +cortafuegos) - - rsync, grsync - Para hacer backups de nuestros ficheros +rsync, grsync +Para hacer backups de nuestros ficheros - - Descompresores variados - Para lidiar con los distintos formatos de ficheros comprimidos +Descompresores variados +Para lidiar con los distintos formatos de ficheros comprimidos - - mc - Midnight Comander, gestor de ficheros en modo texto +mc +Midnight Comander, gestor de ficheros en modo texto - - most - Un `less` mejorado +most +Un `less` mejorado - - tree - Para ver estructuras de directorios +tree +Para ver estructuras de directorios - - neofetch - Este solo vale para presumir de ordenador creo ¬\_¬ +neofetch +Este solo vale para presumir de ordenador creo ¬\_¬ - + sudo apt install keepass2 gnucash deluge rsync grsync rar unrar \ zip unzip unace bzip2 lzop p7zip p7zip-full p7zip-rar \ most mc tree neofetch - - Chromium - Como Chrome pero libre, ahora en Ubuntu solo está disponible como - snap así que tendremos que dar un rodeo. +Chromium +Como Chrome pero libre, ahora en Ubuntu solo está disponible como snap +así que tendremos que dar un rodeo. - + -``` {bash} -sudo add-apt-repository ppa:xalt7x/chromium-deb-vaapi -cat < 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*. 4. Añadimos la aplicación a los menús, al hacer esto se creará un @@ -374,15 +384,13 @@ actualizado a la última versión. Instalamos siguiendo las instrucciones de la [página web oficial](https://brave-browser.readthedocs.io/en/latest/installing-brave.html#linux) -``` {bash} -curl -s https://brave-browser-apt-release.s3.brave.com/brave-core.asc | sudo apt-key --keyring /etc/apt/trusted.gpg.d/brave-browser-release.gpg add - + curl -s https://brave-browser-apt-release.s3.brave.com/brave-core.asc | sudo apt-key --keyring /etc/apt/trusted.gpg.d/brave-browser-release.gpg add - -echo "deb [arch=amd64] https://brave-browser-apt-release.s3.brave.com/ stable main" | sudo tee /etc/apt/sources.list.d/brave-browser-release.list + echo "deb [arch=amd64] 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 update -sudo apt install brave-browser -``` + sudo apt install brave-browser ### TiddlyDesktop @@ -398,14 +406,13 @@ el portátil. Instalamos siguiendo las instrucciones de la [página web](https://joplinapp.org/) -``` {bash} - wget -O - https://raw.githubusercontent.com/laurent22/joplin/master/Joplin_install_and_update.sh | bash -``` + 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ú. -## Terminal y shells +Terminal y shells +----------------- Por defecto tenemos instalado `bash`. @@ -445,51 +452,51 @@ Y editamos el fichero `~/.zshrc` para que contenga: # This line loads .profile, it's experimental [[ -e ~/.profile ]] && emulate sh -c 'source ~/.profile' - + source ~/apps/zsh-git-prompt/zshrc.sh source ~/apps/antigen/antigen.zsh - + # Load the oh-my-zsh's library. antigen use oh-my-zsh - + # Bundles from the default repo (robbyrussell's oh-my-zsh). antigen bundle git antigen bundle command-not-found - + # must install autojump for this #antigen bundle autojump - + # extracts every kind of compressed file antigen bundle extract - + # jump to dir used frequently antigen bundle z - + #antigen bundle pip - + antigen bundle common-aliases - + antigen bundle robbyrussell/oh-my-zsh plugins/virtualenvwrapper - + antigen bundle zsh-users/zsh-completions - + # Syntax highlighting bundle. antigen bundle zsh-users/zsh-syntax-highlighting antigen bundle zsh-users/zsh-history-substring-search ./zsh-history-substring-search.zsh - + # Arialdo Martini git needs awesome terminal font #antigen bundle arialdomartini/oh-my-git #antigen theme arialdomartini/oh-my-git-themes oppa-lana-style - + # autosuggestions antigen bundle tarruda/zsh-autosuggestions - + #antigen theme agnoster antigen theme gnzh - + # Tell antigen that you're done. antigen apply - + # Correct rm alias from common-alias bundle unalias rm alias rmi='rm -i' @@ -529,63 +536,68 @@ 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. -## Utilidades +Utilidades +---------- *Agave* y *pdftk* ya no existen, nos pasamos a *gpick* y *poppler-utils*: Instalamos *gpick* con `sudo apt install gpick` -## Codecs +Codecs +------ sudo apt-get install mint-meta-codecs -## Syncthing +Syncthing +--------- Añadimos el ppa: -``` {bash} -curl -s https://syncthing.net/release-key.txt | sudo apt-key add - -echo "deb https://apt.syncthing.net/ syncthing stable" | sudo tee /etc/apt/sources.list.d/syncthing.list -sudo apt-get update -sudo apt-get install syncthing -``` + curl -s https://syncthing.net/release-key.txt | sudo apt-key add - + echo "deb https://apt.syncthing.net/ syncthing stable" | sudo tee /etc/apt/sources.list.d/syncthing.list + sudo apt-get update + sudo apt-get install syncthing -# Utilidades +Utilidades +========== - - 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` +graphviz +Una utilidad de generación de gráficos que uso a veces. También es útil +para `web2py` y para \`org-roam - - sqlite3 - Un motor de bases de datos sencillo que se uso a menudo - - `sudo apt install sqlite3` +`sudo apt install graphviz` - - cheat - Chuletas de comandos habituales, se instala bajando el ejecutable - desde [su github](https://github.com/cheat/cheat/releases) +sqlite3 +Un motor de bases de datos sencillo que se uso a menudo - - cheat.sh - Echa una mirada a su página web: , es casi - idéntico al anterior pero disponible desde cualquier ordenador con - conexión. +`sudo apt install sqlite3` - - gparted - Instalamos *gparted* para poder formatear memorias usb - - `sudo apt install gparted` +cheat +Chuletas de comandos habituales, se instala bajando el ejecutable desde +[su github](https://github.com/cheat/cheat/releases) - - wkhtmltopdf - Para pasar páginas web a pdf - - `sudo apt install wkhtmltopdf` +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. -# Internet +gparted +Instalamos *gparted* para poder formatear memorias usb -## Rclone +`sudo apt install gparted` + +wkhtmltopdf +Para pasar páginas web a pdf + +`sudo apt install wkhtmltopdf` + +Internet +======== + +Rclone +------ Instalamos desde la página web(https://rclone.org/), descargando el fichero `.deb`. @@ -609,31 +621,34 @@ Sincronizar una carpeta remota en local: ### Referencias - - [Como usar rclone +- [Como usar rclone (blogdelazaro)](https://elblogdelazaro.gitlab.io//articles/rclone-sincroniza-ficheros-en-la-nube/) - - [y con cifrado +- [y con cifrado (blogdelazaro)](https://elblogdelazaro.gitlab.io//articles/rclone-cifrado-de-ficheros-en-la-nube/) - - [Documentación](https://rclone.org/docs/) +- [Documentación](https://rclone.org/docs/) -# time-tracking +time-tracking +============= -## Activity Watcher +Activity Watcher +---------------- Instalado desde la web -## go for it +go for it +--------- Este programa no para de escribir en el disco continuamente. He dejado de usarlo por que me sobra con el org-mode de emacs. -``` {bash} -sudo add-apt-repository ppa:go-for-it-team/go-for-it-daily && sudo apt-get update -sudo apt-get install go-for-it -``` + sudo add-apt-repository ppa:go-for-it-team/go-for-it-daily && sudo apt-get update + sudo apt-get install go-for-it -# Documentación +Documentación +============= -## Vanilla LaTeX +Vanilla LaTeX +------------- Para instalar la versión más reciente de LaTeX hago la instalación desde [ctan](https://www.ctan.org/) @@ -752,13 +767,15 @@ Lanzador para el actualizador de *texlive*: Icon=system-software-update EOF -## Tipos de letra +Tipos de letra +-------------- Creamos el directorio de usuario para tipos de letra: mkdir ~/.local/share/fonts -## Fuentes Adicionales +Fuentes Adicionales +------------------- Me he descargado de internet la fuente [Mensch](https://robey.lag.net/downloads/mensch.ttf) el directorio de @@ -776,7 +793,8 @@ parece que las fuentes están un poco anticuadas. La fuente Hack la he instalado directamente desde el [sitio web](https://sourcefoundry.org/hack/) -## Pandoc +Pandoc +------ *Pandoc* es un traductor entre formatos de documento. Está escrito en Python y es increiblemente útil. De hecho este documento está escrito @@ -796,19 +814,21 @@ comandos: Las plantillas no son imprescindibles pero si quieres aprender a usarlas o hacer alguna modificación viene bien tenerlas. -## Algunos editores adicionales +Algunos editores adicionales +---------------------------- Dos editores para hacer pruebas: - - Obsidian - Instalado con *appimage* descargado desde la [página - web](https://obsidian.md/) +Obsidian +Instalado con *appimage* descargado desde la [página +web](https://obsidian.md/) - - Zettlr - Instalado con fichero `.deb` descargado desde [su página - web](https://www.zettlr.com/) +Zettlr +Instalado con fichero `.deb` descargado desde [su página +web](https://www.zettlr.com/) -## Calibre +Calibre +------- La mejor utilidad para gestionar tu colección de libros electrónicos. @@ -821,24 +841,25 @@ el comando `sudo calibre-unistall`. Para usar el calibre con el Kobo Glo: - - Desactivamos todos los plugin de Kobo menos el Kobo Touch Extended - - Creamos una columna MyShelves con identificativo \#myshelves - - En las opciones del plugin: - - En la opción Collection columns añadimos las columnas +- Desactivamos todos los plugin de Kobo menos el Kobo Touch Extended +- Creamos una columna MyShelves con identificativo \#myshelves +- En las opciones del plugin: + - En la opción Collection columns añadimos las columnas series,\#myshelves - - Marcamos las opciones Create collections y Delete empy + - Marcamos las opciones Create collections y Delete empy collections - - Marcamos *Modify CSS* - - Update metadata on device y Set series information + - Marcamos *Modify CSS* + - Update metadata on device y Set series information 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) +- (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 +------- 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 @@ -858,14 +879,14 @@ con los siguientes comandos: 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 +- 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*. @@ -881,19 +902,22 @@ Referencia *Scribus* no hacia correctamente la separación silábica en castellano, he instalado los paquetes: - - hyphen-es - - hyphen-gl +- hyphen-es +- hyphen-gl Y ahora funciona correctamente. -## Foliate: lector de libros electrónicos +Foliate: lector de libros electrónicos +-------------------------------------- Instalado el paquete deb desde [su propio github](https://github.com/johnfactotum/foliate/releases) -# Desarrollo software +Desarrollo software +=================== -## Paquetes esenciales +Paquetes esenciales +------------------- Estos son los paquetes esenciales para empezar a desarrollar software en Linux. @@ -901,21 +925,20 @@ Linux. sudo apt install build-essential checkinstall make automake cmake autoconf \ git git-core git-crypt dpkg wget -## Git +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: -``` {bash} -sudo add-apt-repository ppa:git-core/ppa -sudo apt update -sudo apt upgrade -``` + 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. @@ -925,36 +948,38 @@ 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 +Emacs +----- Instalado emacs desde los repos: sudo aptitude install emacs -## Lenguaje de programación D (D programming language) +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 @@ -1006,26 +1031,25 @@ Para poder ejecutar aplicaciones basadas en Vibed, necesitamos instalar: Instalados los siguientes paquetes desde Melpa - - d-mode - - flymake-d - - flycheck - - flycheck-dmd-dub - - flychek-d-unittest - - auto-complete (desde melpa) - - ac-dcd +- 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++ +C, C++ +------ ### Instalación de Gnu Global Para instalar las dependencias, previamente instalamos: -``` {shell} -sudo apt install ncurses-dev id-utils exuberant-ctags python-pygments -``` + 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 @@ -1043,17 +1067,16 @@ esto se trata de la versión 6.6.4. Descomprimimos los fuentes y los compilamos con: -``` {shell} -./configure --prefix=/usr/local --with-exuberant-ctags=/usr/bin/ctags -make -sudo make install -``` + ./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` -## Processing +Processing +---------- Bajamos el paquete de la [página web](https://processing.org/), descomprimimimos en `~/apps/`, en las nuevas versiones incorpora un @@ -1062,7 +1085,8 @@ 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 +openFrameworks +-------------- Nos bajamos los fuentes para linux 64bits desde [la página web del proyecto](https://openframeworks.cc), y las descomprimimos en un @@ -1079,16 +1103,15 @@ contrario falla la compilación. Añade los siguientes paquetes a nuestro sistema -``` {bash} -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] -``` + 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 +Python +------ De partida tenemos instalado dos versiones: *python2* y *python3* @@ -1102,13 +1125,11 @@ En principio yo no quería instalar ninguno para averigüar que paquetes no funcionaban, pero la instalación de VirtualBox hizo que se instalara automáticamente el paquete `python-is-python2`. -``` {bash} -python2 -V -Python 2.7.18rc1 + python2 -V + Python 2.7.18rc1 -python3 -V -Python 3.8.2 -``` + python3 -V + Python 3.8.2 ### Paquetes de python instalados @@ -1123,12 +1144,10 @@ dijimos conviene que instalemos los paquetes de desarrollo: Ademas añadimos las siguientes lineas al fichero `~/.profile`: -``` {bash{ -# WORKON_HOME for virtualenvwrapper -if [ -d "$HOME/.virtualenvs" ] ; then -WORKON_HOME="$HOME/.virtualenvs" -fi -``` + # WORKON_HOME for virtualenvwrapper + if [ -d "$HOME/.virtualenvs" ] ; then + WORKON_HOME="$HOME/.virtualenvs" + fi [Aquí](https://virtualenvwrapper.readthedocs.io/en/latest/command_ref.html) tenemos la referencia de comandos de *virtualenvwrapper*. @@ -1148,7 +1167,8 @@ Una instalación para pruebas. mkvirtualenv -p /usr/bin/python3 jupyter python -m pip install jupyter -## neovim +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 @@ -1171,8 +1191,8 @@ añadiremos al fichero `init.vim`. Revisar [esto](https://neovim.io/doc/user/provider.html#provider-python) -| | -| :------------------------------------------------------------------- | +| | +|:---------------------------------------------------------------------| | **NOTA**: El siguiente paso ya no parece necesario, las alternativas | | se han actualizado con la instalación del *neovim*. | @@ -1193,52 +1213,49 @@ Ejecutamos: 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 + " 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') -Plug 'deoplete-plugins/deoplete-jedi' + 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 -" Initialize plugin system -call plug#end() + Plug 'deoplete-plugins/deoplete-jedi' -let g:deoplete#enable_at_startup = 1 + " Initialize plugin system + call plug#end() -" 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' + 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 porn 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') @@ -1246,29 +1263,30 @@ comando ejecutando: `:PlugInstall` 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 +Firefox developer edition +------------------------- El rollo de siempre, descargar desde [la página web](https://www.mozilla.org/en-US/firefox/developer/) descomprimir en `~/apps` y crear un lanzador. -## Navegadores cli +Navegadores cli +--------------- Herramientas útiles para depuración web -``` {bash} -sudo apt install httpie links -``` + sudo apt install httpie links -## MariaDB +MariaDB +------- Instalamos la última estable para Ubuntu Fossa desde los repos oficiales. @@ -1277,9 +1295,7 @@ Primero añadimos los repos. Añadimos la clave de firma: -``` {bash} -sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc' -``` + sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc' Ahora tenemos dos opciones: @@ -1325,7 +1341,8 @@ ordenador: sudo systemctl stop mariadb sudo systemctl disable mariadb -## Squirrel SQL Client +Squirrel SQL Client +------------------- Bajamos el zip de estándar desde [la página web de Squirrel](http://www.squirrelsql.org/) (yo prefiero no usar el @@ -1340,16 +1357,15 @@ 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. -## R y R-studio +R y R-studio +------------ Primero instalamos la última versión de R en nuestro pc: -``` {bash} -sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9 -sudo add-apt-repository 'deb https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/' -sudo apt update -sudo apt install r-base -``` + sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9 + sudo add-apt-repository 'deb https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/' + sudo apt update + sudo apt install r-base ### R-studio @@ -1358,15 +1374,18 @@ web](https://rstudio.com/products/rstudio/download-server/debian-ubuntu/) Instalamos con *gdebi* (basta con clicar sobre el fichero *.deb*) -## Octave +Octave +------ Instalado desde flatpak sudo flatpak install flathub org.octave.Octave -# Desarrollo hardware +Desarrollo hardware +=================== -## Arduino IDE +Arduino IDE +----------- Bajamos los paquetes de la página [web](https://www.arduino.cc), descomprimimimos en *\~/apps/arduino*. @@ -1396,28 +1415,28 @@ Fichero `90-extraacl.rules` mete mi usario en el fichero de reglas (¬\_¬) # Setting serial port rules - + KERNEL=="ttyUSB[0-9]*", TAG+="udev-acl", TAG+="uaccess", OWNER="salvari" KERNEL=="ttyACM[0-9]*", TAG+="udev-acl", TAG+="uaccess", OWNER="salvari" Fichero `98-openocd.rules` # Adding Arduino M0/M0 Pro, Primo UDEV Rules for CMSIS-DAP port - + ACTION!="add|change", GOTO="openocd_rules_end" SUBSYSTEM!="usb|tty|hidraw", GOTO="openocd_rules_end" - + #Please keep this list sorted by VID:PID - + #CMSIS-DAP compatible adapters ATTRS{product}=="*CMSIS-DAP*", MODE="664", GROUP="plugdev" - + LABEL="openocd_rules_end" Fichero `avrisp.rules` # Adding AVRisp UDEV rules - + SUBSYSTEM!="usb_device", ACTION!="add", GOTO="avrisp_end" # Atmel Corp. JTAG ICE mkII ATTR{idVendor}=="03eb", ATTRS{idProduct}=="2103", MODE="660", GROUP="dialout" @@ -1425,22 +1444,22 @@ Fichero `avrisp.rules` ATTR{idVendor}=="03eb", ATTRS{idProduct}=="2104", MODE="660", GROUP="dialout" # Atmel Corp. Dragon ATTR{idVendor}=="03eb", ATTRS{idProduct}=="2107", MODE="660", GROUP="dialout" - + LABEL="avrisp_end" Fichero `40-defuse.rules`: # Adding STM32 bootloader mode UDEV rules - + # Example udev rules (usually placed in /etc/udev/rules.d) # Makes STM32 DfuSe device writeable for the "plugdev" group - + ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE="664", GROUP="plugdev", TAG+="uaccess" Fichero `99-arduino-101.rules`: # Arduino 101 in DFU Mode - + SUBSYSTEM=="tty", ENV{ID_REVISION}=="8087", ENV{ID_MODEL_ID}=="0ab6", MODE="0666", ENV{ID_MM_DEVICE_IGNORE}="1", ENV{ID_MM_CANDIDATE}="0" SUBSYSTEM=="usb", ATTR{idVendor}=="8087", ATTR{idProduct}=="0aba", MODE="0666", ENV{ID_MM_DEVICE_IGNORE}="1" @@ -1461,8 +1480,8 @@ si tenemos otras URL, simplemente añadimos esta separada por una coma. Ahora desde el *Board Manager* instalamos: - - Arduino SAMD Boards - - Adafruit SAMD Boards +- Arduino SAMD Boards +- Adafruit SAMD Boards ### Añadir soporte para *Circuit Playground Express* @@ -1473,9 +1492,9 @@ Bastaría con instalar *Arduino SAMD Boards* Tenemos varias URL posibles para configurar en las preferencias del IDE Arduino: - - +- http://dan.drown.org/stm32duino/package_STM32duino_index.json (recomendada por Tutoelectro) - - +- https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json (parece la oficial) He optado por añadir los dos ficheros json al IDE, la oficial tiene @@ -1489,27 +1508,28 @@ 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) -![Opciones Arduino para STM32 con -st-link](src/img/stm32_arduino_opts.jpg "Menu Arduino desplegado") +
+Opciones Arduino para STM32 con st-link +
### Añadir soporte para ESP32 Añadimos las URL: - - - - +- https://dl.espressif.com/dl/package_esp32_index.json +- http://arduino.esp8266.com/stable/package_esp8266com_index.json Añadimos la librería: - - ESP32 (de espressif) +- ESP32 (de espressif) ### Añadir biblioteca de soporte para Makeblock ------ +------------------------------------------------------------------------ **Nota**: Pendiente de instalar ------ +------------------------------------------------------------------------ Clonamos el [repo oficial en github](https://github.com/Makeblock-official/Makeblock-Libraries). @@ -1526,13 +1546,14 @@ 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 +Pinguino IDE +------------ ------ +------------------------------------------------------------------------ **Nota**: Pendiente de instalar ------ +------------------------------------------------------------------------ Tenemos el paquete de instalación disponible en su página [web](http://pinguino.cc/download.php) @@ -1548,54 +1569,50 @@ 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 +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 +- 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, +- 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 + - 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 +esp-idf +------- 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. ------ +------------------------------------------------------------------------ -``` {bash} -sudo apt-get install gperf cmake ninja-build ccache libffi-dev libssl-dev -``` + sudo apt-get install gperf cmake ninja-build ccache libffi-dev libssl-dev Ahora creamos un directorio para nuestro *tool-chain*: -``` {bash} -mkdir ~/esp -cd ~/esp -git clone --recursive https://github.com/espressif/esp-idf -``` + 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 -``` {bash} -cd ~/esp/esp-idf -./install.sh -``` + cd ~/esp/esp-idf + ./install.sh Este script nos va a dejar instaladas todas las herramientas necesarias en el directorio `~/.expressif` @@ -1606,19 +1623,16 @@ Basta con editar la primera linea *shebang* del script. Estas son las bibliotecas que deja instaladas: -``` {bash} -Installing ESP-IDF tools -Installing tools: xtensa-esp32-elf, xtensa-esp32s2-elf, esp32ulp-elf, esp32s2ulp-elf, openocd-esp32 -``` + 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`: -``` {bash} -. ~/apps/esp/esp-idf/export.sh -``` + . ~/apps/esp/esp-idf/export.sh -## KiCAD +KiCAD +----- En la [página web del proyecto](http://kicad-pcb.org/download/linux-mint/) nos recomiendan el @@ -1633,7 +1647,7 @@ descargarse. Algunas librerías alternativas: - - [Freetronics](https://github.com/freetronics/freetronics_kicad_library) +- [Freetronics](https://github.com/freetronics/freetronics_kicad_library) una libreria que no solo incluye Shield para Arduino sino una completa colección de componentes que nos permitirá hacer proyectos completos. [Freetronics](http://www.freetronics.com) es una especie @@ -1642,11 +1656,12 @@ Algunas librerías alternativas: 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. - - [eklablog](http://meta-blog.eklablog.com/kicad-librairie-arduino-pretty-p930786) +- [eklablog](http://meta-blog.eklablog.com/kicad-librairie-arduino-pretty-p930786) Esta biblioteca de componentes está incluida en el github de KiCAD, así que teoricamente no habría que instalarla en nuestro disco duro. -## Analizador lógico +Analizador lógico +----------------- Mi analizador es un OpenBench de Seedstudio, [aquí hay mas info](http://dangerousprototypes.com/docs/Open_Bench_Logic_Sniffer) @@ -1655,9 +1670,7 @@ info](http://dangerousprototypes.com/docs/Open_Bench_Logic_Sniffer) Instalamos **Sigrok**, simplemente desde los repos de Debian: -``` {bash} -sudo aptitude install sigrok -``` + sudo aptitude install sigrok Al instalar **Sigrok** instalamos también **Pulseview**. @@ -1681,15 +1694,13 @@ página](https://www.sump.org/projects/analyzer/) y descomprimimos en Instalamos las dependencias: -``` {bash} -sudo apt install librxtx-java -``` + 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 @@ -1697,15 +1708,16 @@ Y ya funciona. ### OLS ------ +------------------------------------------------------------------------ **Nota**: Pendiente de instalar ------ +------------------------------------------------------------------------ [Página oficial](https://www.lxtreme.nl/ols/) -## IceStudio +IceStudio +--------- Instalamos dependencias con `sudo apt install xclip` @@ -1713,7 +1725,8 @@ Bajamos el *AppImage* desde el [github de IceStudio](https://github.com/FPGAwars/icestudio) y lo dejamos en `~/apps/icestudio` -## PlatformIO +PlatformIO +---------- ### VS Code @@ -1752,37 +1765,36 @@ Modificamos el fichero `~/.profile` añadiendo las siguientes lineas: fi Si quieres usar Platformio desde linea de comandos, es mejor activar -manualmente el entorno virtual con `source -~/.platformio/penv/bin/activate` +manualmente el entorno virtual con +`source ~/.platformio/penv/bin/activate` ### vscodium -``` {bash} -wget -qO - https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo/raw/master/pub.gpg | sudo apt-key add - -echo 'deb https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo/raw/repos/debs/ vscodium main' | sudo tee --append /etc/apt/sources.list.d/vscodium.list -sudo apt update && sudo apt install codium -``` + wget -qO - https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo/raw/master/pub.gpg | sudo apt-key add - + echo 'deb https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo/raw/repos/debs/ vscodium main' | sudo tee --append /etc/apt/sources.list.d/vscodium.list + sudo apt update && sudo apt install codium ### Editor Atom ------ +------------------------------------------------------------------------ *NOTA*: Parece que antes recomendaban instalar Atom para disponer del Platformio CLI, ahora en cambio recomiendan VS Code. ------ +------------------------------------------------------------------------ wget -qO - https://packagecloud.io/AtomEditor/atom/gpgkey | sudo apt-key add - sudo sh -c 'echo "deb [arch=amd64] https://packagecloud.io/AtomEditor/atom/any/ any main" > /etc/apt/sources.list.d/atom.list' sudo apt update sudo apt install atom -## RepRap +RepRap +------ ### OpenScad -El OpenSCAD está disponible en los orígenes de software, así que `sudo -apt install openscad`. +El OpenSCAD está disponible en los orígenes de software, así que +`sudo apt install openscad`. ### Slic3r @@ -1827,42 +1839,42 @@ Clonamos el repo: Y ya lo tenemos todo listo para ejecutar. -## Cortadora de vinilos +Cortadora de vinilos +-------------------- ### Inkcut Instalado en un entorno virtual: -``` {bash} -mkvirtualenv -p `which python3` inkcut + mkvirtualenv -p `which python3` inkcut -sudo apt install libxml2-dev libxslt-dev libcups2-dev + sudo apt install libxml2-dev libxslt-dev libcups2-dev -pip install PyQt5 + pip install PyQt5 -pip install inkcut -``` + pip install inkcut ### Plugin para inkscape Instalamos dependencias: -``` {bash} -pip install python-usb -``` + pip install python-usb Instalamos el fichero `.deb` desde la web - +https://github.com/fablabnbg/inkscape-silhouette/releases -# Aplicaciones de gráficos +Aplicaciones de gráficos +======================== -## LibreCAD +LibreCAD +-------- Diseño en 2D sudo apt install librecad -## FreeCAD +FreeCAD +------- No hay ppa disponible para Ubuntu 20. @@ -1875,14 +1887,15 @@ Dejo la instalación desde ppa como recordatorio. sudo apt update sudo install freecad ------ +------------------------------------------------------------------------ **NOTA:** the ccx package brings CalculiX support to the FEM workbench, and needs to be installed separately. ------ +------------------------------------------------------------------------ -## Inkscape +Inkscape +-------- El programa libre para creación y edición de gráficos vectoriales. @@ -1890,17 +1903,16 @@ El programa libre para creación y edición de gráficos vectoriales. sudo apt update sudo apt install inkscape -## Gimp +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: -``` {bash} -sudo apt install gimp gimp-data gimp-texturize \ -gimp-data-extras gimp-gap gmic gimp-gmic -``` + 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: @@ -1918,15 +1930,16 @@ Para instalar los principales plugins basta con: sudo apt install gimp-plugin-registry -| | -| :----------------------------------------------------------------------------------------------------------------------------------------- | +| | +|:-------------------------------------------------------------------------------------------------------------------------------------------| | Esta sección ya no está vigente | | \#\#\#\# resynthesizer | | Descargamos el plugin desde [aquí](https://github.com/bootchk/resynthesizer) y descomprimimos el fichero en `~/.config/GIMP/2.10/plug-ins` | | Tenemos que asegurarnos que los fichero *python* son ejecutables: | | \~\~\~\~ chmod 755 \~/.config/GIMP/2.10/plug-ins/\*.py \~\~\~\~ | -## Krita +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 @@ -1936,21 +1949,24 @@ 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 +MyPaint +------- Desde el [github](https://github.com/mypaint/) tenemos disponible la última versión en formato *appimage*. La descargamos la dejamos en `~/apps` y creamos un acceso con *Menulibre*, como siempre. -## Alchemy +Alchemy +------- Igual que el *MyPaint* descargamos desde [la página web](http://al.chemy.org), descomprimimos en `~/apps` y creamos un accso con *Menulibre*. -## Capturas de pantalla +Capturas de pantalla +-------------------- El [*flameshot*](https://flameshot.js.org/#/) cubre el 99% de mis necesidades: `sudo apt install flameshot` @@ -1961,13 +1977,12 @@ hacer una captura con retardo lo instalé con un *appimage*. Shutter vuelve a estar disponible, al instalar desde este ppa ya queda con las opciones de edición habilitadas: -``` {bash} -sudo add-apt-repository ppa:linuxuprising/shutter -sudo apt update -sudo apt install shutter -``` + sudo add-apt-repository ppa:linuxuprising/shutter + sudo apt update + sudo apt install shutter -## Reoptimizar imágenes +Reoptimizar imágenes +-------------------- ### ImageMagick @@ -1980,13 +1995,15 @@ Instalamos desde los repos, simplemente: Nos bajamos un *AppImage* desde el [github](https://github.com/meowtec/Imagine/releases) de la aplicación -## dia +dia +--- Un programa para crear diagramas sudo apt install dia dia-shapes gsfonts-x11 -## Blender +Blender +------- Bajamos el Blender linkado estáticamente de [la página web](https://www.blender.org) y lo descomprimimos en `~/apps/blender`. @@ -1994,31 +2011,35 @@ web](https://www.blender.org) y lo descomprimimos en `~/apps/blender`. El paquete incluye un fichero `blender.desktop` que podemos editar y copiar en `~/.local/share/applications`. -## Structure Synth +Structure Synth +--------------- Instalado desde repos, junto con sunflow para explorar un poco. sudo apt install structure-synth sunflow -## Heron animation +Heron animation +--------------- El proyecto parece abandonado. El software ya no funciona en el último linux. -## Stopmotion +Stopmotion +---------- Primero probamos el del repo: `sudo apt install stopmotion` -## Instalación del driver digiment para tabletas gráficas Huion +Instalación del driver digiment para tabletas gráficas Huion +------------------------------------------------------------ He intentado un par de veces instalar con el fichero `deb` pero parece que no funciona. Para hacer la instalación via DKMS el truco está en: - - Dejar el código fuente en un directorio de la forma +- Dejar el código fuente en un directorio de la forma `/usr/src/-` - - Lanzar el `build` pero usando esta vez `/` +- Lanzar el `build` pero usando esta vez `/` Descargamos los últimos drivers desde [la página oficial de releases](https://github.com/DIGImend/digimend-kernel-drivers/releases), @@ -2026,12 +2047,10 @@ en el momento de escribir esto descargamos la versión V9. Descomprimimos en `/usr/src/digimend-9` -``` {bash} -cd /usr/src -sudo xvzf . -sudo dkms build digimend-kernel-drivers/9 -sudo dkms install digimend/9 -``` + cd /usr/src + sudo xvzf . + sudo dkms build digimend-kernel-drivers/9 + sudo dkms install digimend/9 Para comprobar: @@ -2040,15 +2059,18 @@ Para comprobar: Referencia: - - [Aquí](https://davidrevoy.com/article331/setup-huion-giano-wh1409-tablet-on-linux-mint-18-1-ubuntu-16-04) +- [Aquí](https://davidrevoy.com/article331/setup-huion-giano-wh1409-tablet-on-linux-mint-18-1-ubuntu-16-04) -# Sonido +Sonido +====== -## Spotify +Spotify +------- Spotify instalado desde las opciones de Linux Mint via flatpak. -## Audacity +Audacity +-------- El ppa de Audacity no permite instalar la última versión. Podemos instalarla via flatpak o simplemente instalar la de los repos (no es la @@ -2066,15 +2088,18 @@ Añadimos ppa: Instalamos también el plugin [Chris’s Dynamic Compressor plugin](https://theaudacitytopodcast.com/chriss-dynamic-compressor-plugin-for-audacity/) -## Clementine +Clementine +---------- La version disponible en los orígenes de software parece al dia: sudo apt install clementine -# Video +Video +===== -## Shotcut +Shotcut +------- Nos bajamos la *AppImage* para Linux desde la [página web](https://www.shotcut.org/). @@ -2085,17 +2110,20 @@ La dejamos en `~/apps/shotcut` y: chmod 744 Shotcutxxxxxx.AppImage ./Shotcutxxxxxx.AppImage -## kdenlive +kdenlive +-------- Está disponible [en la web](https://kdenlive.org) como ppa o como *appimage*. Lo he bajado como *appimage* para probarlo. -## Openshot +Openshot +-------- También descargado desde [su web](https://www.openshot.org) como *appimage*, para probar. Tienen un ppa disponible. -## Grabación de screencast +Grabación de screencast +----------------------- ### Vokoscreen y Kazam @@ -2108,13 +2136,12 @@ Instalados desde los repos oficiales: Añadimos el repositorio -``` {bash} -sudo add-apt-repository ppa:obsproject/obs-studio -sudo apt update -sudo apt install obs-studio -``` + sudo add-apt-repository ppa:obsproject/obs-studio + sudo apt update + sudo apt install obs-studio -## Grabación de podcast +Grabación de podcast +-------------------- ### Mumble @@ -2129,9 +2156,11 @@ instrucciones por si lo corrigen. sudo apt update sudo apt install mumble -# Fotografía +Fotografía +========== -## Rawtherapee +Rawtherapee +----------- Bajamos el AppImage desde la [página web](http://rawtherapee.com/) al directorio `~/apps/rawtherapee`. @@ -2143,7 +2172,8 @@ directorio `~/apps/rawtherapee`. Al ejecutarla la primera vez ya se encarga la propia aplicación de integrarse en nuestro sistema. -## Darktable +Darktable +--------- Instalamos ppa (ver [esta web](https://software.opensuse.org/download/package?package=darktable&project=graphics%3Adarktable)) @@ -2159,14 +2189,17 @@ Se instala la última versión de Darktable (3.0.2) linux no le gustan los ficheros con un ‘:’ Revisa `/etc/apt/trusted.gpg.d/` -## Digikam +Digikam +------- Instalado desde la [página web](https://www.digikam.org/) de la aplicación con appimage. -# Seguridad +Seguridad +========= -## Autenticación en servidores por clave pública +Autenticación en servidores por clave pública +--------------------------------------------- Generar contraseñas para conexión servidores remotos: @@ -2182,21 +2215,24 @@ del servidor remoto. [¿Cómo funciona esto?](https://www.digitalocean.com/community/tutorials/understanding-the-ssh-encryption-and-connection-process) -## Claves gpg +Claves gpg +---------- `gpg --gen-key` Para generar nuestra clave. - - **Siempre** hay que ponerle una fecha de expiración, la puedes +- **Siempre** hay que ponerle una fecha de expiración, la puedes cambiar más tarde. - - **Siempre** hay que escoger la máxima longitud posible +- **Siempre** hay que escoger la máxima longitud posible -## Seahorse +Seahorse +-------- Para manejar todas nuestras claves con comodidad: `sudo apt install seahorse` -## Conexión a github con claves ssh +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. @@ -2244,7 +2280,8 @@ Ahora en los repos donde queramos usar ssh debemos cambiar el remote: git remote set-url origin git@github.com:$USER/$REPONAME.git -## Signal +Signal +------ El procedimiento recomendado en la página oficial: @@ -2252,13 +2289,14 @@ El procedimiento recomendado en la página oficial: echo "deb [arch=amd64] https://updates.signal.org/desktop/apt xenial main" | sudo tee -a /etc/apt/sources.list.d/signal-xenial.list sudo apt update && sudo apt install signal-desktop ------ +------------------------------------------------------------------------ **NOTA**: Parece que no funciona. Lo he instalado via *flatpack* ------ +------------------------------------------------------------------------ -## Lector DNI electrónico +Lector DNI electrónico +---------------------- Instalamos: @@ -2285,7 +2323,7 @@ Si insertamos el lector veremos algo como esto: 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, @@ -2305,32 +2343,32 @@ Y además: aptitude install pinentry-gtk2 opensc -# Virtualizaciones y contenedores +Virtualizaciones y contenedores +=============================== -## Instalación de *virtualBox* +Instalación de *virtualBox* +--------------------------- Lo hacemos con los origenes de software oficiales (alternativamente, podríamos hacerlo manualmente): # Importamos la clave gpg wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add - - + # Añadimos el nuevo origen de software sudo add-apt-repository "deb [arch=amd64] https://download.virtualbox.org/virtualbox/debian $(. /etc/os-release; echo "$UBUNTU_CODENAME") contrib" - + # Actualizamos la base de datos de paquetes sudo apt update Ahora podemos comprobar que además del paquete *virtualbox* tenemos varios paquetes con número de versión (p.ej. \_virtualbox.6.1), estos -últimos son los que hemos añadido (compruebalo con `apt-cache policy -[nombrepaquete]`) +últimos son los que hemos añadido (compruebalo con +`apt-cache policy [nombrepaquete]`) Instalamos el que nos interesa: -``` {bash} -sudo apt install virtualbox-6.1 -``` + sudo apt install virtualbox-6.1 **ATENCIÓN** @@ -2348,13 +2386,14 @@ Sólo nos queda añadir nuestro usuario al grupo `vboxusers`, con el comando `sudo gpasswd -a username vboxusers`, y tendremos que cerrar la sesión para refrescar nuestros grupos. -## qemu +qemu +---- Un par de comprobaciones previas: - - El comando `egrep -c '(vmx|svm)' /proc/cpuinfo` debe devolvernos un +- El comando `egrep -c '(vmx|svm)' /proc/cpuinfo` debe devolvernos un número mayor que cero si nuestro sistema soporta virtualización. - - El comando `kvm-ok` nos sirve para comprobar que la virtualización +- El comando `kvm-ok` nos sirve para comprobar que la virtualización hardware no está deshabilitada en la BIOS (puede que tengas que ejecutar `apt install cpu-checker`) @@ -2363,44 +2402,45 @@ Instalamos desde el repo oficial: sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager sudo apt install virt-viewer - - qemu-kvm - nos da la emulación hardware para el hipervisor KVM +qemu-kvm +nos da la emulación hardware para el hipervisor KVM - - libvirt-daemon-system - los ficheros de configuración para ejecutar el demonio `libvirt` - como servicio +libvirt-daemon-system +los ficheros de configuración para ejecutar el demonio `libvirt` como +servicio - - libvirt-clients - software para gestionar plataformas de virtualización +libvirt-clients +software para gestionar plataformas de virtualización - - bridge-utils - utilidades de linea de comandos para configurar bridges ethernet +bridge-utils +utilidades de linea de comandos para configurar bridges ethernet - - virtinst - utilidades de linea de comandos para crear máquinas virtuales +virtinst +utilidades de linea de comandos para crear máquinas virtuales - - virt-manager - un interfaz gráfico junto con utilidades de linea de comandos para - gestionar máquinas virtuales a través de *libvirt* +virt-manager +un interfaz gráfico junto con utilidades de linea de comandos para +gestionar máquinas virtuales a través de *libvirt* Solo queda añadir nuestro usuario a los grupos: sudo gpasswd -a username libvirt sudo gpasswd -a username kvm -Podemos comprobar el estado del servicio con `scs libvirtd` (`systemctl -status libvirtd`). +Podemos comprobar el estado del servicio con `scs libvirtd` +(`systemctl status libvirtd`). ### Referencias - - [How to install KVM on Ubuntu 20.04 Graphical & headless +- [How to install KVM on Ubuntu 20.04 Graphical & headless server](https://www.how2shout.com/how-to/how-to-install-kvm-on-ubuntu-20-04-graphical-headless-server.html) - - [How to Install Kvm on - Ubuntu 20.04](https://linuxize.com/post/how-to-install-kvm-on-ubuntu-20-04/) - - [How to Install KVM on - Ubuntu 20.04](https://www.tecmint.com/install-kvm-on-ubuntu/) +- [How to Install Kvm on Ubuntu + 20.04](https://linuxize.com/post/how-to-install-kvm-on-ubuntu-20-04/) +- [How to Install KVM on Ubuntu + 20.04](https://www.tecmint.com/install-kvm-on-ubuntu/) -## Docker +Docker +------ Tenemos que añadir el repositorio correspondiente a nuestra distribución: @@ -2409,27 +2449,27 @@ distribución: sudo apt remove docker docker-engine docker.io sudo apt autoremove sudo apt update - + # Install pre-requisites sudo apt install ca-certificates curl - + # Import the GPG key - + curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - - + # Next, point the package manager to the official Docker repository - + sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(. /etc/os-release; echo "$UBUNTU_CODENAME") stable" - + # Update the package database - + sudo apt update # - + apt-cache policy docker-ce - + sudo apt install docker-ce - + sudo gpasswd -a username docker Esto dejará el servicio *docker* funcionando y habilitado (arrancará en @@ -2437,11 +2477,9 @@ cada reinicio del ordenador) La forma de pararlo es: -``` {bash} -sudo systemctl stop docker -sudo systemctl disable docker -systemctl status docker -``` + 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. @@ -2449,24 +2487,24 @@ autocompletado en comandos de docker. Para usar *docker* tendremos que arrancarlo, con los alias de nuestro sistema para *systemd* ejecutamos: -``` {bash} -scst docker # para arrancar el servicio + scst docker # para arrancar el servicio -scsp docker # para parar el servicio -``` + scsp docker # para parar el servicio ### docker-compose - - Nos bajamos la última versión disponible de [las releases de +- Nos bajamos la última versión disponible de [las releases de github](https://github.com/docker/compose/releases) - - Movemos el fichero que hemos descargado a +- Movemos el fichero que hemos descargado a `/usr/local/bin/docker-compose` - - Y le damos permisos de ejecución `sudo chmod +x - /usr/local/bin/docker-compose` +- Y le damos permisos de ejecución + `sudo chmod +x /usr/local/bin/docker-compose` -# Utilidades para mapas y cartografía +Utilidades para mapas y cartografía +=================================== -## josm +josm +---- Descargamos y añadimos la clave gpg: @@ -2488,7 +2526,8 @@ siguiente comando, pero tendréis actualizaciones diarias: Ya estamos listos para editar Open Street Map offline. -## MOBAC +MOBAC +----- Bajamos el paquete desde [la página web](http://mobac.sourceforge.net/) y descomprimimos en `~/apps/mobac` como de costumbre nos creamos una @@ -2502,7 +2541,8 @@ wiki](http://mobac.sourceforge.net/wiki/index.php/Custom_XML_Map_Sources) \*\[Cartografía digital\] (https://digimapas.blogspot.com.es/2015/01/oruxmaps-vii-mapas-de-mobac.html) -## QGIS +QGIS +---- Añadimos la clave gpg: @@ -2519,30 +2559,34 @@ E instalamos como siempre ### Referencias - - [Conectar WMS con +- [Conectar WMS con QGIS](https://mappinggis.com/2015/09/como-conectar-con-servicios-wms-y-wfs-con-arcgis-qgis-y-gvsig/) - - [Importar OSM en +- [Importar OSM en QGIS](https://www.altergeosistemas.com/blog/2014/03/28/importando-datos-de-osm-en-qgis-2/) - - [Learn OSM](http://learnosm.org/es/osm-data/osm-in-qgis/) - - [QGIS +- [Learn OSM](http://learnosm.org/es/osm-data/osm-in-qgis/) +- [QGIS Tutorials](http://www.qgistutorials.com/es/docs/downloading_osm_data.html) -# Recetas variadas +Recetas variadas +================ -## Añadir las claves GPG de un repo +Añadir las claves GPG de un repo +-------------------------------- sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F7E06F06199EF2F2 -## Solucionar problemas de menús duplicados usando menulibre +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. -## Formatear memoria usb +Formatear memoria usb +--------------------- “The driver descriptor says the physical block size is 2048 bytes, but Linux says it is 512 bytes.” @@ -2576,20 +2620,22 @@ 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 +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'` +`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 +ssh access from termux +---------------------- - +https://linuxconfig.org/ssh-into-linux-your-computer-from-android-with-termux -## SDR instalaciones varias +SDR instalaciones varias +------------------------ Vamos a trastear con un dispositivo [RTL-SDR.com](https://www.rtl-sdr.com/). @@ -2605,14 +2651,15 @@ La guía en cuestión la podemos encontrar Seguimos los pasos de instalación: - - La instalación de `git`, `cmake` y `build-essential` ya la tengo +- 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 +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 @@ -2644,7 +2691,8 @@ https://starter-kit.nettigo.eu/2015/serial-port-busy-for-avrdude-on-ubuntu-with- https://www.codeproject.com/Tips/349002/Select-a-USB-Serial-Device-via-its-VID-PID -## Programar los nanos con chip ch340 o ch341 +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” @@ -2658,14 +2706,15 @@ que escoger: Y ya funciona todo. -## Linux Mint 20 es *python agnostic* +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: -``` {bash} -apt install python-is-python2 -apt install python-is-python3 -``` + apt install python-is-python2 + apt install python-is-python3 + +“test” diff --git a/makefile b/makefile index ef90748..068021a 100644 --- a/makefile +++ b/makefile @@ -11,12 +11,20 @@ target := LinuxMintUlyana mainfont := 'Ubuntu' monofont := 'Ubuntu Mono' -pdf_opt := -t markdown-smart --standalone --variable geometry:a4paper --variable lang=$(lang) \ - --number-sections --toc --from=markdown --to latex --pdf-engine=xelatex \ - --variable colorlinks \ +pdf_opt := --standalone \ + --variable geometry:a4paper \ + --variable lang=$(lang) \ --variable mainfont=$(mainfont) \ --variable monofont=$(monofont) \ --variable fontsize='12pt' \ + --variable colorlinks \ + --toc \ + --number-sections \ + --from=markdown \--to latex \ + --pdf-engine=xelatex \ + + + ## Recipes for targets @@ -88,11 +96,11 @@ README.md: $(sources) $(sources) clean: - rm -f $(output)/*.pdf - rm -f $(output)/*.tex - rm -f $(output)/*.mw - rm -f $(output)/*.dw - rm -f $(output)/*.epub - rm -f $(output)/*.odt - rm -f $(output)/*.docx - rm -r README.md + -rm -f $(output)/*.pdf + -rm -f $(output)/*.tex + -rm -f $(output)/*.mw + -rm -f $(output)/*.dw + -rm -f $(output)/*.epub + -rm -f $(output)/*.odt + -rm -f $(output)/*.docx + -rm -r README.md diff --git a/out/LinuxMintUlyana.dw b/out/LinuxMintUlyana.dw index 94fee8f..ce71259 100644 --- a/out/LinuxMintUlyana.dw +++ b/out/LinuxMintUlyana.dw @@ -2334,3 +2334,4 @@ Tenemos dos opciones: apt install python-is-python2 apt install python-is-python3 +“test” diff --git a/out/LinuxMintUlyana.epub b/out/LinuxMintUlyana.epub index a77b2c77015f029669f28e8dfd7220a9ae937097..1fe215cbf6de670182a3aa88f30d1c2f60214ccb 100644 GIT binary patch delta 20783 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 delta 20814 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 para ejecutar: -
sudo su -
+
sudo su -
 git config --global user.email xxxxx@whatever.com
 git config --global user.name "Name Surname"
 apt install etckeeper
@@ -61,7 +61,7 @@ apt install etckeeper
Para echar una mirada a los ''commits'' creados puedes ejecutar: -
cd /etc
+
cd /etc
 sudo git log
=== Controlar dotfiles con git === @@ -69,7 +69,7 @@ Vamos a crear un repo de git para controlar nuestros ficheros personales de conf Creamos el repo donde queramos -
mkdir usrcfg
+
mkdir usrcfg
 cd usrcfg
 git init
 git config core.worktree "/home/salvari"
@@ -77,7 +77,7 @@ Y ya lo tenemos, un repo que tiene el directorio de trabajo apuntando a nuestro Podemos añadir los ficheros de configuración que queramos al repo: -
git add .bashrc
+
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. @@ -93,7 +93,7 @@ El area de intercambio la hemos creado en el disco duro hdd, no se usará mucho 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.
+
# /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
@@ -112,7 +112,7 @@ UUID=ce11ccb0-a67d-4e8b-9456-f49a52974160 none            swap    sw
 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: -
mount -o remount /
+
mount -o remount /
 mount -o remount /home
 mount
=== Ajustar ''Firefox'' === @@ -136,7 +136,7 @@ TODO: Comprobar ''trim'' en mi disco duro. Y mirar [https://easylinuxtipsproject Instalamos algunas fuentes desde los orígenes de software: -
sudo apt install ttf-mscorefonts-installer
+
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 @@ -144,7 +144,7 @@ Y la fuente [https://robey.lag.net/2010/06/21/mensch-font.html Mensch] la bajamo ufw y gufw vienen instalados por defecto, pero no activados. -
aptitude install ufw
+
aptitude install ufw
 ufw default deny
 ufw enable
 ufw status verbose
@@ -204,7 +204,7 @@ Son útiles para control de consumo.
 
 Dos imprescindibles:
 
-
sudo apt install guake terminator
+
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. @@ -216,7 +216,7 @@ También instalo ''rxvt'' para tener una alternativa ligera al ''terminator''. ''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
+
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 == @@ -2035,3 +2035,4 @@ Tenemos dos opciones:
apt install python-is-python2
 apt install python-is-python3
+“test” diff --git a/out/LinuxMintUlyana.odt b/out/LinuxMintUlyana.odt index 95f90fac18bdd462d4d66b14b00cf0f9656df876..af31c7a57f541e0276d0f4e1f8c0b15f10966826 100644 GIT binary patch delta 1059 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 DRM=xI delta 8419 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 ps<>