Mostrando entradas con la etiqueta configuracion. Mostrar todas las entradas
Mostrando entradas con la etiqueta configuracion. Mostrar todas las entradas

sábado, 23 de julio de 2016

Configurar Synergy en Linux

Para darle uso a una laptop vieja decidí usarla como tercer monitor.

En esta entrada explicaré como hice para configurar synergy para este fin.
Los equipos son los siguientes: 

Laptop(Monitor + Laptop Screen) <=Synergy=> (Monitor + Monitor)PC



La PC de escritorio será mi Servidor (donde estará conectado el teclado y el mouse que se va a compartir).
La Laptop será el Cliente.


Primero instalo synergy en ambas computadoras

# dnf install synergy

Ejecutamos synergy escribiendo en la consola "synergy" (no lo ejecutes como root)
Cuando pida la activación seleccionas "Skip activation". Nunca nos va a volver a pedir la licencia



Configuración del lado del servidor

Recomiendo colocar una ip estática al servidor, para evitar problemas futuros con synergy. En mi caso coloqué la ip 192.168.1.10


Luego abre la ventana de synergy selecciona 
[X]Server (share this comp............)
   [X]Configure interactively

y Luego presionas el botón "Configure Server"



Arrastra el icono del monitor según la configuración que desees. En mi caso lo coloqué a la derecha del servidor. 

Le das doble click en el icono de la laptop y colocas el nombre de la pantalla. En mi caso coloque "laptop". Este nombre va a identificar la pantalla en la red. Dale OK


Por último dale click en Start




Configuración del lado del CLIENTE


Puedes configurar el cliente por consola o con la GUI de Synergy de forma gráfica

Para hacerlo por consola basta con escribir en el terminal:

synergyc  --daemon --name laptop --restart --debug FATAL 192.168.1.10:24800

Si le tienes miedo al terminal entonces puedes hacerlo de forma gráfica:

Abrimos synergy desde la terminal. Seleccionamos "Client" y destildamos la opción "Auto config".

Escribimos el ip del servidor 


Luego entra en Edit -> Settings y coloca el nombre de la pantalla (debe ser el mismo que le asignaste en el servidor a esta pantalla). En mi caso se llama laptop



Le das aceptar y luego en start. Inmediatamente en el servidor podremos ver que el cliente "laptop" se ha conectado y ya podemos ver el funcionamiento del programa



Hacer que Synergy inicie cuando se encienda la maquina

Luego de hacer todo estos pasos seguro que quisieras que arrancara automáticamente. Para ello abres el asisitente de programas al inicio de tu preferencia y agregas lo siguiente:

En el servidor:
synergys --config /home/hector/.config/Synergy/Synergy_Inmutable.conf --restart

En el cliente:



Problemas que tuve y como lo solucioné

1 - Lag horrible y cortes en el desplazamiento del mouse:
Solución
Conecta los equipos involucrados por cable ethernet a un mismo switch. Si lo haces via wifi verás un lagueo muy molesto en el cliente.

2- El cliente no se conecta (como si no encontrara al servidor)
Desactivar el firewall de linux o dale permisos parara el puerto (Aqui puedes ver como).
Algunos routers bloquean las conexiones entre equipos. Prueba desabilitando el firewall del router o dando permiso.

En ubuntu
sudo ufw allow 24800/tcp

3- Teclas cambiadas en el cliente.
En el cliente se escribían caracteres equivocados cuando presionaban teclas como @, Ñ o /. Este es un error del programa que lamentablemente no maneja bien el tema de las distribuciones de teclado y la cmabia a Ingles (USA). En mi caso los dos teclados, tanto del server como el del cliente, tienen distribución latinoamericana en físico. 
Para que me funcionara tuve que asignar la distribución "Español (latinoamericano, Dvorak)" en el cliente. El servidor lo dejé tal cual estaba: "Español (latinoamericano)"



Prueba:
Hice este video para mostrar el resultado final. Se puede observar como el mouse se pasea por los 4 monitores, de izquierda a derecha


sábado, 9 de abril de 2016

Corregir problema KDE5 pierde configuracion de doble monitor al reinicio

Cada vez que reiniciaba perdia la configuración de doble monitor en KDE5. Para solucionarlo solo debes desactivar el compositor.
Para hacerlo debes entrar en Preferencias --> Pantalla y Monitor



Luego en la sección "Compositor" descheckear "Activar compositor durante el inicio


Luego reinicias y listo. KDE se verá sin transparencias ni ninguna de esas maricadas y funcionará bien.

domingo, 15 de marzo de 2015

Ejemplo libconfig con QtCreator: Leer y escribir en el fichero de configuración

En esta entrada veremos un ejemplo de uso de libconfig en linux para trabajar con ficheros de configuración. Usaremos QtCreator como ide.

Lo primero es instalar el paquete libconfig

Desde debian:
apt-get install libconfig

Desde fedora:
yum install libconfig libconfig-devel


Luego debemos linkear la librería desde nuestro IDE. Para ello damos clic derecho al titulo del proyecto y luego en Add Library. Luego colocamos la dirección de el fichero libconfig.so. 
Por lo general está en /usr/lib64/libconfig.so si es un so de 64 bits
Por lo general está en /usr/lib/libconfig.so     si es un so de 32 bits


Puedes hacer el paso anterior de forma manual agregando la siguiente linea a tu fichero .pro
LIBS += -lconfig

Para este ejemplo utilizamos el siguiente fichero de configuración (example.cfg):

// Nombre
nombre = "Libros, Películas y mas";

// Inventario
inventario =
{
  libros = ( { titulo  = "Treasure Island";
              autor = "Robert Louis Stevenson";
              precio  = 29.99;
              qty    = 5; },
            { titulo  = "Snow Crash";
              autor = "Neal Stephenson";
              precio  = 9.99;
              qty    = 8; }
          );

  peliculas = ( { titulo = "Brazil";
               media = "DVD";
               precio = 19.99;
               qty = 11; },
             { titulo = "MEMEMTO";
               media = "VHS";
               precio = 18.99;
               qty = 5; }
           );
};





Este código lee el fichero, muestra su contenido y cambia el valor de la preferencia 'nombre' a Totona.

#include <stdio.h>
#include <stdlib.h>
#include <libconfig.h>


/* Este ejemplo lee el fichero de configuracion example.cfg
 * y muestra su contenido
 */
int main(int argc, char **argv)
{
    static const char *output_file = "updated.cfg";
    static const char *input_file  = "example.cfg";
    config_t cfg;
    config_setting_t *setting;
    const char *str;

    config_init(&cfg);

    /* Lee el fichero, si hay error lo muestra y sale */
    if(! config_read_file(&cfg, input_file))
    {
        fprintf(stderr, "%s:%d - %s\n", config_error_file(&cfg),
                config_error_line(&cfg), config_error_text(&cfg));
        config_destroy(&cfg);
        return(EXIT_FAILURE);
    }    
    

    /* Obtenemos el nombre. */
    if(config_lookup_string(&cfg, "nombre", &str))
        printf("nombre: %s\n\n", str);
    else
        fprintf(stderr, "No hay un campo 'nombre' en example.cfg.\n");

    /* Mostramos todos los libros del inventerio. */
    setting = config_lookup(&cfg, "inventario.libros");
    if(setting != NULL)
    {
        int count = config_setting_length(setting);
        int i;

        printf("%-30s  %-30s   %-6s  %s\n", "titulo", "autor", "precio", "QTY");

        for(i = 0; i < count; ++i)
        {
            config_setting_t *libro = config_setting_get_elem(setting, i);

            const char *titulo, *autor;
            double precio;
            int qty;

            if(!(config_setting_lookup_string(libro, "titulo", &titulo)
                 && config_setting_lookup_string(libro, "autor", &autor)
                 && config_setting_lookup_float(libro, "precio", &precio)
                 && config_setting_lookup_int(libro, "qty", &qty)))
                continue;

            printf("%-30s  %-30s  $%6.2f  %3d\n", titulo, autor, precio, qty);
        }
        putchar('\n');
    }

    /* Muestra todas las peliculas en inventario. */
    setting = config_lookup(&cfg, "inventario.peliculas");
    if(setting != NULL)
    {
        unsigned int count = config_setting_length(setting);
        unsigned int i;

        printf("%-30s  %-10s   %-6s  %s\n", "Titulo", "Media", "Precio", "QTY");
        for(i = 0; i < count; ++i)
        {
            config_setting_t *movie = config_setting_get_elem(setting, i);

            const char *titulo, *media;
            double precio;
            int qty;

            if(!(config_setting_lookup_string(movie, "titulo", &titulo)
                 && config_setting_lookup_string(movie, "media", &media)
                 && config_setting_lookup_float(movie, "precio", &precio)
                 && config_setting_lookup_int(movie, "qty", &qty)))
                continue;

            printf("%-30s  %-10s  $%6.2f  %3d\n", titulo, media, precio, qty);
        }
        putchar('\n');
    }
    
    /** Actualizamos el valor del nombre **/    
    config_setting_t *root,*nombre;

    root = config_root_setting(&cfg);
    nombre=config_setting_get_member(root,"nombre");

    // Cambiamos el valor del nombre y le colocamos
    config_setting_set_string(nombre,"Totona");

    /* Escribimos el fichero de salida*/
    if(! config_write_file(&cfg, output_file))
    {
        fprintf(stderr, "Error escribiendo en el fichero.\n");
        config_destroy(&cfg);
        return(EXIT_FAILURE);
    }

    fprintf(stderr, "Se ha actualizado el fichero %s y se ha guardado en: %s\n",
            input_file,output_file);


    config_destroy(&cfg);
    return(EXIT_SUCCESS);
}



Links de interés:
http://jpmens.net/2009/09/17/reading-configuration-files-with-libconfig/

jueves, 2 de mayo de 2013

Comunicación bluetooth Arduino <=> PC Linux con un dongle usb

En este tuto se busca establecer una comunicación bidireccional entre un arduino y una pc usando bluetooth.



Se requiere:
* Dongle usb:

* Arduino + modulo bluetooth (Aqui uso el HC-05)



* Debe tener instalado bluez y moserial. Si usa fedora puede instalarlo con:
     yum install -y blue* moserial*

Vamos a hacer que el Arduino prenda y apague un led según se le indique.

La conexión debe queda así:

Led                ----> Pin 13 Arduino
Bluetootx Tx ----> Arduino Tx
Bluetootx Rx ----> Arduino Rx
Bluetootx Vcc----> Arduino 5v               


Paso 1. Cargar el sketch al arduino: 
Nota: Desconecta el Rx del bluetooth antes de cargar el sketch o te dará problemas en la carga


/** Por Hector Oliveros **/
char inByte;
int  LED = 13; // LED on pin 13

void setup() {
  // El baud rate debe ser el mismo que en el monitor serial y 
  // que el mobulo bluetooth. 
  // para cambiar el baud rate debe entrar en modo AT
  Serial.begin(9600);
}

void loop() {}

// Se activa cuando se detecta escritura en el puerto serial
void serialEvent() {  
  while (Serial.available()) {
    inByte = Serial.read();        
    // Si detecta el caracter '0' entonces apaga el led
    if( inByte == '0' ){
      digitalWrite(LED, LOW);  
      Serial.println("LOW");
    }
    
    // Si detecta el caracter '1' entonces enciende el led
    if( inByte == '1' ){
      digitalWrite(LED, HIGH); 
      Serial.println("HIGH");
    }  
  }
}


Puedes descargar el sketch desde aqui:
Luego de realizada la carga debes volver a conectar el Rx del bluetooth al arduino.

Paso 2: Configurar la PC.
Conecta el dongle usb al equipo.

- Para saber la mac del modulo bluetooth ejecuta:      hcitool scan
- Luego para asociarse al modulo sustituye y ejecuta: rfcomm connect 0 MAC_DEL_MODULO
  donde MAC_DEL_MODULO es la mac del modulo que obtuviste con hcitool.

- Le va a pedir el pin: En el hc-05 es 1234
- Si todo va bien debería mostrar lo siguiente:




Paso 3: Comunicarse con el Arduino:

- Abre moserial y ve a configuración de puerto

- Allí coloca esta configuración: Desmarca imprimir datos recibidos

- Luego se conecta:

- Y prueba intentando prender el led:


Listo 




Notas: Cuando quieras cargar un sketch al arduino desconecta el rx del módulo bluetooth, Puesto que te va a dar fallas.

Probado en Fedora x86_64 

Links de interés :
http://letsmakerobots.com/node/11178
http://www.flickr.com/photos/ricardo_ferreira/4225911933/