Posts tagged "Configuraciones":
Bloqueando las llamadas de spam automáticamente en Android
Hace tiempo que no publicaba nada nuevo, no porque no tenga cosas que contar sino, más bien, porque no soy capaz de encontrar el tiempo y la calma necesaria para hacerlo. Hoy comparto un tema que he descubierto recientemente.
Seguro que has comprobado que la app del teléfono Android que tienes, cuando recibes una llamada te indica si puede considerarse spam, es decir, una llamada no deseada que suele corresponderse con la que realiza alguien desde el otro lado del teléfono para venderte algo, con la habilidad de hacerlo siempre en la hora más inoportuna. Posteriormente, estas llamadas también aparecen en el listado de llamadas recientes identificadas como spam.
Pues bien, hace poco descubrí como bloquear estas llamadas. Bloquear significa que las llamadas llegan al teléfono pero este ni te suena ni te deja aviso de llamada perdida, aunque luego, cuando miras en el historial, allí están.
Veamos cómo hacerlo (comprobado que funciona en teléfonos con versiones de Android 9 y superiores):
- Pulsamos sobre la app del teléfono, esta:
Pulsamos sobre los tres puntitos que hay al final de la barra de búsqueda:

- En el menú que aparece, pulsamos sobre "Ajustes":
- En la pantalla a la que llegamos pulsamos sobre "Identificación de llamada y spam":
- Y ahora, en el último paso, activamos la opción "Filtrar llamadas de spam" así:
A partir de este momento las llamadas que "Android" ya reconozca como "spam" te llegarán al teléfono pero ni te sonará ni te dejará aviso de llamada perdida, aunque, como decíamos antes, si entras en el listado de llamadas recientes sí las verás. En la siguiente imagen puedes ver como las veo yo en mi Motorola y un amigo en su Samsung:
Si quieres ayudar "al sistema Android" a identificar llamadas de spam que aún no son reconocidas, haz esto: en el listado de llamadas recientes, pulsa y mantén un momentito pulsado la llamada que has recibido, cuando se despliegue el siguiente menú de opciones, pulsa sobre "Bloquear/Marcar como spam".
Mediante inteligencia colectiva, si todos lo vamos haciendo, Android irá aprendiendo qué números son los molestos y acabará identificando su llamada como spam. Y con la configuración vista arriba, nosotros estaremos protegidos de las infinitas molestias que nos ocasionan.
¡Por un mundo más humano! ¡Por un mundo con menos ruido!
Comentarios
Felicitaciones (Rogelio G 14/05/2022 - 13:42)
He seguido paso a paso las indicaciones y en mi Samsung S9 con versión 10 de Android funciona perfectamente…
Un gran paso hacia la tranquilidad.
Muchas gracias.
Muchas gracias a ti, amigo, (Godofredo Fdez. 14/05/2022 - 13:44)
Muchas gracias a ti, amigo, por compartirlo ;-)
Cómo activar "tap to click" en GNU/Linux (Debian)
Obtenido de aquí (Activate tap to click on touchpad?): https://unix.stackexchange.com/questions/337008/activate-tap-to-click-on-touchpad
¿Qué es "tap to click"? Es el efecto de dar un golpecito en el "touchpad" (panel que hace de ratón en muchos portátiles, sobre todo modernos) para hacer click, pero sin llegar a hundirlo (si lo hundes sería simplemente "hacer click") ;-). Y la verdad es que cuando te acostumbras es más cómodo y más rápido.
Lee el artículo completo, hasta el final, antes de hacer nada.
Funciona si llevas a cabo los siguientes pasos (comprobado en Debian Buster):
- Elimina el paquete "xserver-xorg-input-synaptics". (importante)
- Instala este otro "xserver-xorg-input-libinput":
En muchos casos es suficiente con comprobar que tenemos instalado el paquete "xserver-xorg-input-libinput", y no este otro "xserver-xorg-input-synaptics package".
- Como root:
3.1) Si no existe, crea este directorio "etc/X11/xorg.conf.d"
mkdir /etc/X11/xorg.conf.d
3.2) Si no existe, crea este fichero "40-libinput.conf" (basta con hacer copy/paste de lo que sigue en una línea de comandos):
echo 'Section "InputClass" Identifier "libinput touchpad catchall" MatchIsTouchpad "on" MatchDevicePath "/dev/input/event*" Driver "libinput" Option "Tapping" "on" EndSection' > /etc/X11/xorg.conf.d/40-libinput.conf
3.3) Rearranca con "Desktop Manager" (o apaga y enciende), por ejemplo:
o
Para más información, puedes consultar esto: Debian wiki : Enable tapping on touchpad ( https://wiki.debian.org/SynapticsTouchpad#Enable_tapping_on_touchpad ).
Salud!
Envío de email cuando hay un login por ssh
En máquinas conectadas directamente a Internet (y esto incluye el acceso a ellas vía un puerto abierto del Firewall), es recomendable estar atento a los "logins de usuario" que se producen. En entornos profesionales, además del aviso de correo que programamos aquí, es conveniente hacer uso de otras herramientas tipo SIEM o HostIDS. En mi servidor, que es pequeñito y con pocos recursos, yo utilizo lo que sigue.
He agregado esto al fichero "/etc/pam.d/sshd".
# Envío de correo cuando login session optional pam_exec.so /root/bin/send-mail-on-ssh-login.sh
El fichero completo (/etc/pam.d/sshd), como referencia y copia de seguridad, está adjunto al final de este artículo (le has agregado la extensión .txt para que sea "subible" al blog).
Y he creado el script correspondiente en "root/bin" con este contenido:
#!/bin/sh
if [ "$PAM_TYPE" != "open_session" ]
then
exit 0
else
{
echo "User: $PAM_USER"
echo "Remote Host: $PAM_RHOST"
echo "Service: $PAM_SERVICE"
echo "TTY: $PAM_TTY"
echo "Date: `date`"
echo "Server: `uname -a`"
} | mail -s "$PAM_SERVICE login on `hostname -s` for account $PAM_USER" example@example.com
fi
exit 0
¡OJO!: has de modificar la dirección de mail "example@example.com" por la tuya propia donde quieres recibirlos.
Referencias: 1.- http://blog.th-neumeier.de/2011/02/send-email-on-ssh-login-using-pam/ 2.- http://serverfault.com/questions/400613/send-notification-email-when-the-ubuntu-server-is-remoted-via-ssh 3.- http://www.tiger-computing.co.uk/get-notified-with-every-ssh-login/ 4.- http://www.farinspace.com/secure-login-linux-server/ 5.- http://www.mydigitallife.info/how-to-get-linux-server-sends-email-alert-on-root-login/
Para avisar cuando alguien hace login como root (no permitido por ssh, sólo como "promoción interna" ;-)), añadimos al .bashrc de root lo siguiente (¡¡OJO!! No hagas copy/paste de esta línea. Es mejor que la teclees pues debe de haber -introducidos por el "parser" de coloreado de sintaxis- códigos de control extraños en algunos caracteres que no funcionan si la copias):
echo 'ALERT - Root Shell Access () on:' `date` `who` | mail -s "Alert: Root Access from `who | cut -d"(" -f2 | cut -d")" -f1`" example@example.com
Espero que te sea útil.
Si consideras alguna parte mejorable, por favor, indícamelo con un comentario. Como siempre, te estaré muy agradecido.
Archivos adjuntos
Cómo dejar de ver la sección "Personas" en Lineage OS (Android)
Llevaba un tiempo que, al buscar un contacto en Android, obtenía información del contacto buscado y también una sección "Personas" en la que aparecían, siempre, supuestos "contactos alemanes" que no tenían nada que ver conmigo. Mira:
Después de pelearme un rato con Google, haciendo búsquedas que me indicaran de dónde podrían venir esos "supuestos contactos" que aparecían en dicha sección, he sido capaz de encontrarlo por mí mismo, con esa extraña mezcla de intuición y suerte.
Está todo explicado en el pdf que cierra este artículo. Si a ti también te ocurre, y estás cansado de que sea así, abre dicho pdf y sigue los pasos indicados.
Yo estoy usando "Lineage OS" (sobre el que escribiré un artículo pronto), si tú estás utilizando la versión de Android que venía (o se actualiza automáticamente) en tu teléfono, por favor, déjame un comentario para que sepa que también ocurre en otros teléfonos con otras versiones del sistema operativo.
¡Gracias!
Archivos adjuntos
Eligiendo el sistema operativo que Grub arranca por defecto
Hola.
Este artículo es un resumen de las indicaciones "que funcionan" (lo he probado) recogidas en este hilo de la comunidad de Ubuntu: https://askubuntu.com/questions/52963/how-do-i-set-windows-to-boot-as-the-default-in-the-boot-loader
Así, procedemos de esta forma:
- Listamos el número y detalle de los sistemas que ha detectado Grub en nuestro equipo:
godo@TuChi:~$ fgrep menuentry /boot/grub/grub.cfg
if [ x"${feature_menuentry_id}" = xy ]; then
menuentry_id_option="--id"
menuentry_id_option=""
export menuentry_id_option
menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-bb5b1d8f-283e-4ea2-905f-630da5f13971' {
submenu 'Opciones avanzadas para Debian GNU/Linux' $menuentry_id_option 'gnulinux-advanced-bb5b1d8f-283e-4ea2-905f-630da5f13971' {
menuentry 'Debian GNU/Linux, con Linux 4.9.0-9-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.9.0-9-amd64-advanced-bb5b1d8f-283e-4ea2-905f-630da5f13971' {
menuentry 'Debian GNU/Linux, with Linux 4.9.0-9-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.9.0-9-amd64-recovery-bb5b1d8f-283e-4ea2-905f-630da5f13971' {
menuentry 'Windows 10 (en /dev/sda1)' --class windows --class os $menuentry_id_option 'osprober-chain-01D317734DAEB710' {
menuentry 'Windows 10 (en /dev/sdc1)' --class windows --class os $menuentry_id_option 'osprober-chain-01D163EEA0DA4380' {
godo@TuChi:~$
- Podemos observar, después de la palabra clave "menuentry", el nombre de las "entradas del menú de arranque que muestra Grub" entre comillas simples, por ejemplo: 'Windows 10 (en /dev/sdc1)'.
- Editamos el fichero: /etc/default/grub, así:
root@TuChi:/etc/default# nano grub
Podemos ver cómo queda:
root@TuChi:/etc/default# more grub # If you change this file, run 'update-grub' afterwards to update # /boot/grub/grub.cfg. # For full documentation of the options in this file, see: # info -f grub -n 'Simple configuration' GRUB_DEFAULT=0 #GRUB_DEFAULT="Windows 10 (en /dev/sdc1)"
- La opción "GRUBDEFAULT=0" controla la entrada por defecto que va a ser arrancada. Aquí, donde lo vemos igualado a "cero", significa que arrancará la primera entrada que haya en el menú de arranque, en mi caso, 'Debian GNU/Linux, con Linux 4.9.0-9-amd64'. Si queremos que arranque otra, podemos indicarle el nombre de la entrada deseada, según lo hemos visto antes aparecer tras la palabra "menuentry", pero utilizando comillas dobles. Por ejemplo, así:
GRUB_DEFAULT="Windows 10 (en /dev/sdc1)"
- No olvidar nunca esto para actualizar el "verdadero" cargador de arranque de nuestra máquina:
root@TuChi:/etc/default# update-grub Generando un fichero de configuración de grub... Found background image: /usr/share/images/desktop-base/desktop-grub.png Encontrada imagen de linux: /boot/vmlinuz-4.9.0-9-amd64 Encontrada imagen de memoria inicial: /boot/initrd.img-4.9.0-9-amd64 Encontrado Windows 10 en /dev/sda1 Encontrado Windows 10 en /dev/sdc1 hecho root@TuChi:/etc/default#
Y eso es todo.
Utilizando "sudo" en Debian o como jugar a ser Dios
De todos es sabido, y espero que aún más entre los lectores de esta pequeña gota de agua, insignificante, en el océano de Internet, que trabajar con privilegios de administrador (terminología Windows) o superusuario (terminología Unix) en nuestro sistema durante el día a día está totalmente desaconsejado. Como otras muchas veces, Unix se adelantó a Windows (hoy en día esta ventaja ya no es tal, Windows también lo resuelve perfectamente) en esta separación de roles y, de hecho, desde el mismo momento de la instalación de un sistema Unix se obligaba al usuario que lo estaba instalando a: 1.- Elegir la contraseña de root. "root" siempre es el usuario con máximos privilegios: puede instalar y desinstalar aplicaciones, puede modificar/borrar ficheros del sistema… puede ver los buzones de correo de otros usuarios, e incluso puede borrar archivos y "cuentas" completas de otros usuarios (de hecho, es él quien las crea). Por eso, en el argot de los que trasteamos con los sistemas, cuando adoptamos el rol de root solemos describirlo como "me voy a convertir en Dios", porque es omnipoderoso.
- A elegir una cuenta de usuario "normal", sin privilegios, que sólo puede utilizar las aplicaciones instaladas por root, no puede ni instalar ni desinstalar, ni modificar partes críticas, clave, del sistema, ni ver los ficheros "confidenciales" de otros usuarios (siempre que los permisos estén bien puestos), etc.
Pero es más, y este es el verdadero quid de la cuestión: desde el inicio, desde el primer "login" a la máquina, el usuario con el que se trabaja (esto es flexible según la distribución, pero hay algunas que lo obligan) es el usuario normal. Y todo el mundo que utilizamos Unix o GNU/Linux en nuestro día a día así lo hacemos.
Pero, ¿qué pasa si en un determinado momento necesitas hacer algo como root? Pues Unix también resolvió esto hace mucho tiempo. Cuando aún no había entornos gráficos los sistemas Unix ya eran multiusuario y multitarea. Habrías otra consola, como si tuvieras varias pantallas para trabajar sobre la misma pantalla física, y entrabas como root. Pero ni siquiera eso era/es necesario: puedes cambiar tu personalidad y pasar a ser root haciendo uso del comando "su", que te pide la contraseña de root y, si la sabes, te convierte en root:
[23:07:39(godo@surco)~]> su Contraseña: [23:21:41(root@surco)/home/godo]#
Y ya puedes estar trabajando un rato (no sólo un comando, sino muchos) como root. Y esto es importante para entender la principal diferencia con sudo. ¿Qué permite sudo? sudo permite ser root "sólo" para ejecutar un comando, cuando ese comando termina sigues siendo tú, ese usuario normal sin privilegios. ¿Y qué comando es el que te permite ejecutar sudo? Esta es la segunda clave del tema: sólo aquellos para los que te haya autorizado root a "echarle una mano". Imagínate que quieres montar una determinada partición de una máquina que suele estar desmontada porque en ella se albergan las copias de seguridad. El administrador de esa máquina, root, puede delegarte sólo esa tarea. Para ello en el fichero /etc/sudoers (que nunca se edita de forma directa sino haciendo uso de la utilidad "visudo") root puede escribir estas líneas:
godo ALL=(ALL) NOPASSWD: /bin/mount
(NOPASSWD es para que no te solicite password. Si no se pone, te la solicitaría).
Así, el usuario "godo" puede utilizar sudo "sólo" para ejecutar el comando "mount" como superusuario.
Si el usuario "godo" no estuviera "capacitado" para ejecutar un comando vía "sudo", y aún así lo intentara, "root" sería notificado vía mail, siendo este que sigue el "cuerpo" del correo:
surco : Jun 27 20:33:40 : godo : user NOT in sudoers ; TTY=pts/0 ; PWD=/home/godo ; USER=root ; COMMAND=/usr/bin/apt-get update
¿Qué hacen distribuciones como Ubuntu, y yo suelo configurar en mi Debian? Pues Ubuntu directamente impide que root haga "login" en la máquina, es decir, siempre has de entrar en el sistema con el usuario sin privilegios, y si necesitas utilizar "cualquier comando" (sin límites) en modo "privilegiado" recurres a "sudo". De hecho, "root" en Ubuntu no tiene contraseña y nunca puedes acceder a ser "root" de forma "total" (no funciona "su" hasta que no le pones contraseña a "root" utilizando "sudo" ¡Curioso!). Para que un usuario normal tenga acceso a todos los comandos de "root" sin llegar a "serlo", es decir, vía "sudo", basta que siendo "root" se agregue al usuario "godo", en mi caso, al grupo de usuarios de "sudo" (recuerda que Unix hay grupos de usuarios que comparten "permisos"). Así es como yo lo hago en Debian, supongo que en Ubuntu se hace algo parecido durante la instalación del sistema.
Yo, para recordar esto cuando hago una instalación nueva, conservo unas líneas explicativas en el fichero "sudoers" de mi máquina habitual, que agregué con "visudo", claro. Y desde ahora las conservo aquí también y las comparto con vosotros. Son estas:
[23:30:49(godo@surco)~]> more /etc/sudoers more: no se puede abrir /etc/sudoers: Permiso denegado [23:30:57(godo@surco)~]> sudo more /etc/sudoers [sudo] password for godo: # # This file MUST be edited with the 'visudo' command as root. # # Please consider adding local content in /etc/sudoers.d/ instead of # directly modifying this file. # # See the man page for details on how to write a sudoers file. # # ¡¡OJO!! MIRA UN POCO MAS ABAJO. BASTA CON: # 1. AÑADIR EL USUARIO godo AL GRUPO sudo. # 2. CERRAR LA SESIÓN Y VOLVER A ENTRAR. # Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" # Host alias specification # User alias specification # Cmnd alias specification # User privilege specification root ALL=(ALL:ALL) ALL # Allow members of group sudo to execute any command # Agregamos a Godo al grupo sudo con: # [20:32:31(root@surco)/var/log]> adduser godo sudo # Añadiendo al usuario `godo' al grupo `sudo' ... # Añadiendo al usuario godo al grupo sudo # Hecho. # Otra forma de hacerlo es: # [20:37:04(root@surco)/home/godo]> gpasswd -a godo sudo # Añadiendo al usuario godo al grupo sudo %sudo ALL=(ALL:ALL) ALL # See sudoers(5) for more information on "#include" directives: #includedir /etc/sudoers.d [23:31:12(godo@surco)~]>
Observad al principio, cuando ejecuto el comando "more", como con mi usuario no tengo permisos para ver el fichero, pero sí utilizando "sudo".
Una última cosa, antes hablé de "su", y de que la contraseña que te solicita es la de "root", es decir, te tienes que saber la contraseña de "root", por tanto, cuando utilizas "su" te conviertes en root de "manera ancha". Sin embargo "sudo" no nace para hacer lo mismo que "su", aunque puede "casi llegar a hacerlo", sino que lo que quiere conseguir es un acceso a "hacer uso de privilegios" de forma más granular. Lo que te solicita por tanto no es la contraseña de "root", esta puede seguir siendo totalmente privada para "root" (¡root/Dios sólo hay uno!), sino la tuya, con el único fin de dejar "huella" en el sistema y que "root" sepa quién ha hecho qué. ¡Una verdadera maravilla del ingenio humano!
Espero que os haya gustado y que os acostumbréis a usarlo. Pero sobre todo, que os ayude a pensar.
Y el séptimo día descansó.
Sin telnet en Windows 10
Quizá a alguno de vosotros le haya pasado lo que a mí: voy a conectarme hoy a un viejo dispositivo que sólo permite conexiones utilizando "Telnet", y no puedo. Desde el interfaz de comandos de mi Windows 10 obtengo este error:
"telnet" no se reconoce como un comando interno o externo, programa o archivo por lotes ejecutable.
Me ha extrañado por dos motivos: 1.- ¿Windows 10 no trae telnet instalado por defecto? La respuesta es no. Más información aquí (con solución autóctona Windows 10 incluida). 2.- ¿Y mi instalación de Cygwin tampoco? Pues la respuesta, obviamente, también era negativa.
Así que arranco mi "setup-x86.exe" para instalar "telnet" desde los repositorios de Cygwin, y me encuentro que no existe ningún paquete llamado "telnet". Buscando por la red descubro dos cosas: 1.- Para instalar "telnet" hay que seleccionar el paquete "inetutils". 2.- En el sitio donde encuentro lo anterior, aquí, descubro que su autor utiliza un comando muy parecido a "apt-get" (maravilloso gestor de paquetes del mundo Debian que por mi histórico, como sabéis los lectores de este blog, controlo bastante bien), en concreto: "apt-cyg", que tiene toda la pinta de funcionar de forma muy parecida a la "suite apt" original… ¡A investigar!
En los primeros resultados de esta búsqueda creo que hay material suficiente para profundizar en el uso de "apt-cyg".
Conclusión: si quieres utilizar "telnet" en Windows 10 y eres usuario habitual del "port" del mundo GNU/Linux vía "Cygwin", instala el paquete "inetutils":
[15:39:35(godo@surco)~]> telnet --version telnet (GNU inetutils) 1.9.1 Copyright (C) 2013 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later . This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Written by many authors.
Obviamente, creo que no tiene sentido instalar Cygwin sólo para esto, pero si ya lo utilizas para hacer otras muchas cosas, sí que lo tiene. Sin embargo, si sólo necesitas "telnet", instálalo desde el propio Windows como comentan aquí.
¡Salud, amigos!
P.D.: ni que decir tiene que el uso de "telnet" está tremendamente desaconsejado (toda la información viaja en claro entre tu extremo y el otro) y que, siempre que se pueda, es mejor utilizar "ssh".
Comentarios
Después del ultimo intento (Guillermo 05/12/2016 - 09:46)
Después del ultimo intento con telnets, sshs y demas encontre mobaxterm (http://mobaxterm.mobatek.net/) y me sorprendió.
Lo primero es portable, con lo que te olvidas de instalar cosas (sabras por lo que te lo comento) y después emulaba un entorno X en le PC que es muy útil en algunos momentos.
Pruebalo un día que estes aburrido, a mi me gustó.
Tiene muy buena pinta (Godofredo Fdez. 07/12/2016 - 20:27)
Muchas gracias por dejarme esta referencia, Guillermo. Le he echado un vistazo y tiene buena pinta (aunque no he llegado a instalarlo). La verdad es que desde que instalé Cygwin en mis Windows he automatizado muchas cosas que venía automatizando ya en mis GNU/Linux, reaprovecho scripts y conocimientos. Además tengo todo lo que necesito: ssh, telnet, x-windows, etc. Como ya he dicho en el artículo, instalar Cygwin sólo para el telnet o incluso el ssh me parece un desperdicio, pero si lo utilizas para muchas más cosas del mundo Unix/Linux creo que es una inmejorable alternativa.
Seguimos compartiendo.
Gracias de nuevo por el comentario.
No solicitar confirmación de borrado en Windows 7
Una de las cosas que he descubierto con el uso de las versiones "preview" de Windows 10 (quizá te interese este otro artículo) es que no solicita "confirmación de borrado" una vez que presionas suprimir sobre un archivo o carpeta.
Al principio me sorprendió pero luego me paré a pensar y, básicamente, llegué a estas conclusiones: 1.- Aunque no solicita confirmación, el archivo sigue yendo a la carpeta de reciclaje, luego no se pierde. Es decir, es fácil recuperar un supuesto error. 2.- ¿Cuántas veces borras algo por accidente, donde la confirmación te ha evitado trabajo posterior? Quizá un 5% (y creo que estimo un valor elevado aquí). 3.- ¿Cuántas veces borras algo que realmente deseas borrar? Un 95% (es la misma pregunta que en 2.- pero desde la óptica complementaria :-)).
Entonces, ¿no es mejor no perder el tiempo leyendo y confirmando molestos cartelitos? A mi entender sí. ¡Gracias Windows 10! Has tenido que llegar tú para que simplifique este aspecto ;-).
¿Cómo hacerlo en Windows 7 (creo que en otras versiones es lo mismo)*?*
Os situáis con el ratón sobre la papelera, botón derecho, propiedades… y desmarcáis la opción: "Mostrar cuadro de diálogo para confirmar eliminación".
Espero que os sea útil.
Configurando exim4 para envío de correo a través de un smarthost (gmail)
Lo que sigue ha sido extraído de esta URL: https://wiki.debian.org/GmailAndExim4 He decidido recoger aquí solamente aquello que yo he llevado a cabo a modo de resumen. Quizá algún día tenga que replicarlo en alguna otra máquina y ya no sea capaz de encontrar dicha información. Obviamente, todo lo que sigue hay que hacerlo como root. 1) Reconfiguramos Exim.
#+BEGINQUOTE
# dpkg-reconfigure exim4-config
*.google.com:nuestrousuario@gmail.com:nuestracontraseña
# chown root:Debian-exim /etc/exim4/passwd.client # chmod 640 /etc/exim4/passwd.client
- Finalmente ejecutamos:
# update-exim4.conf # invoke-rc.d exim4 restart # exim4 -qff
- Y hacemos una prueba para ver que funciona:
[21:16:47(root@debian)/etc/exim4]# mail -s "Prueba de envío" noexiste@vivencias.net Enviando con exim a través de gmail como smarthost. Ctrl-D Ctrl-D Cc:
Si al intentar enviar un mail desde la línea de comandos, te aparece este error: "bash: mail: no se encontró la orden", instala este paquete: "apt-get install mailutils". 5) Comprobando en los logs que llega y, obviamente, viéndolo en nuestra bandeja de entrada de gmail.
2014-01-14 21:17:16 1W3AQG-0003OJ-H9 <= root@localhost U=root P=local S=352 2014-01-14 21:17:16 1W3AQG-0003OJ-H9 gmail-smtp-msa.l.google.com [2a00:1450:400c:c05::6d] Network is unreachable 2014-01-14 21:17:18 1W3AQG-0003OJ-H9 => noexiste@vivencias.net R=smarthost T=remote_smtp_smarthost H=gmail-smtp-msa.l.google.com [173.194.67.108] X=TLS1.2:RSA_ARCFOUR_SHA1:128 DN="C=US,ST=California,L=Mountain View,O=Google Inc,CN=smtp.gmail.com" 2014-01-14 21:17:18 1W3AQG-0003OJ-H9 Completed
Y esto es todo. P.D.: Por último, es muy útil la redirección de correo que se puede realizar entre usuarios en un sistema Unix o GNU/Linux. Existe el archivo "/etc/aliases" donde se nombra, en cada una de sus líneas, primero el usuario al que va dirigido el correo y, separado por dos puntos y un espacio, el usuario que en realidad lo va a recibir, es decir, a quien se redirige el correo del primero. Aquí un ejemplo (todas las líneas menos las dos últimas "vienen de serie"):
[18:03:26(godo@surco)~]> sudo more /etc/aliases [sudo] password for godo: # /etc/aliases mailer-daemon: postmaster postmaster: root nobody: root hostmaster: root usenet: root news: root webmaster: root www: root ftp: root abuse: root noc: root security: root clamav: root root: godo godo: noexiste@vivencias.net
Excel en ventanas independientes
Escribo esta entrada a modo de chuleta rápida para conseguir tener abiertos varios documentos Excel en ventanas independientes, de tal forma que podamos colocarlas en el escritorio de forma cómoda para poder ver datos de uno y otro documento, copiar, comparar, etc.
Como podéis ver en la siguiente figura… ¡lo he conseguido!
Las versiones de sistema operativo y Excel donde lo he probado son: Windows 7 y Excel 2010.
Hay que ejecutar los siguientes pasos: 1.- Ejecutar "regedit" en modo administrador. 2.- Desplegar la clave "HKEYCLASSESROOT \ Excel. Sheet.12 \ Shell \ Open" 2.1.- Eliminar la carpeta DDEEXEC 2.2.- Entrar en la carpeta COMMAND 2.3.- Encontramos en esta carpeta (COMMAND) dos valores, uno con el nombre "predeterminado" y otro con el nombre "command". 2.4.- Eliminamos el valor "command". 2.5.- Hacemos doble clic sobre el valor "predeterminado" y añadimos un espacio y "%1" (con las comillas, como aquí) al final de línea, para que el dato quede así: "C:\Program Files\Microsoft Office\Office14\EXCEL.EXE" /dde "%1"
En la siguiente figura podemos ver cómo se ha modificado el valor "predeterminado" y el valor "command" que hay que eliminar (en la figura aún está presente).
3.- Desplegar la clave "HKEYCLASSESROOT \ Excel. Sheet.8 \ Shell \ Open" 3.1.- Eliminar la carpeta DDEEXEC 3.2.- Entrar en la carpeta COMMAND 3.3.- Encontramos en esta carpeta (COMMAND) dos valores, uno con el nombre "predeterminado" y otro con el nombre "command". 3.4.- Eliminamos el valor "command". 3.5.- Hacemos doble clic sobre el valor "predeterminado" y añadimos un espacio y "%1" (con las comillas, como aquí) al final de línea, para que el dato quede así: "C:\Program Files\Microsoft Office\Office14\EXCEL.EXE" /dde "%1"
¡A disfrutar del Excel sin las ventanas anidadas!
El foco sigue al ratón en Windows 7 y Windows 10
Comprobado que funciona tanto en Windows 7 como en Windows 10. En Windows 8 creo que también lo hace (según he visto en alguna búsqueda en google) pero no lo he probado. Si tú lo has probado y me lo quieres confirmar, por favor, escríbeme. Gracias.
Los que hemos trabajado en un entorno X Window (GNU/Linux y, en general, cualquier tipo de Unix) nos hemos acabado acostumbrando al juego del ratón. En estos entornos el ratón activa la ventana sobre la que se sitúa sin necesidad de hacer click en ningún sitio de esta. Y es más, la ventana es activada aún permaneciendo en segundo plano, es decir, sin pasar a ser la que está encima de todas. Esta última característica es muy útil a la hora de pasar información de unos documentos a otros, comparar, etc.
Así lo explican en el FreeBSD Handbook:
focus-follows-mouse The window that is under the mouse pointer is the window that has the focus. This may not necessarily be the window that is on top of all the other windows. The focus is changed by pointing at another window, there is no need to click in it as well.
En Windows 7 (y creo que en el resto también funciona) es fácil obtener este comportamiento con un poco de hacking en el registro (Menú inicio -> Buscar programas y archivos -> regedit).
La siguiente figura muestra el estado ya modificado de la clave de registro que habilita dicho comportamiento(HKEYCURRENTUSER -> Control Panel -> Desktop):
Para lograrlo hacemos doble click en el campo "UserPreferencesMask" y modificamos el primer valor: pasamos el 9e (que tendréis por defecto) a 9f. Pulsamos aceptar y cerramos la sesión (no hace falta apagar y encender) y volvemos a entrar. El comportamiento de las ventanas ahora es el descrito (focus-follows-mouse).
¡Magnífico! ;-)
ACTUALIZACIÓN del 19 de abril de 2011 Es un poco molesto que la activación de la ventana que recibe el "foco del ratón" se realice inmediatamente. En windows 7 este efecto hace que, por ejemplo, cuando pulsamos la flechita de la barra de tareas que despliega la "ventanita" con los iconos ocultos, al dirigir el ratón hacia un icono para activar la aplicación la ventanita desaparezca antes de llegar al icono, pues el despliegue que justo acabamos de ordenar se desactiva al transitar sobre la propia barra de tareas. Para evitar este efecto hemos de incluir una nueva clave en el registro tal y como muestra la siguiente figura:
¡OJO! No confundáis la clave "ActiveWndTrackTimeout", que no vale para nada (respecto a lo que nos ocupa -sospecho que es un error porque no he encontrado información sobre ella-) con la que tenéis que agregar (en mi windows no venía de serie): ActiveWnd*Trk*Timeout (falta la "ac" de "Track"). La figura anterior muestra ambas en su estado final (funcionando el retardo) y la ventanita que muestra como hay que editar la clave que hay que añadir.
Salud.
A vueltas con los sistemas de codificación
Los que llevamos trabajando con GNU/Linux unos años (casi un par de decadas ya) hemos sufrido los inconvenientes asociados al soporte de distintos juegos de caracteres. En los inicios las distribuciones no traían por defecto activado el soporte del sistema de codificación ISO-8859-1, por lo que conseguir nuestros caracteres con tilde ("jamón") era imposible, y no hablemos de conseguir nuestra letrita española: "ñ".
Así, era tarea obligada conseguir que las diversas aplicaciones, y todo el entorno, soportara ese juego de caracteres. Tras algunos ajustes en diversos ficheros de configuración la sonrisa brillaba en nuestra cara cuando conseguíamos, al fin, escribir sin problemas en nuestro expresivo idioma.
Uno de esos ajustes aún pervivía en mis ficheros de configuración: mi ".emacs" incluía las siguientes líneas:
(custom-set-variables '(current-language-environment "Latin-9") '(default-input-method "latin-9-prefix") )
Esto provocaba que, aún hoy cuando el sistema de codificación por defecto y anchamente utilizado (y recomendado) es utf-8, mi genial editor emacs seguía utilizando el sistema de codificación de antaño, lo que provocaba problemas de visualización posteriores de esos ficheros con otras herramientas que, automáticamente, querían utilizar el sistema de codificación más actual: había un choque entre el antiguo iso-8859-1 y el nuevo utf-8. Podéis ver un ejemplo de lo que ocurría en la siguiente figura:
Tocaba, pues, investigar como convertir los ficheros con sistema de codificación antiguo al nuevo. ¿Cuál es el sistema de codificación antiguo en el que están codificados esos ficheros que se ven con extraños caracteres? ¿Cómo podemos saberlo? Fácil, abrimos con emacs el fichero, pulsamos Ctrl-H Shift(Mayús)-C y aparece la siguiente frase en la línea de comandos del editor: "Describe coding system (default current choices): ", pulsamos "Intro" y obtenemos algo parecido a esto:
Coding system for saving this buffer: 1 -- iso-latin-1-unix Default coding system (for new files): u -- mule-utf-8 (alias: utf-8) Coding system for keyboard input: nil Coding system for terminal output: u -- utf-8 (alias of mule-utf-8) Defaults for subprocess I/O: decoding: u -- mule-utf-8 (alias: utf-8) encoding: u -- mule-utf-8 (alias: utf-8)
Fijaos en el primer par de líneas. El fichero está siendo grabado en el sistema de codificación en el que ha sido leído, en nuestro caso: iso-latin-1-unix. Por tanto, el proceso de conversión ha de ser de iso-latin-1-unix a utf-8.
Bien, instalamos una pequeña y útil herramienta (al más puro estilo UNIX):
[19:51:17(root@surco)/home/godo/bin]> apt-get install konwert Leyendo lista de paquetes... Hecho Creando árbol de dependencias Leyendo la información de estado... Hecho Se instalarán los siguientes paquetes extras: konwert-filters Paquetes sugeridos: konwert-dev Se instalarán los siguientes paquetes NUEVOS: konwert konwert-filters 0 actualizados, 2 se instalarán, 0 para eliminar y 0 no actualizados. Necesito descargar 278kB de archivos. Se utilizarán 2122kB de espacio de disco adicional después de esta operación. ¿Desea continuar [S/n]? Des:1 http://mirror.switch.ch stable/main konwert-filters 1.8-11.2 [230kB] Des:2 http://mirror.switch.ch stable/main konwert 1.8-11.2 [47,8kB] Descargados 278kB en 1s (201kB/s) Reading package fields... Done Reading package status... Done Retrieving bug reports... Done Parsing Found/Fixed information... Done Seleccionando el paquete konwert-filters previamente no seleccionado. (Leyendo la base de datos ... 166593 ficheros y directorios instalados actualmente.) Desempaquetando konwert-filters (de .../konwert-filters_1.8-11.2_all.deb) ... Seleccionando el paquete konwert previamente no seleccionado. Desempaquetando konwert (de .../konwert_1.8-11.2_i386.deb) ... Procesando disparadores para man-db ... Configurando konwert-filters (1.8-11.2) ... Configurando konwert (1.8-11.2) ... [19:51:38(root@surco)/home/godo/bin]> apt-get clean [19:51:42(root@surco)/home/godo/bin]> exit
Miramos su página de manual:
[19:51:43(godo@surco)~/bin]> man konwert
Y procedemos a la conversión:
[19:54:19(godo@surco)~/bin]> konwert iso1-utf8 csgodo -o csgod
Observamos que el filtro que hay que utilizar (obtenido de la página de manual) para llevar a cabo la conversión que nos interesa se llama iso1-utf8, el fichero de entrada, el origen que queremos convertir, es csgodo, y el de salida, ya convertido a utf-8 es csgod. Lo vemos con un visor: more, less, etc. Comprobamos que está bien y sobrescribimos nuestro fichero original:
[19:55:20(godo@surco)~/bin]> mv csgod csgodo mv: ¿sobreescribir «csgodo»? (s/n) s [19:55:31(godo@surco)~/bin]>
A continuación podéis observar el resultado tras la conversión:
¡Objetivo conseguido!
Por último, para comprobar que tenéis vuestro entorno configurado para trabajar con el sistema de codificación utf-8 por defecto, basta hacer:
[20:59:47(godo@surco)~]> locale LANG=es_ES.UTF-8 LANGUAGE=es_ES.UTF-8 LC_CTYPE="es_ES.UTF-8" LC_NUMERIC="es_ES.UTF-8" LC_TIME="es_ES.UTF-8" LC_COLLATE="es_ES.UTF-8" LC_MONETARY="es_ES.UTF-8" LC_MESSAGES="es_ES.UTF-8" LC_PAPER="es_ES.UTF-8" LC_NAME="es_ES.UTF-8" LC_ADDRESS="es_ES.UTF-8" LC_TELEPHONE="es_ES.UTF-8" LC_MEASUREMENT="es_ES.UTF-8" LC_IDENTIFICATION="es_ES.UTF-8" LC_ALL= [20:59:48(godo@surco)~]>
Si no tenemos esos locales en nuestro sistema podemos cambiar los que actualmente tengamos haciendo uso, como root, del siguiente comando:
[21:02:40(root@surco)/home/godo]> dpkg-reconfigure locales
Nos aparecerá una lista, nos movemos por ella con "Av Pág / Re Pág" o con los cursores, seleccionamos/deseleccionamos con la barra espaciadora, y cuando tengamos lo que queremos pulsamos "Tab" y nos vamos hasta "Aceptar". Pulsamos "Intro".
Y, claro está, no olvidéis borrar del fichero de configuración de emacs (~/.emacs) las líneas que mencionaba más arriba. Desde la versión 22 emacs es capaz de adaptarse a lo configurado en nuestro entorno.
Salud.
Visualizando archivos de código con sintaxis coloreada
ACTUALIZADO: 14-03-2022. Ver actualización al final del artículo.
ACTUALIZADO: 27-07-2009. Ver actualización al final del artículo.
Hoy, revisando mis feeds sin leer, he encontrado en este post como hacer algo que llevaba tiempo queriendo conseguir. Muchos de vosotros lo veréis como un punto de "frikismo" avanzado ;-), sin embargo, los que trabajamos mucho tiempo visualizando código hemos aprendido a "apoyarnos" en este tipo de cosas para ganar rapidez en el análisis, detección de errores, etc. ¡OJO! Era necesario conseguir este efecto a la hora de visualizar un fichero, no confundir con editar (para esto ya está el fantástico emacs). En ocasiones es preferible simplemente visualizar para no correr el riesgo de modificar algo.
Bien, lo primero que hemos de hacer es disponer de los paquetes apropiados:
[21:24:19(root@surco)/home/godo]> apt-get install source-highlight less
less es un "paginador"/visualizador de ficheros (sustituto del más ampliamente conocido more), y source-highlight es la herramienta de coloreado de sintaxis que entiende los siguientes lenguajes: C/C++, C Sharp, Bison, Caml, Changelog, Diff, Flex, Fortran, Html, Java, Javascript, Latex, Logtalk, Log files, Lua, ML, Pascal, Perl, PHP, Postscript, Prolog, Python, Ruby, Shell and XML.
Una vez instalado el software necesario, pasamos a crear el fichero .lessfilter en nuestro directorio home:
[21:52:19(godo@surco)~]> more .lessfilter #!/bin/sh source-highlight -fesc -oSTDOUT "$1" 2>/dev/null
Y le damos permisos de ejecución:
[21:34:31(godo@surco)~]> chmod 755 .lessfilter
Finalmente editamos nuestro fichero de configuración de la shell (.bashrc en mi caso) y agregamos lo siguiente:
# Para que less muestre colores export LESS="-R" # Para que evalúe el fichero ~/.lessfilter eval "$(lesspipe)"
Y listo, ya podemos visualizar código con sintaxis coloreada:
less somefile.c less somefile.py less somefile.patch
- - -
ACTUALIZACIÓN: 27-07-2009:
A muchos de vosotros os ocurrirá lo que a mí: cuando intentáis ver un shell script que no termina con extensión .sh, es decir, que no tiene extensión (cosa habitual en el mundo GNU/Linux - Unix), source-highlight no lo detecta y, por tanto, no lo colorea. Bueno, un poco de hacking ;-) nos ayuda a resolver esto:
[21:52:19(godo@surco)~]> more .lessfilter
#!/bin/sh
# ===== POST ORIGINAL =====
# http://petereisentraut.blogspot.com/2009/07/adding-color-to-console-code-syntax.html
# ===== PARA VERISONES 3.X ======
# En Debian ahora, 27-07-2009, están las versiones 2.x
# supongo que cuando entren las versiones 3.x ha de funcionar
# lo que me ha comentado betto said...
# If you use --infer-lang option, and the shell script starts with
# the #!/bin/sh then source-highlight will highlight it as a shell
# script no matter what its extension is (you may want to take a
# look at the file src-hilite-lesspipe.sh
# distributed with source-highlight).
# Hope this helps :-)
# Lorenzo
# 26 July, 2009 14:01
# En este bloque detectamos la extensión del fichero
FILE="$1"
EXTENSION=${FILE##*.}
NAME=${FILE%.*}
# Si EXTENSION y NAME son iguales el fichero no tiene extension,
# en este caso, por defecto, le decimos a source-highlight
# que considere la entrada como un script de shell
if [ "$NAME" = "$EXTENSION" ]; then
EXTENSION=""
fi
if [ "$EXTENSION" = "" ]; then
source-highlight --src-lang=shell -fesc -oSTDOUT "$1" 2>/dev/null
else
source-highlight -fesc -oSTDOUT "$1" 2>/dev/null
fi
- - -
ACTUALIZACIÓN: 14-03-2022:
Mucho mejor, e inmediato, utilizar bat.
[09:49:32(godo@surcopi)~] $ bat --help bat 0.18.3 A cat(1) clone with syntax highlighting and Git integration.
- - - Fuentes originales:
- Peter Eisentraut: Adding Color to the Console: Code Syntax Highlighting with less and source-highlight 2) Peter Eisentraut: Adding Color to the Console: Pygments vs. Source-highlight.
Montar particiones NTFS en GNU/Linux
Muchas veces nos es necesario compartir información, datos, entre los sistemas operativos Windows y GNU/Linux. Antiguamente la mejor forma de hacerlo era utilizar una partición de tipo fat que era fácilmente manejable, en modo lectura y escritura, por ambos sistemas operativos. Hoy en día los discos duros son muy grandes, por tanto, las particiones también son mayores y no es raro trabajar con algunos ficheros de unos cuantos gigabytes (GB) de información. En estos casos, las particiones de tipo fat32, las más evolucionadas de la familia, sólo nos permitirán trabajar con ficheros menores de 4GB, sin embargo, si utilizamos una partición de tipo NTFS podremos utilizar ficheros de hasta 16TB, una cantidad nada despreciable… de momento. Parece lógico que es mejor optar por una partición de intercambio entre ambos sistemas operativos de tipo NTFS. Sin embargo, hasta hace unos años la escritura desde GNU/Linux en particiones NTFS no estaba soportada pero, gracias al proyecto ntfs-3g, podemos disponer de un driver que realiza bien este trabajo (The latest stable version is 2009.4.4, released on April 2, 2009).
¿Cómo he configurado mi sistema para que funcione?
1.- He editado el archivo /etc/fstab y he añadido la siguiente línea:
/dev/sda5 /mnt/interc ntfs-3g rw,user,noexec,noauto,uid=1000,gid=1000 0 0
2.- Como root, he creado el grupo "ntfsuser" y he añadido mi usuario a él:
alpechin:/home/godo# groupadd ntfsuser alpechin:/home/godo# gpasswd -a godo ntfsuser Adding user godo to group ntfsuser
3.- He creado un punto de montaje en /mnt
[23:14:27(godo@alpechin)~]> ls -l /mnt total 4 drwxr-xr-x 2 godo ntfsuser 4096 jun 3 22:29 interc [23:14:32(godo@alpechin)~]>
4.- Como root, he cambiado el grupo y los permisos de la herramienta "ntfs-3g":
alpechin:/home/godo# ls -l /usr/bin/ntfs-3g -rwxr-xr-x 1 root root 32540 may 1 01:01 /usr/bin/ntfs-3g alpechin:/home/godo# chown root.ntfsuser $(which ntfs-3g) alpechin:/home/godo# ls -l /usr/bin/ntfs-3g -rwxr-xr-x 1 root ntfsuser 32540 may 1 01:01 /usr/bin/ntfs-3g alpechin:/home/godo# chmod 4750 $(which ntfs-3g) alpechin:/home/godo# ls -l /usr/bin/ntfs-3g -rwsr-x--- 1 root ntfsuser 32540 may 1 01:01 /usr/bin/ntfs-3g alpechin:/home/godo#
5.- Como root, he añadido mi usuario al grupo "disk" (has de cerrar tu sesión y entrar de nuevo para que este cambio tenga efecto):
alpechin:/home/godo# adduser godo disk [22:54:29(godo@alpechin)~]> id grupos=6[disk],...,1001[ntfsuser] [22:54:30(godo@alpechin)~]>
6.- Y he comprobado que todo funciona (fíjate en la orden "touch adios" que me permite crear un fichero adios en la partición NTFS con la que venimos trabajando):
[22:55:03(godo@alpechin)~]> mount /mnt/interc/ [22:55:06(godo@alpechin)~]> l /mnt total 4,0K drwxrwxrwx 1 godo godo 4,0K jun 3 22:53 interc [22:55:10(godo@alpechin)~]> l /mnt/interc/ total 173M -rwxrwxrwx 2 godo godo 21M may 31 17:10 boot.img.gz -rwxrwxrwx 2 godo godo 153M may 31 17:11 debian-testing-i386-netinst.iso -rwxrwxrwx 1 godo godo 8 jun 3 22:53 hola -rwxrwxrwx 2 godo godo 1,1K may 31 17:10 inst-debian-from-usb.txt drwxrwxrwx 1 godo godo 0 may 31 14:31 RECYCLER drwxrwxrwx 1 godo godo 0 may 31 19:06 System Volume Information drwxrwxrwx 1 godo godo 4,0K may 31 17:02 Utilidades [22:55:16(godo@alpechin)~]> touch /mnt/interc/adios [22:55:27(godo@alpechin)~]> l /mnt/interc/ total 173M -rwxrwxrwx 1 godo godo 0 jun 3 22:55 adios -rwxrwxrwx 2 godo godo 21M may 31 17:10 boot.img.gz -rwxrwxrwx 2 godo godo 153M may 31 17:11 debian-testing-i386-netinst.iso -rwxrwxrwx 1 godo godo 8 jun 3 22:53 hola -rwxrwxrwx 2 godo godo 1,1K may 31 17:10 inst-debian-from-usb.txt drwxrwxrwx 1 godo godo 0 may 31 14:31 RECYCLER drwxrwxrwx 1 godo godo 0 may 31 19:06 System Volume Information drwxrwxrwx 1 godo godo 4,0K may 31 17:02 Utilidades [22:55:29(godo@alpechin)~]>
Ya tengo una partición común para ubicar los datos con los que trabajo tanto en GNU/Linux como en Windows… aumentando mi productividad 8-).
Comentarios
Gracias
NTFS: así se abren (Anonymous 01/06/2014 - 18:33)
Gracias
NTFS: así se abren los ficheros de texto automáticamente en editor en vez de tratar de ejecutarse **
Si tienes archivos de texto en una partición NTFS probablemente al seleccionarlos y pulsar el Enter o hacer doble clic sobre ellos quieras que se abra el editor de texto que uses. Pero puede pasar que el gestor de ficheros te diga que es ejecutable y te pregunte si quieres ejecutarlo o bien ejecutarlo en un terminal (sin darte la opción de ver su contenido -p.e. en Leafpad no se ofrece mientras que en Nautilus sí, incluso se puede hacer de forma automática con la opción de Preferencias correspondiente-).
La solución es fácil: tienes que editar /etc/fstab (como root) y añadir a las opciones de la entrada de ntfs noexec (con una coma por delante).
Saludos
Gracias por el comentario. (Godofredo Fdez. 02/06/2014 - 08:58)
Gracias por el comentario.
Ejecutar un script interactivo *justo antes* de apagar KDE4
Ya vimos aquí por qué necesito hacer este tipo de cosas. Ahora, que permanezco en GNU/Linux Debian testing y que comienzo a disfrutar del formidable KDE4, veo que lo que explicaba en dicho artículo no funciona.
Tras investigar un poquito (con ayuda de google) descubro que en KDE4 se ha sustituido a "dcop" por "dbus", por lo que la llamada a ksmserver para guardar la sesión y apagar el sistema ya no la puedo hacer como la venía haciendo, sino como he leído aquí (en una sola línea):
dbus-send --session --dest=org.kde.ksmserver --type=method_call --print-reply /KSMServer org.kde.KSMServerInterface.logout int32:-1 int32:2 int32:2
Además he descubierto lo complicado que es añadir una aplicación al panel si esta no figura listada en el "menú K". Si figura listada en dicho menú basta con pinchar sobre ella con el botón derecho del ratón y seleccionar la opción: "Añadir al panel", pero si no… ¡es casi imposible!. Así, lo que he hecho para añadir mi script, que hace la copia de seguridad y luego apaga la máquina, es lo siguiente:
1.- He añadido el script al "menú K" dentro del submenú "Objetos perdidos". ¿Cómo? Pinchamos con el botón derecho del ratón sobre la "K" y elegimos "Editor de menús". Una vez dentro del "Editor de menús" seleccionamos el submenú "Objetos perdidos" (yo ya lo tenía creado y en el residía la aplicación kdiff3), o cualquier otro que nos interese, y pulsamos sobre el icono que hay en la fila superior: "Nuevo elemento". Ponemos el nombre del "nuevo elemento", pulsamos aceptar, buscamos el icono que más nos guste y la "orden", es decir el script, navegando por los directorios de nuestra máquina hasta seleccionarlo. 2.- Una vez añadida dicha aplicación/script al "menú K" es muy fácil añadirla al panel: navegamos hasta ella, la pinchamos con el botón derecho del ratón y seleccionamos: "Añadir al panel".
¡Listo!
Archivos adjuntos
Drupal. Clean-URL con lighttpd
Aunque en mi proveedor de hosting el servidor utilizado es el inestimable apache, en casa prefiero optar por un servidor web que sea algo más ligero, por eso trabajo con lighttpd.
Para trabajar con la versión de pre-producción de mi Drupal habilitando el "formato limpio de URL", conocido en el argot como clean-url, en el que desaparecen de las direcciones web símbolos y demás caracteres sobrantes utilizados, normalmente, en las consultas realizadas a las bases de datos, he retocado un par de ficheros de configuración que indico a continuación.
1.- El fichero de configuración de lighttpd:
alpechin:/etc/lighttpd# emacs lighttpd.conf
En el que añadimos al final la siguiente línea:
### Habilitamos cleanURL en drupal server.error-handler-404 = "/index.php"
2.- Y añadimos el siguiente código al final del fichero:
/var/www/drupal.alpechin/sites/default]> emacs settings.php
if (strpos($_SERVER['SERVER_SOFTWARE'], 'lighttpd') !== false) {
$_lighty_url = $base_url.$_SERVER['REQUEST_URI'];
$_lighty_url = @parse_url($_lighty_url);
if ($_lighty_url['path'] != '/index.php' && $_lighty_url['path'] != '/update.php' && $_lighty_url['path'] != '/') {
$_SERVER['QUERY_STRING'] = $_lighty_url['query'];
parse_str($_lighty_url['query'], $_lighty_query);
foreach ($_lighty_query as $key => $val)
$_GET[$key] = $_REQUEST[$key] = urldecode($val);
$_GET['q'] = $_REQUEST['q'] = urldecode(substr($_lighty_url['path'], 1));
}
}
3.- Rearrancamos lighttpd:
alpechin:~# /etc/init.d/lighttpd restart
4.- Y habilitamos las clean-url aquí: /admin/settings/clean-urls
Y a seguir disfrutando.
P.D.: Este código ha sido construido tras buscar mucho en google. Incorpora todos los parches que he ido encontrando para evitar disfunciones, y por ahora ha funcionado siempre, con todos los módulos que suelo tener instalados y con los que voy probando. Si quieres dejarme alguna puntualización/sugerencia, por favor, deja un comentario. Gracias.
Configurando tarjeta WiFI 3Com en GNU/Linux
Concretamente en Debian GNU/Linux, pero probablemente también sirva para otras distribuciones como, por ejemplo, Ubuntu.
El ordenador fijo de casa tiene una tarjeta WiFI 3Com (como está pinchada en la placa desde hace tiempo no recuerdo el modelo exacto) soportada por el driver que, para el chipset atheros, ha desarrollado el proyecto madwifi.
¡¡OJO!! Todo lo que se ejecuta a continuación se hace desde un terminal. Buscad en vuestros menús un icono con una pantallita negra y la leyenda "terminal". Y una vez en él hemos de actuar como usuario root (en muchos casos basta con hacer: sudo su).
Antes que nada, comprobad que tenéis el mismo chipset que yo haciendo esto (fijaos en la línea donde aparece: "Atheros Communications"):
[13:16:48(godo@surco)~]> lspci 00:00.0 Host bridge: Intel Corporation 82845 845 [Brookdale] Chipset Host Bridge (rev 03) 00:01.0 PCI bridge: Intel Corporation 82845 845 [Brookdale] Chipset AGP Bridge (rev 03) 00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev 12) 00:1f.0 ISA bridge: Intel Corporation 82801BA ISA Bridge (LPC) (rev 12) 00:1f.1 IDE interface: Intel Corporation 82801BA IDE U100 Controller (rev 12) 00:1f.2 USB Controller: Intel Corporation 82801BA/BAM USB Controller #1 (rev 12) 00:1f.3 SMBus: Intel Corporation 82801BA/BAM SMBus Controller (rev 12) 00:1f.4 USB Controller: Intel Corporation 82801BA/BAM USB Controller #1 (rev 12) 00:1f.5 Multimedia audio controller: Intel Corporation 82801BA/BAM AC97 Audio Controller (rev 12) 01:00.0 VGA compatible controller: ATI Technologies Inc Rage 128 Pro Ultra TF 02:08.0 Ethernet controller: Intel Corporation 82801BA/BAM/CA/CAM Ethernet Controller (rev 03) 02:0b.0 Ethernet controller: Atheros Communications Inc. AR5413 802.11abg NIC (rev 01) [13:16:53(godo@surco)~]>
En debian existen los siguientes paquetes con las fuentes del driver:
[11:49:40(godo@surco)~]> dpkg --list | grep madwifi ii madwifi-doc 1:0.9.3-2 documentation for the Multiband Atheros Driv ii madwifi-source 1:0.9.4~rc2-1 source for the Multiband Atheros Driver for ii madwifi-tools 1:0.9.4~rc2+dfsg-1 tools for the Multiband Atheros Driver for W [11:49:47(godo@surco)~]>
Los cuales tienes que tener instalados en el sistema.
Estos paquetes dejan en el directorio /usr/src el archivo madwifi.tar.bz2. Al descomprimirlo se genera el siguiente directorio /usr/src/modules/madwifi.
Además, hace falta tener instalado el paquete de las cabeceras "headers" correspondiente al núcleo, al kernel, con el que se arranca la máquina. Como las actualizaciones de "apt-get upgrade" suelen renovar la versión del kernel cada cierto tiempo, es necesario tras cada actualización que implique renovación de versión hacer lo siguiente:
1.- Asegurarse de que existe en el directorio /usr/src los siguientes archivos:
[11:50:44(godo@surco)/usr/src]> ll total 3492 -rw-r--r-- 1 root root 24181 abr 30 10:42 cloop.tar.bz2 lrwxrwxrwx 1 root src 26 may 30 11:41 linux -> linux-headers-2.6.24-1-686 drwxr-xr-x 4 root root 600 may 25 20:34 linux-headers-2.6.24-1-686 drwxr-xr-x 18 root root 456 may 25 20:34 linux-headers-2.6.24-1-common drwxr-xr-x 3 root root 72 dic 23 2006 linux-kbuild-2.6.18 drwxr-xr-x 3 root root 72 oct 5 2007 linux-kbuild-2.6.22 drwxr-xr-x 3 root root 72 may 25 20:34 linux-kbuild-2.6.24 -rw-r--r-- 1 root root 3543950 feb 12 13:08 madwifi.tar.bz2 drwxr-xr-x 3 root root 72 feb 12 13:08 modules [11:53:18(godo@surco)/usr/src]>
Para ello hay que tener instalados, desde siempre, los siguientes paquetes:
apt-get install madwifi-source madwifi-tools madwifi-doc linux-headers-2.6-686 wireless-tools
2.- Hacer el enlace simbólico linux -> linux-headers-2.6.24-1-686 que no existirá pues es necesario hacerlo a mano, así:
[11:50:44(godo@surco)/usr/src]> ln -s linux-headers-2.6.24-1-686 linux
3.- Descomprimir el archivo madwifi.tar.bz2, así:
[11:50:44(godo@surco)/usr/src]> tar -xvjf madwifi.tar.bz2
4.- Meternos en el directorio del driver:
[11:50:44(godo@surco)/usr/src]> cd modules/madwifi
5.- Ejecutar los siguientes comandos:
[11:50:44(godo@surco)/usr/src]> make [11:50:44(godo@surco)/usr/src]> make install [11:50:44(godo@surco)/usr/src]> modprobe ath_pci countrycode=724
Y por último ejecutamos el script (creado previamente por nosotros) de configuración de nuestra tarjeta:
[11:50:44(godo@surco)/usr/src]> /sbin/iwconfig ath0 essid "ElVuestro" enc 53C268252C7642BD23484D970E
El essid es el identificador de red que difunde vuestro punto de acceso, y la ristra que sigue a enc es la clave WEP de cifrado, si lo tenéis activo, claro está.
Y, si todo ha ido bien, ya tenemos nuestra tarjeta WiFI detectada.
6.-Lo podemos comprobar así:
[11:50:44(godo@surco)/usr/src]> iwconfig
ath0 IEEE 802.11g ESSID:"ElVuestro" Nickname:""
Mode:Managed Frequency:2.442 GHz Access Point: 00:23:4A:30:E1:B4
Bit Rate:54 Mb/s Tx-Power:16 dBm Sensitivity=1/1
Retry:off RTS thr:off Fragment thr:off
Encryption key:53C2-6825-2C76-42BD-2348-4D97-0E Security mode:restricted
Power Management:off
Link Quality=47/70 Signal level=-49 dBm Noise level=-96 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
7.- Y ahora solo falta configurar las direcciones ip de nuestro interfaz y de nuestro router por defecto (ojo, que esto depende de la que tenga configurada el router):
Si queremos hacerlo de forma fija, y la que tiene el router wifi es 192.168.7.77:
[11:50:44(godo@surco)/usr/src]> /sbin/ifconfig ath0 192.168.7.7 netmask 255.255.255.0 up [11:50:44(godo@surco)/usr/src]> /sbin/route add default gw 192.168.7.77
Si queremos hacerlo por dhcp (para el que no sepa que significa esto del ip, mejor esta opción):
[11:50:44(godo@surco)/usr/src]> /sbin/dhclient ath0
8.- Comprobamos que tenemos conectividad WiFI:
[12:29:59(root@surco)/etc/init.d]> ping 192.168.7.77 PING 192.168.7.77 (192.168.7.77) 56(84) bytes of data. 64 bytes from 192.168.7.77: icmp_seq=1 ttl=64 time=1.00 ms 64 bytes from 192.168.7.77: icmp_seq=2 ttl=64 time=0.936 ms 64 bytes from 192.168.7.77: icmp_seq=3 ttl=64 time=0.953 ms . . . pulsamos Ctrl+C para terminar.
Si la respuesta es de este tipo, todo hay ido bien.
Si, por el contrario, es así:
[12:29:59(root@surco)/etc/init.d]> ping 192.168.7.77 PING 192.168.7.77 (192.168.7.77) 56(84) bytes of data. ... aquí no aparece nada ...
Algún problema ha habido.
Espero que ayude. ¡A disfrutad de la red desde GNU/Linux!
Ratón y teclado inalámbricos Logitech en GNU/Linux
Espero que este pequeño script os sirva a todos aquellos que utilizáis un ratón Logitech en vuestra máquina donde, obviamente, tendréis instalado un sistema GNU/Linux (a todas luces Debian, supongo ;-) ).
El script está construido en Perl, además hace falta instalar el siguiente módulo: "apt-get install libmime-lite-perl". Bajo mi punto de vista, como administrador de redes y sistemas, uno de los lenguajes que más "herramientas" pone a nuestra disposición: aquí vemos como construimos y enviamos un correo electrónico (gracias, Miguel Ángel, por compartir tus conocimientos y ensanchar así los míos) si se cumple una determinada condición: critical = pilas prácticamente sin carga.
Utilizamos la salida del programa lmctl, el cual podéis encontrar aquí (existe paquete para Debian). Este programa es el que en realidad consulta el estado de la batería (pilas) del ratón. El script lo utiliza para crear un fichero de texto en /tmp/salida.txt, que luego analiza, línea a línea, buscando la palabra "critical". Como hemos dicho antes, esta palabra aparece como indicador del estado si las pilas están prácticamente agotadas. Cuando así sea, enviamos un correo electrónico avisando de tal hecho.
[15:54:59(godo@surco)~]> more .kde/Autostart/pilas_raton.pl
#!/usr/bin/perl
#
# Script que ejecuta el comando 'lmctl -i' para
# conocer el estado de la bateria del ratón
use MIME::Lite;
#print "\nComprobando batería del ratón...\n\n";
$patron="critical"; # Patron a buscar
#print "\n$patron";
# Ejecutamos el comando
system("/usr/bin/lmctl -i > /tmp/salida.txt");
open SALIDA, "< /tmp/salida.txt";
# Comenzamos la busqueda
while($linea=<SALIDA>)
{
if($linea=~/$patron/)
{
# Creamos el correo a enviar
$msg = MIME::Lite->new(
From => 'raton@bateria.org',
To => 'usuario@dominio.es',
Bcc => 'usu@dominio.net',
Subject => 'Cambia las pilas - CRITICAL',
Type => 'multipart/mixed');
$msg->attach(
Type => 'TEXT',
Data => 'Batería demasiado baja.');
$msg->send('smtp', '127.0.0.1');
}
}
close SALIDA;
#Para eliminar el fichero creado
#descomentar la siguiente línea
#system("rm /tmp/salida.txt");
[15:55:16(godo@surco)~]>
¡OJO! Tenéis que particularizar los campos To y Bcc del correo añadiendo vuestra dirección donde queráis recibirlo. Además tendréis que modificar el servidor de envío de dicho correo: smtp. Observad que yo utilizo mi propia máquina como servidor de correo saliente: 127.0.0.1. Es recomendable que modifiquéis también el From, utilizando una dirección válida para evitar los filtros antispam.
Ya sólo nos queda añadir una tarea a nuestro cron. Para ello ejecutamos desde nuestro usuario: "crontab -e", y añadimos al fichero editado lo siguiente:
# Para ejecutar el script que monitoriza las pilas del raton logitech 45 14 * * * /home/godo/.kde/Autostart/pilas_raton.pl
Con esto conseguimos que todos los días a las 14:45 se ejecute nuestro script. Guardado, en mi caso, en "home/godo.kde/Autostart/".
Desde que recibáis el primer correo electrónico tenéis en torno a semana y media para cambiar las pilas. Claro, esto depende del uso que hagáis de ellas. En mi caso: 5 días x 8 horas (aproximadamente ;-)).
Todos estos esfuerzos debidos a la falta de drivers, y de compromiso, que algunos fabricantes siguen mostrando con el mundo GNU/Linux. Bien es cierto que cada vez son más los que colaboran… pero aún hay mucha tela que cortar.
Quizá, alguno de vosotros lo hayáis resuelto de otra manera. Si es así, me gustaría que la compartierais con los demás dejando un comentario.
En fin, un divertimento del que se puede aprender mucho: las maravillas del Perl. Otro día os contaré lo que me ha ayudado en la realización de algunas tareas.
Y amaréis al camello dromedario (En 1991 se publicó Programming Perl y se convirtió en la referencia de facto del lenguaje –WikiPedia).
Comentarios
Excelente Articulo (Martin 11/05/2012 - 15:23)
Godo, gracias por compartir. Lo voy a estar utilizando y si consigo mejorarlo y añadirle alguna aplicacion, me comunico contigo y te lo envio.
Mil Gracias!
Gracias a ti, Martín (Godo 11/05/2012 - 16:33)
Por escribir en este rinconcito.
¡Qué friki llegué a ser, Dios mío! Ahora ya no tengo tiempo de enredar en estas cosas… pero me siguen gustando mucho. Así que, si consigues mejorarlo y lo cuelgas por aquí te estaré muy agradecido.
Porque, parece que no, pero que se te acaben las pilas de golpe y pillarte sin pilas de repuesto es molesto, eh! ;-)
Saludos.
Recuperando el gestor de arranque: Grub
ACTUALIZACIÓN: si conoces exactamente la partición raíz (root), por ejemplo: /dev/sda5, la forma más rápida de hacerlo está al final de este artículo. FIN de la ACTUALIZACIÓN
A quién no le ha ocurrido esto: un buen día logramos tener en nuestro ordenador instalados varios sistemas operativos, por ejemplo: un windows y un Debian GNU/Linux. En un momento triste descubrimos que la última aplicación que debemos utilizar no existe en GNU/Linux, o que el último gadget que nos hemos comprado ha de ser “gestionado” desde un windows. Bien, asumimos nuestra tristeza y arrancamos nuestro ordenador para seleccionar en el menú, que nos presenta el gestor de arranque Grub (existen otros gestores de arranque más antiguos y menos versátiles, como lilo), la opción correspondiente al sistema operativo de las ventanas.
En nuestra sesión de trabajo nos conectamos a un par de páginas de internet, hacemos unas cuantas descargas y, sorprendentemente :-o, un virus se adueña de nuestro ordenador. Tras mil y una guerra con los dialers, las bajadas e instalación de malware a nuestras espaldas, etc., decidimos reinstalar el windows original en su partición. Arrancamos…
¡Y descubrimos que esta reinstalación se ha cargado nuestro gestor de arranque!, con lo que ahora ya sólo podemos arrancar nuestra nueva instalación de windows. Pero, ¿qué ha pasado con nuestro Debian GNU/Linux que teníamos instalado? No hay que preocuparse, sigue estando instalado en las particiones en las que estaba. Lo único que hemos perdido es la posibilidad de arrancarlo dado que la reinstalación de windows, como digo, ha borrado el "pequeño programa" que vive en el sector de arranque de nuestro disco duro, y que nos presenta el menú de selección del sistema operativo con el que queremos trabajar justo cuando conectamos nuestra máquina.
Vamos a ver como volvemos a instalar nuestro Grub tal y como estaba antes de que la tragedia ocurriera.
Lo primero que os recomiendo es que os bajéis el último System Rescue CD, y lo tostéis en un CD virgen que nos salvara de este tipo de emergencias. Este minisistema GNU/Linux es muy completo: trae una herramienta para la realización de particiones en modo gráfico: gparted (que ya utilizamos aquí), otra herramienta para realizar copias de seguridad de las particiones existentes: partimage, y reconoce casi todos los tipos de sistemas de ficheros, incluido el NTFS.
Arrancamos nuestro ordenador, con el System Rescue CD introducido para que, obviamente, arranque desde él. Veremos una pantalla de bienvenida, pulsamos intro para que continúe… y al final vemos una pantalla de instrucciones y una línea de comandos que nos invita a interactuar con el sistema.
Ahora necesitamos conocer los siguientes datos: la tabla de particiones de nuestro sistema, y su correspondencia con los distintos directorios existentes en el árbol de una instalación GNU/Linux. Esto se puede obtener de la siguiente forma:
[18:23:18(godo@surco)~]> mount /dev/hdb1 on / type reiserfs (rw) tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755) proc on /proc type proc (rw,noexec,nosuid,nodev) sysfs on /sys type sysfs (rw,noexec,nosuid,nodev) procbususb on /proc/bus/usb type usbfs (rw) udev on /dev type tmpfs (rw,mode=0755) tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev) devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620) /dev/hdb2 on /boot type reiserfs (rw,notail) /dev/hdb7 on /home type reiserfs (rw) /dev/hdb8 on /tmp type ext3 (rw) /dev/hdb5 on /usr type reiserfs (rw) /dev/hdb6 on /var type reiserfs (rw) /dev/hdb4 on /mnt/vm type reiserfs (rw,nosuid,nodev,user=godo) [18:51:16(godo@surco)~]>
Es tan fácil como teclear mount cuando nuestra máquina está funcionando bien, y conservar su salida en una hojita impresa, o en una página web que tengamos accesible ;-). Si no lo hemos hecho previamente, y nos encontramos con que no sabemos qué partición albergaba un determinado árbol de directorios, tendremos que ir montando una u otra, y viendo lo que tienen dentro, o utilizar herramientas como fdisk o cfdisk, ejecutándolas como se muestra a continuación:
[20:11:19(root@surco)/mnt/vm/serie-debian]> fdisk -l /dev/hdb
Disk /dev/hdb: 203.9 GB, 203928109056 bytes 255 heads, 63 sectors/track, 24792 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System /dev/hdb1 1 486 3903763+ 83 Linux /dev/hdb2 487 729 1951897+ 83 Linux /dev/hdb3 730 5118 35254642+ 5 Extended /dev/hdb4 5119 24792 158031405 83 Linux /dev/hdb5 730 1945 9767488+ 83 Linux /dev/hdb6 1946 3161 9767488+ 83 Linux /dev/hdb7 3162 4377 9767488+ 83 Linux /dev/hdb8 4378 4863 3903763+ 83 Linux /dev/hdb9 4864 5118 2048256 82 Linux swap / Solaris [20:11:25(root@surco)/mnt/vm/serie-debian]> [20:11:55(root@surco)/mnt/vm/serie-debian]> cfdisk /dev/hdb
La primera, fdisk, como podéis observar, no muestra mucha información, sólo las particiones y el tipo de sistema de ficheros que tienen asociado. La segunda, cfdisk, muestra una pantalla estructurada en columnas, y una de ellas tiene información sobre el punto de montaje, sobre el árbol de directorios que vamos buscando.
Observando esta información (la que anteriormente resultaba de ejecutar mount, que es donde más fácil se ve) podemos conocer que nuestro sistema raíz GNU/Linux, indicado por la / , está ubicado en nuestro segundo disco duro “hdb” y en su primera partición: /dev/hdb1. Y que el sistema de archivos utilizado es “reiserfs”.
Igualmente, vemos que el directorio /boot está ubicado en nuestro segundo disco duro y en su segunda partición: /dev/hdb2, con sistema de archivos “reiserfs”.
Por tanto, desde la línea de comandos que nos aparece tras haber arrancado con nuestro CD de recuperación, tecleamos:
[18:51:16(godo@surco)~]> mkdir /mnt/temp1 [18:51:16(godo@surco)~]> mount /dev/hdb1 /mnt/temp1 [18:51:26(godo@surco)~]> mount -o bind /dev /mnt/temp1/dev [18:51:36(godo@surco)~]> mount -o bind /proc /mnt/temp1/proc
Con lo que montamos la partición raíz del sistema GNU/Linux que queremos recuperar en el directorio que nos ofrece nuestro sistema de recuperación: /mnt/temp1. Es decir, ahora mismo nuestro habitual sistema raíz está accesible a través del directorio /mnt/temp1. Tanto es así, que si hacemos:
[18:51:16(godo@surco)~]> cd /mnt/temp1 [18:51:16(godo@surco)~]> ls bin dev initrd lib opt sbin tmp vmlinuz boot etc initrd.img media proc srv usr vmlinuz.old cdrom home initrd.img.old mnt root sys var
Podemos observar la estructura correspondiente y “navegar” a través de ella. Las líneas que comienzan con "mount -o bind" se utilizan para evitar los problemas de "población dinámica del directorio /dev" por udev (ver esto para más información).
Sin embargo, nuestra raíz actual es / correspondiente al sistema GNU/Linux de recuperación con el que hemos arrancado, Y NO /mnt/temp1 que es donde está el raíz que correspondería si hubiéramos arrancado normalmente desde nuestro GNU/Linux. ¡OJO, sé que lo que acabo de decir puede resultar algo confuso para un principiante! Aseguraros bien de que lo entendéis, si no, buscad más información.
Podemos cambiar “virtualmente de raíz” con el siguiente comando:
[18:51:16(godo@surco)~]> chroot /mnt/temp1
Una vez fijada la nueva raíz a la que correspondería si arrancáramos desde el disco duro, tenemos que montar las particiones correspondientes al árbol de directorios /boot (donde se encuentra la información de arranque: kernel, datos de grub, etc.) y al árbol /usr (donde se encuentran los binarios o ejecutables de grub y otras herramientas de administración del sistema). Esto lo conseguimos con el siguiente par de comandos:
[18:51:16(godo@surco)~]> mount /dev/hdb2 /boot [18:51:16(godo@surco)~]> mount /dev/hdb5 /usr
Recuerda que esto es posible porque previamente hemos modificado la raíz de nuestro sistema de directorios (lo que hemos hecho con chroot).
Ya sólo nos queda ejecutar grub-install para instalar el gestor de arranque en el sector correspondiente al primer disco duro de nuestro sistema: hda. Esto es así porque, habitualmente, los sistemas con dos discos duros están configurados para arrancar desde el primero, pero podría ser de otro modo. Finalizamos nuestra tarea ejecutando:
[18:51:16(godo@surco)~]> /usr/sbin/grub-install /dev/hda
Nos salimos del entorno “chroot” con:
[18:51:16(godo@surco)~]> exit
Y rearrancamos nuestra máquina:
[18:51:16(godo@surco)~]> shutdown -r now
Hemos de tener la precaución de sacar el CD justo cuando comience el encendido, para evitar así que se ejecute otra vez el sistema GNU/Linux de recuperación y obligar a que arranque desde el disco duro.
¡Tachán! Nuestro viejo GRUB vuelve a estar en su sitio.
Y una sonrisa vuelve a brillar en nuestro rostro.
Salud.
–
16-03-2008 Actualización:
Una manera rápida de recuperar grub, si conocemos cual es nuestra partición raíz (root == ) en nuestro GNU/Linux es: 1º.- Arrancar con un CD LIVE (recomiendo ultimas versiones de Knoppix). 2º.- sudo grub 3º.- grub> root (hd0,4) 4º.- grub> setup (hd0) 5º.- grub> quit Siendo hd0 nuestro primer disco duro, en mi portátil por ejemplo es: /dev/sda, y el 4 corresponde con el número de partición donde se encuentra nuestra raíz, en mi caso la raíz "" está en /dev/sda5. Grub comienza la numeración de las particiones en 0, mientras que el kernel comienza en 1, es por eso que a sda5 le corresponde el 4.
Esto funciona incluso si hemos cambiado el orden de las particiones, como suele ser el caso si hemos cambiado de disco duro y hemos restaurado unas copias de seguridad realizadas con "partimage".
Fin de la actualización
30-03-2020 Actualización:
En el pdf que hay al final de este artículo hay otra forma de hacerlo utilizando un Live CD/USB de la familia derivada de Debian GNU/Linux. Lo encontré redactado para Ubuntu, pero yo lo he probado haciendo lo mismo con MX Linux y también funciona.
Fin de la actualización
P.D.: Aquí hablamos de como recuperar el arranque de Windows.
Archivos adjuntos
Actualizaciones Automáticas en Debian GNU/Linux con KDE
En una de mis últimas instalaciones de la distribución Debian GNU/Linux comprobé que el entorno gráfico instalado por defecto es Gnome. Aproveché y estuve trasteando un poquito por los menús, opciones, etc., intentando ver lo amigable que podía resultar para un principiante en este mundillo GNU/Linux. Le puse cierto interés porque es el entorno elegido por la distribución guadalinex, y por tanto, estimo que en poco tiempo me lo iré encontrando en toda la geografía Andaluza/Extremeña.
Hubo una característica que me llamó especialmente la atención, y es de la que me ocupo en este artículo. Al poquito tiempo de arrancar con el sistema recién instalado, y cuando estaba jugueteando con él, surgió un “globito de notificación” de la bandeja del sistema en el que se me informaba de la disponibilidad de actualizaciones para el mismo.
Recuerdo que hice “click” sobre dicha notificación, y se me abrió una ventana de diálogo en la que se informaba con mayor detalle de los paquetes cuyas últimas versiones se iban a instalar. He de reconocer que en este momento estaba un poco alucinado pues creía que el desorden del mundo “windows” estaba aterrizando en GNU/Linux: “¿Cómo un usuario normal puede hacer estas cosas? ¡Bueno, bueno… lo que me quedaba que ver!”
Sin embargo, cuando pulsé sobre aceptar comprobé que la máquina te solicitaba la clave de root para realizar dichas tareas de mantenimiento… ¡no todo estaba perdido!
Uno, que tiene el vicio de utilizar KDE, se quedó un poquito picado con esta funcionalidad existente e integrada en el entorno Gnome. Y me puse a investigar a ver como podía conseguirlo en KDE.
Descubrí un conjunto de aplicaciones que, bajo el nombre de adept, se podían utilizar para realizar la gestión de paquetes en el entorno KDE. Y más concretamente, adeptnotifier, que sirve para mostrar el globito de notificación.
Por tanto, lo primero que tenéis que instalar es “adept”:
apt-get install adept
Tras instalarlo debéis ejecutarlo en segundo plano y dejarlo corriendo:
[10:45:27(godo@olivo)/home/godo]> adeptnotifier &
[10:45:27(godo@olivo)/home/godo]> ps | grep adept godo 3940 0.1 2.8 29356 14424 ? S 09:06 0:06 adeptnotifier
Ahora faltaba programar la comprobación de las actualizaciones para que estas fueran automáticas y ocurrieran siempre al inicio del sistema.
Elaboré el siguiente script que situé en etc/init.d y que llamé apt-get-update:
[18:50:28(root@olivo)/home/godo]> more /etc/init.d/apt-get-update #!/bin/sh
################################################
################################################
/bin/ping -c 3 -W 1 131.111.8.35
echo "Actualizando los paquetes disponibles en los repositorios…" echo ""
/usr/bin/apt-get update > /tmp/apt \ && \ /usr/bin/apt-get -dy upgrade >> /tmp/apt &
El script utiliza la herramienta apt para actualizar (apt-get update) y descargar (apt-get -dy upgrade) los distintos paquetes disponibles.
Sólo queda crear un enlace simbólico en el nivel de arranque habitual de nuestra distribución, en Debian es el 2 (/etc/rc2.d):
[19:06:08(root@olivo)/etc/rc2.d]> update-rc.d apt-get-update start 98 2 . Adding system startup for /etc/init.d/apt-get-update … /etc/rc2.d/S98apt-get-update -> ../init.d/apt-get-update
¿Qué hemos conseguido?
Actualizar la lista de paquetes disponibles (apt-get update), dejando rastro en /tmp/apt.
Tener una pequeña aplicación que nos informa gráficamente si existen actualizaciones para los paquetes que tenemos instalados (adeptnotifier).
Descargar, si los hay, los paquetes necesarios y dejarlos en nuestra máquina preparados para llevar a cabo la actualización. Seguimos dejando rastro de esta tarea en /tmp/apt.
Este último paso se podría haber automatizado también, pero prefiero llevarlo a cabo de forma supervisada.
Cuando nuestro globito nos informe de que existen actualizaciones, y veamos en nuestro monitor de red (apt-get install wmnd) que ha cesado el tráfico de descarga, todas ellas estarán esperando a que, como root, ejecutemos nuestro apt-get upgrade y veamos como se desarrolla la cosa.
Espero que os sea útil.
Y que os ahorre tiempo.
Ejecutar un script interactivo *justo antes* de apagar KDE
02-06-2009 ACTUALIZACIÓN: Si estás utilizando KDE4 lo que sigue no te funcionará, puedes leerlo para tener una idea del objetivo perseguido, y a continuación pulsa aquí, encontrarás lo mismo explicado para KDE4. ¡Disfrútalo!
Fin de la actualización.
A continuación comparto, a modo de guía, la solución a este problema.
Y digo problema porque, aunque en un principio creí que iba a ser más fácil, al final me ha costado bastante. Si buscáis en google os daréis cuenta de lo poco documentadas que están este tipo de cosas. No obstante, gracias a la flexibilidad y al estar al descubierto los entresijos del software libre, uno acaba consiguiéndolo :-).
Utilidad: realizar una copia de seguridad de los contenidos que estimo valiosos siempre antes de apagar el ordenador (otro día hablaremos más de esto).
Objetivo: ejecutar un shell script (que en mi caso es el que realiza la copia de seguridad) justo antes de apagar el ordenador.
Restricciones: 1.- Trabajamos con el entorno KDE. 2.- Hemos de ser capaces de apagar el ordenador de forma ordenada, es decir, conservando datos entre sesiones, sin "destrozar" la forma en la que lo hace KDE. 3.- Hemos de evitar la existencia de varias opciones de "salida", obligando al usuario a ejecutar sólo una que colocaremos en un lugar fácilmente accesible (previa a esta, y de forma transparente para el usuario, se ejecutará el script). 4.- El script es interactivo: solicita una contraseña (para cifrar las comunicaciones) al usuario, cuando ésta ha sido introducida el script continúa con su trabajo… Y justo cuando finaliza se procede a apagar el sistema de forma ordenada.
Solución: Tras investigar durante algunas horas entre foros y listas de correo, he conseguido construir justo la solución que estaba buscando:
1.- He suprimido la opción "Terminar…" del menú K. Lo he hecho con la herramienta kiosktool, que permite crear diferentes perfiles de usuarios y configurar en estos las acciones permitidas/prohibidas de los mismos (útil para la administración de cibercafés, etc.). La herramienta trae un perfil: "default", que es asociado a todos los usuarios del sistema por defecto. He creado uno nuevo para asociarlo sólo a mi usuario, y en este: configurar perfil - selección del componente "General" - configurar componente - selección "Deshabilitar la opción de terminar sesión". Mi usuario ya no puede apagar el sistema como habitualmente lo hacía.
2.- He creado el siguiente script "intermedio": #!/bin/bash
####################################################
####################################################
konsole -name casa-parada -title casa-parada -e /home/godo/bin/casa-parada \ && \ dcop ksmserver ksmserver logout 1 2 0
Lo denomino "intermedio" porque es ejecutado desde un botón que he creado en el panel de KDE (kicker) mediante la opción "Añadir aplicación no-KDE". Realiza dos acciones: abre una sesión de Konsole (programa terminal del entorno KDE) dentro de la cual ejecuta el script que me interesa (el que me solicita la contraseña y hace la verdadera tarea): /home/godo/bin/casa-parada, y cuando este termina satisfactoriamente (&&), hace una llamada al administrador de sesiones de KDE:
dcop ksmserver ksmserver logout 1 2 0
Donde los tres parámetros que siguen al mensaje de "logout" son, respectivamente:
enum ShutdownConfirm { ShutdownConfirmDefault = -1, ShutdownConfirmNo = 0, ShutdownConfirmYes = 1 };
enum ShutdownType { ShutdownTypeDefault = -1, ShutdownTypeNone = 0, ShutdownTypeReboot = 1, ShutdownTypeHalt = 2 };
enum ShutdownMode { ShutdownModeDefault = -1, ShutdownModeSchedule = 0, ShutdownModeTryNow = 1, ShutdownModeForceNow = 2, ShutdownModeInteractive = 3 };
Con lo que conseguimos exactamente el mismo efecto que cuando antes utilizábamos el botón "Terminar…" del menú K, pero esta vez "terminamos" justo después de haber ejecutado nuestro script: ¡Objetivo conseguido!
Como veis, hoy he aprendido muchas cosas nuevas.
Y tengo un problema menos ;-)
Configuraciones
En esta página iré añadiendo enlaces desde los cuales podréis descargar y/o ver mis ficheros de configuración de algunas de las aplicaciones, y entornos, que utilizo habitualmente. A su vez, aparece un enlace a este artículo en el menú de navegación situado a vuestra izquierda, que os permitirá acceder a él siempre que lo deseéis (porque, como todos, acabara siendo engullido por el propio devenir de esta bitácora). Aquí están:
- Akregator (lector de "feeds" para kde): akregator-feeds_xml - Alias para la shell bash: .alias - Editor emacs: .emacs - Shell bash: .bashrc - Xdefaults: .Xdefaults
Espero que os alumbren nuevas ideas. Yo he aprendido mucho de ver como otros (que saben) hacen las cosas. Ánimo… y a seguir conociendo.