Archivo de la categoría: Sistema

GNU/Linux. Aspectos relativos al sistema operativo.

Chequear la batería del portátil desde línea de comandos

Aunque todas las distribuciones actuales tienen entornos gráficos con aplicaciones que controlan en todo momento el estado de la batería del portátil y nos muestran avisos cuando queda poca batería, si usáis un entorno más liviano (tipo openbox) y/o queréis comprobarlo por vuestra cuenta, aquí os indico cómo podéis hacerlo.

Para chequear el nivel de la batería podéis usar este script:

REMAINING=`cat /proc/acpi/battery/BAT0/state | awk '/remaining/ {print $3}'`
TOTAL=`cat /proc/acpi/battery/BAT0/state | awk '/present rate/ {print $3}'`
echo "$REMAINING * 100 / $TOTAL" |bc

Y con este otro script podéis controlar también el adaptador para ver cuándo está online y cuándo offline. Este script hace uso del anterior y así, si está sin cable de corriente y la batería baja de un nivel que especificamos se apaga el equipo (es el comando «h» que se ve ahí). El script sería éste:

BAT=`/usr/local/bin/show_bat.sh`
MIN_BAT=10
AC_ADAPTER=`cat /proc/acpi/ac_adapter/ADP0/state | awk '{print $2}'`
if [ $AC_ADAPTER = "off-line" ]; then
        if [ $BAT -lt $MIN_BAT ]; then
                if [ $BAT -lt 3 ]; then
                        echo "El equipo se quedón sin batería" > $HOME/LEEME.txt
                        /usr/local/bin/h
                else
                        zenity --warning --text="Batería baja" --display=:0.0
                fi
        fi
fi
Espero que os resulte útil.

Obteniendo información del hardware con dmidecode

A veces uno necesita (o simplemente quiere) saber qué componentes tiene su PC exactamente. Una forma de saberlo es abrir el equipo y observar estos datos viendo los componentes directamente.

Sin embargo, si queremos saber esto sin necesidad de abrir el equipo podemos usar dmidecode.

dmidecode es una aplicación para GNU/Linux que permite obtener información sobre el hardware y que está almacenada en la BIOS. Hace uso de DMI (Desktop Management Interface), que no es más que un framework para obtener información sobre los componentes de un ordenador.

Así pues, con dmidecode podemos conocer, entre otros, la marca de la placa base, el modelo, la revisión, la cantidad de memoria RAM instalada, bancos de memoria ocupados y libres, etc., etc.

Lo primero que necesitamos es instalar el paquete dmidecode usando el sistema de paquetería de la propia distribución. En el caso de openSUSE:

zypper in dmidecode

En el caso de ubuntu

aptitude install dmidecode

y así sucesivamente.

Aunque tiene varios parámetros (ya que la información que se puede recopilar es bastante completa), la forma más sencilla de usarla es pasándole una cadena que especifica qué parámetro queremos saber. Por ejemplo, para saber el fabricante de la placa base ejecutaremos esto:

dmidecode -s baseboard-manufacturer

En el caso de mi portátil, el resultado es: Dell Inc.

Para ver todos los parámetros de este tipo ejecutamos esto:

dmidecode -s

Ahí se listan todos, pero podemos obtener aún más información usando otros parámetros.

Si queremos obtener toda la información referente a la memoria, por ejemplo, usaríamos el parámetro -t:

dmidecode -t memory

Esto ofrece mucha información. Si buscamos algo más concreto, como por ejemplo, saber cuál es la capacidad máxima de memoria que admite nuestro equipo pondremos:

dmidecode t16 | grep -i "maximum capacity"

Como siempre, con man podéis obtener toda la información que podéis necesitar para sacarle más partido al comando.

Personalizando zsh: antigen

En una entrada anterior hablaba de oh-my-zsh, que es una forma de personalizar zsh.

Aunque con oh-my-zsh se pueden conseguir cosas bastante interesantes como vimos, con antigen se puede realizar esto con más facilidad.

Antigen es realmente un gestor de plugins para zsh, que actúa de intermediario entre nosotros y el fichero de configuración .zshrc (con antigen es mucho más fácil su gestión).

Para instalar antigen haremos esto:

curl -L https://raw.githubusercontent.com/zsh-users/antigen/master/antigen.zsh > antigen.zsh

source antigen.zsh

A partir de ahora ya podemos probarlo. Como ejemplo vamos a ver cómo activar el plugin que activa el resaltado de la sintaxis en zsh:

antigen bundle zsh-users/zsh-syntax-highlighting

Con esto activamos dicho plugin.

Si queremos probar con un tema para el prompt, nada más fácil:

antigen theme agnoster

Como ya os indiqué en la entrada de oh-my-zsh, tenéis todos los temas aquí.

Si queremos que estos cambios estén siempre activos cuando arranquemos nuestra sesión en el terminal, meteremos estos cambios en .zsh, pero de esta forma:

antigen bundles <<EOBUNDLES
  command-not-found
  gem
  npm
  sublime
  python
EOBUNDLES

De esta forma, podemos meter todos los plugins que queramos aplicar en nuestro zsh metiendo una línea nueva entre los dos EOBUNDLES.

Si queremos aplicar un tema pondremos esto:

antigen theme jdavis/zsh-files themes/jdavis

Y, por último, introducimos la línea que aplica todos los cambios:

antigen apply

Esto último es necesario al usar antigen bundles en lugar de una lista de antigen bundle. La diferencia es que con antigen bundles y luego antigen apply la carga de los plugins es mucho más rápida.

Muy interesante es la opción de actualizar todos los bundles (plugins) que tenéis en vuestro .zshrc. Se hace automática y sencillamente con este comando:

antigen update

Para actualizar el propio antigen usaremos este comando:

antigen selfupdate

Con esto ya deberíais tener vuestro zsh personalizado con plugins y temas chulos usando antigen. Si queréis más información, podéis mirar aquí pero, sobre todo, aquí.

Pasando de bash a zsh

Hace tiempo oí hablar de zsh, un shell bastante potente que tenía peculiaridades que lo hacían, a priori, mejor o, al menos, más completo que el archiconocido bash.

Por cuestiones de tiempo no lo pude probar en su momento, pero no hace mucho me decidí a instalarlo y echarle un vistazo.

Realmente, una vez instalado, zsh (o Z shell) es muy parecido al bash, por lo que si el uso que le dais al terminal es ocasional no vais a notar mucha diferencia en primera instancia. De hecho, en estos casos casi que os recomiendo que ni lo instaléis, porque bash funciona perfectamente y las bondades de zsh son útiles para uno uso más intensivo.

La única excepción que veo a esto es que, aunque no uséis mucho la terminal, queráis darle un aspecto más chulo (más colorido, mostrando más datos, más personalizado), ya que estos menesteres con zsh no son complicados y los resultados son bastante decentes.

Si le dais más uso sí que le sacaréis mayor provecho ya que muchas de las funcionalidades que zsh incorpora y de las que bash carece (*).

Hay un documento (una presentación web) de visita obligada si queréis ver qué puede hacer zsh y que otros shells no puede, y es ésta. En ella se muestran cosas que puedes hacer en zsh y que, por ejemplo, en bash no se puede.

En ella muestran ejemplos prácticos de por qué os puede resultar muy útil sustituir vuestro intérprete de comandos actual por zsh. Os comento algunas interesantes:

  • El tabulador que se usa para completar un comando, si lo usáis tras introducirlo, os va a completar con los parámetros del comando. Por ejemplo, si ponéis zypper in y le dais al tabulador, os va a mostrar los distintos parámetros de zypper que comienzan con las letras in, como pueden ser info o install, por ejemplo.
  • Si accedéis a una ruta de directorios muy profunda, como por ejemplo:
/home/amms/un/directorio/cualquiera/pero/profundo

y queremos ir al directorio:

/home/amms/otro/directorio/cualquiera/pero/profundo

no hace falta que reescribamos la ruta completa, sino que podemos poner esto:

cd un otro

y lo que hará será sustituir en la ruta actual el directorio un por otro, ahorrándonos mucho tiempo y la molestia de tener que reescribirla por completo.

  • Existe la posibilidad de poner una cadena como prompt derecho. Podemos usar distintos parámetros para personalizarlo (también el izquierdo), pudiendo ser éstos la fecha, la hora, la ruta, el usuario, usar colores, etc.
  • Se pueden usar lo que se denominan alias globales. Ejemplo:
alias -g p='-ef | grep'

que es muy útil, al menos para mí.

Para instalarlo podéis usar el gestor de paquetes de vuestra distro, porque está en todas las distros conocidas (si no lo está, cambiad de distro, ¡ya!). Una vez instalado tenéis que especificar que queréis que éste sea vuestro shell por defecto. Para ello, ejecutáis como root:

chsh -s `which zsh` $USER

Si os animáis a instalarlo y tenéis alguna pega me podéis poner un comentario y lo vemos.

En otro artículo os hablaré de cómo personalizar fácilmente zsh (sí, me refiero a  usar cosas como oh-my-zsh o antigen).

(*) Realmente hay algunas cosas que sí que se pueden implementar en bash con funciones pero es un poco más rudimentario que zsh en general para aspectos de personalización y de funcionalidad práctica en general.

Monitorizar temperatura de disco duro con hddtemp

hddtemp es un comando de Linux que permite monitorizar la temperatura del disco duro de vuestro equipo. Es un comando que hay que ejecutar como root (o con sudo). Hay que pasarle como parámetro el disco duro que queremos monitorizar. Ejemplo:

[ user ] [~] > /usr/sbin/hddtemp /dev/sdb
/dev/sdb: ST9750420AS: 39°C

Si lo queréis ejecutar con vuestro usuario debéis aplicarle el setuid bit de esta forma:

chmod u+s /usr/sbin/hddtemp

Con esto se consigue que el programa hddtemp adquiera los permisos el propietario del mismo (root).

Yendo un paso más allá, podéis incorporar esta información en conky. Conky es un programa para monitorizar cosas en vuestro PC y, en general, mostrar información al respecto. En este caso particular, nos mostraría constantemente la temperatura del disco duro.

Levantando servicios tras el arranque con systemd

Hace no mucho comenté en un artículo que tras la adopción de systemd en openSUSE poco a poco ha ido cambiando la manera de gestionar el arranque del sistema.

Una ventaja -entre otras- es que arranca muy rápido, pero un inconveniente -para mí, al menos- es que no funcionan los scripts de if-up.d. Os recuerdo que estos scripts se ejecutan cada vez que la interfaz de red se levanta. Estoy me venía genial para levantar el servicio Mediatomb que configura mi PC como un servidor DLNA (para ver las pelis, las series, etc., en la tele).

En openSUSE 13.2 ya no funcionan los scripts if-up.d como comenté en dicho artículo. A partir de ahora hay que crear un servicio de systemd que arranque automáticamente en cada inicio. En systemd, los servicios se llaman units. Dado que hay mucha información sobre systemd en Internet, no voy a explicar cada aspecto nuevo. Simplemente diremos que unit es un archivo que especifica un proceso que  systemd arrancará y target es un conjunto de units. El target más importante para nosotros será el multi-user.target, que es equivalente al runlevel 5 de SysVinit.

A continuación vamos a comentar cómo crear un servicio personalizado (una unidad –unit-) para ejecutar el programa que queramos en el arranque. Además, veremos cómo especificar si éste depende de otro (*).

Básicamente, se trata de crear un archivo de texto plano en /etc/systemd/system con el nombre MISERVICIO.service. Lógicamente, reemplazáis MISERVICIO por el nombre que queráis. En mi caso se llama mediatomb.service y éste es su contenido:

[Unit]
Description=Mediatomb
After=mysql.service
Requires=mysql.service

[Service]
TimeoutStartSec=0
ExecStart=/usr/bin/mediatomb-mysql

[Install]
WantedBy=multi-user.target

Vemos tres secciones principales: Unit, Service e Install. Vamos a analizar los distintos parámetros de cada sección.

En la primera sección (Unit) especificamos una descripción. En la segunda indicamos que el servicio «mysql» debe estar arrancado antes que el nuestro. La opción Requieres indica que la activación/desactivación de nuestro servicio depende de la activación/desactivación del especificado en dicha opción.

En la sección Service especificamos, entre otros, el comando a ejecutar: ExecStart. El parámetro TimeoutStartSec es el tiempo tras el cuál, si el servicio no ha arrancado, se considera fallo y se detiene. Si se especifica «0», como ha sido el caso, se ignora este parámetro.

Por úlitmo, en la sección Install especificamos la cláusula WantedBy, en la que indicamos el target al que pertenece dicha unidad.

Aquí y aquí tenéis más información sobre los distintos parámetros que acepta este fichero.

Más información sobre las generalidades de systemd:

(*) Esto es fundamental en mi caso, pues tengo configurado mediatomb con mysql y necesito este último en ejecución antes de arrancar mediatomb.

Redimensionar pantalla para ocuparla completamente

Es un título un poco raro, pero no se me ocurría otro (*), lo siento. Lo que quiero decir es lo que os comento a continuación.

Os puede ocurrir que, trabajando en Linux (también me ha ocurrido en Windows) la imagen no ocupe toda la pantalla FullHD de 23″ (por ejemplo). En cualquier caso la imagen se ve correctamente, lo que ocurre es que en lugar de ser del tamaño de vuestra pantalla (23″ en el ejemplo que estoy poniendo) es menor (por ejemplo 21″ ó 22″). Este efecto se denomina underscan.

Si vuestra tarjeta es ATI podéis crear un script con estos comandos:

aticonfig --set-dispattrib=dfp3,positionX:0
aticonfig --set-dispattrib=dfp3,positionY:0
aticonfig --set-dispattrib=dfp3,sizeX:1920
aticonfig --set-dispattrib=dfp3,sizeY:1080

Al ejecutarlo veréis como se dimensionan cada uno de los distintos extremos de la pantalla.

Donde dice dfp3 tendréis que poner el que corresponde con vuestro monitor. Para obtenerlo tendréis que ejecutar, tal y como indican aquí, el siguiente comando:

aticonfig –query-dispattrib=DISPLAYTYPE,positionX

donde DISPLAYTYPE puede ser uno de éstos:  crt1, lvds, tv, cv, tmds1, crt2, tmds2, tmds2i, dfp1, dfp2, dfp3, dfp4, dfp5, dfp6. A falta de un método mejor, debéis probar con cada uno de ellos. A mí me funcionó con dfp3.

Si tenéis una nVidia en lugar de una Ati esto no os vale, así que os tocará googlear un poco. En cualquier caso, la solución debe ser parecida.

 

(*) La otra opción era «Solucionar problema de underscan con tarjeta ATI», pero parecía demasiado concreto y técnico, nor?

Listado de comandos muy útiles en Linux

Hay muchas páginas en Internet con listados de comandos básicos en Linux. Si googleáis un poco lo comprobaréis.

Sin embargo, un día me llamó la atención una en concreto en la que se incluyen no sólo los comandos básicos sino otros más avanzados. Lo que más me gusta de esta página es, por un lado, que el listado está ordenado y clasificado por secciones, siendo muy fácil de seguir; por otro lado, los ejemplos son muy muy prácticos. Lo que quiero decir con esto último es que en lugar de mostrar un comando y sus 1500 opciones (al final no te quedas con ninguna, por lo que vale de poco), te muestra los 3 ó 4 ejemplos más prácticos de ese comando.

Así, por ejemplo, vemos cómo saber cuántas horas lleva en funcionamiento nuestro disco duro:

smartctl -A /dev/sda | grep Power_On_Hours

o cuánta RAM tiene nuestro equipo:

grep MemTotal /proc/meminfo

o, por ejemplo, cómo obtener un listado ordenado por tamaño del contenido de un directorio:

du -hs /home/* | sort -k1,1h

El artículo completo con todos los comandos lo tenéis aquí.

Si estáis empezando a usar la terminal de Linux os vendrá muy bien. Si sois usuarios más avanzados, no dejéis de echarle un vistazo porque seguro que hay comandos y opciones que no conocíais.

Cómo montar en Linux los distintos formatos de imágenes de disco

En Linux es muy sencillo montar una imagen de tipo ISO (.iso) y acceder fácilmente al contenido:

# mount -t iso9660 -o loop archivo.iso /path/donde/lo/quiero/montar

Esto es útil, por ejemplo, cuando os descargáis una imagen de CD/DVD y en lugar de quemarla en un CD/DVD queréis ver el contenido antes e incluso añadir, quitar o modificar alguno de los archivos que contiene.

El problema es cuando la imagen no va con extensión .iso sino que es otra. ¿Qué hacer entonces? Pues a continuación os muestro una posibilidad: convertir la imagen a ISO.

– Conversión de imagen con formato .bin, .cue

# aptitude install bchunk
$ bchunk archivo.bin archivo.cue nuevoarchivo.iso

-Conversión de imagen con formato .nrg (de Nero)

# aptitude install nrg2iso
$ nrg2iso archivo.nrg nuevoarchivo.iso

-Conversión de imagen con formato .mdf, .mds

# aptitude install mdf2iso
$ mdf2iso archivo.mdf nuevaimagen.iso

-Conversión de imagen con formato .img (CloneCD)

# aptitude install ccd2iso
$ ccd2iso imagen.img imagen.iso

Una vez que tenemos el iso ya podemos, como decíamos al principio, montarlo para ver el contenido o quemarlo en un disco óptico usando, por ejemplo, el comando cdrecord (o cualquier programa de grabación que uséis).

 

Renombrar pendrives y discos externos en Linux

Una forma de renombrar los pendrives que conectáis en vuestro equipo con Linux es usando las utilidades mtools, que son unas utilidades para realizar ciertas cosas con los sistemas tipo FAT/FAT32.

Los primero será instalarlas, así que si estamos en una distro Debian o derivada haremos:

# aptitude install mtools

Si es una openSUSE:

# zypper in mtools

Una vez instaladas, vamos a ver cómo usarlas para renombrar nuestro pendrive. Primero lo conectamos y vemos qué nombre de fichero dispositivo corresponde al pendrive con el comando:

$ mount

Supongamos que el pendrive está montado en /dev/sdd1.

Ahora podemos mostrar el nombre de la etiqueta actual:

# mlabel -i /dev/sdd1 -s ::

Podemos cambiarlo con el comando:

# mlabel -i /dev/sdd1 ::mipendrive

donde «mipendrive» es el nuevo nombre del pendrive.

Para hacer lo anterior también podemos introducir este comando:

# mlabel -i /dev/sdd1

donde nos mostrará el nombre actual y nos pedirá el nuevo, es decir, es lo mismo que los dos comandos anteriores pero de forma interactiva. Si no queremos cambiarla pulsamos Control+C.

Con esto ya tenéis una forma sencilla de renombrar vuestros pendrives.

Que paséis una Nochevieja magnífica en compañía de vuestros seres queridos. ¡Nos vemos el año que viene!