¿Hay un ayudante de 'Localizar puntero' en Lubuntu (para personas con discapacidad visual)

9

Una de las cosas más difíciles para las personas con discapacidad visual es ubicar el mouse mirando hacia la pantalla.

Por lo tanto, habilite locate mouseo locate pointerpreste atención visual adicional (círculo / ondas naranjas parpadeantes) después de presionar CTRL. (difícil de capturar en la captura de pantalla: a la izquierda)

Ubique el mouse en Ubuntu

Xubuntu no tiene esta herramienta invaluable, y Ubuntu es demasiado pesado para el hardware antiguo de doble núcleo de 1 GB. Gnome lo tiene, Unity lo tiene, Compiz lo tiene, Mint lo tiene. Xubuntu / XFCE no lo tiene.

No se trata de un mouse más grande, eso ayuda un poco. Se necesita un poco de atención intermitente.

Usando el tema de alto contraste.

Si Lubuntu lo tiene, considero cambiar de Xu a Lu.

Janghou
fuente
¿Has buscado en el administrador de paquetes Synaptic para Big Cursor? Puede resolver tu problema.
Rex
Esto fue para Xubuntu, luego el título fue cambiado a Lubuntu pero los párrafos aún hablan de Xubuntu. ¿Estás seguro que no es un duplicado de su otra pregunta Localizar ayudante de ratón en Xubuntu para discapacitados visuales
user.dz
No, no creo que el título haya cambiado, quizás lo confundas con la captura de pantalla. Pregunté antes sobre Xubuntu en otra pregunta, esta es sobre Lubuntu, pero genera consejos sobre Xubuntu y Lubuntu.
Janghou

Respuestas:

5
  • En Xubuntu, vaya a Administrador de configuración - Mouse y panel táctil - Tema . Allí puede aumentar el tamaño del cursor del mouse.

    Configuración de mouse y touchpad Xubuntu

  • También puede descargar temas adicionales para su mouse que facilitan la visualización del mouse. Ver xfce-look.org . Puedes elegir el tema según tus gustos.

    Creo que este se adapta mejor a sus necesidades: DMZ con fondo amarillo multisized .

    En cuanto a Lubuntu : según su sitio wiki, PCManFM y LxPanel no usan el tema del cursor, deberá cambiar el cursor manualmente. Ver aquí para más detalles: https://wiki.archlinux.org/index.php/LXDE#Cursors

  • Y una opción más: instale el entorno MATE en su Ubuntu, es liviano y se ejecuta en una máquina RAM de 512 MB y tiene la opción de flash del mouse que está buscando.

    sudo apt-add-repository ppa:ubuntu-mate-dev/ppa 
    sudo apt-add-repository ppa:ubuntu-mate-dev/trusty-mate 
    
    sudo apt-get update && sudo apt-get upgrade 
    sudo apt-get install ubuntu-mate-core ubuntu-mate-desktop
    

    Si desea tener un solo entorno, incluso puede descargar e instalar la versión de Ubuntu Mate como un único sistema operativo (pero tenga en cuenta que Canonical no lo admite oficialmente).

    https://ubuntu-mate.org/longterm/

    Después de haber instalado el entorno MATE, puede configurar el flash del mouse:

    1. Vaya a Menú y seleccione PreferenciasRatón y panel táctil .
    2. Active la marca de verificación junto a " Mostrar posición del puntero cuando se presiona la tecla Control ".

    Vea el enlace para más detalles: Ubique rápidamente el puntero del mouse en Linux Mint / Ubuntu | Tengo un PC .

Muzaffar
fuente
Thx, lo intentaré, también probaré el tema Treepata.
Janghou
El tema DMZ / mouse amarillo está bien. Esto junto con el tema Treepata (por ejemplo, alto / contraste mejorado) ofrece un tipo apropiado de asistencia para Xubuntu. Thx
Janghou
5
  1. Descargar localizar-pointer.c

    wget https://gist.githubusercontent.com/sneetsher/d6d35b6181aa70c27a85/raw/dd874ac535d511c675724fa30d9e12ba5b810c37/locate-pointer.c
    
  2. Instalar requisitos de compilación

    sudo apt-get install build-essential libx11-dev libcairo2-dev
    
  3. Constrúyelo

    gcc `pkg-config --cflags x11 cairo` locate-pointer.c -o locate-pointer `pkg-config --libs x11 cairo` -lm
    
  4. Cópialo al sistema bin/

    sudo cp locate-pointer /usr/local/bin/
    
  5. Crea un atajo para iniciarlo

  6. Habilitar compuesto

    Lubuntu

    1. Instalar un administrador compuesto

      sudo apt-get install xcompmgr
      
    2. Agregue una línea para ello en

      ~/.config/lxsession/Lubuntu/autostart
      

    Xubuntu

    1. Ejecutar xfwm4-tweaks-settings→ Compositor → Marcar Habilitar visualización de composición

Notas

  • Obtendrás un fondo negro sin compuesto. Si no pudo hacer que funcione, pruebe con otro administrador compuesto como: compton, cairo-compmgr.

localizar-puntero en Lubuntu con xcompmgr

localizar-puntero en sesión Xubuntu

Aquí está el código completo de locate-pointer.c, solo en caso de que se rompa el enlace.

/*
 * locate-pointer.c
 * Some windows manager missing option to locate mouse pointer as accessibity feature.
 * To get transparent window need to activate `composite` service for wm.
 * Coded in c / xlib so it can work in most wm's.
 * 
 * Coded by:    Abdellah Chelli
 * Date:    January 2015
 *
 * Original code by:    Bernhard R. Fischer <[email protected]>
 *          Cairo graphics and X11/Xlib motion example.
 *          https://www.cypherpunk.at/2014/11/cairo-graphics-and-x11xlib/
 *
 * gcc `pkg-config --cflags x11 cairo` locate-pointer.c -o locate-pointer `pkg-config --libs x11 cairo` -lm
 */

#include <X11/Xlib.h>
#include <X11/Xatom.h>
#include <X11/Xutil.h>
#include <cairo.h>
#include <cairo-xlib.h>

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

int cairo_check_event(cairo_surface_t *sfc, int block, double *mx, double *my)
{
   char keybuf[8];
   KeySym key;
   XEvent e;
   XSync(cairo_xlib_surface_get_display(sfc),False);
   for (;;)
   {
      if (block || XPending(cairo_xlib_surface_get_display(sfc)))
         XNextEvent(cairo_xlib_surface_get_display(sfc), &e);
      else 
         return 0;

      switch (e.type)
      {
         case ButtonPress:
            return -e.xbutton.button;
         case KeyPress:
            XLookupString(&e.xkey, keybuf, sizeof(keybuf), &key, NULL);
            return key;
         case  MotionNotify:
            *mx = e.xmotion.x;
            *my = e.xmotion.y;

         default:
            //fprintf(stderr, "Dropping unhandled XEevent.type = %d.\n", e.type);
            return 0;
      }
   }
}


static void fullscreen(Display* dpy, Window win)
{
  Atom atoms[2] = { XInternAtom(dpy, "_NET_WM_STATE_FULLSCREEN", False), None };
  XChangeProperty(dpy, win, XInternAtom(dpy, "_NET_WM_STATE", False),
                  XA_ATOM, 32, PropModeReplace, (unsigned char*) atoms, 1);
}


cairo_surface_t *cairo_create_x11_surface(int *x, int *y, double* mx, double *my)
{
   Display *dsp;
   Drawable da;
   Screen *scr;
   int screen;
   cairo_surface_t *sfc;

   XVisualInfo vinfo;
   XSetWindowAttributes win_attr;
   int mousex, mousey;

   if ((dsp = XOpenDisplay(NULL)) == NULL)
      exit(1);
   //XSynchronize(dsp,True);
   screen = DefaultScreen(dsp);
   scr = DefaultScreenOfDisplay(dsp);

   XMatchVisualInfo(dsp, screen, 32, TrueColor, &vinfo);
   win_attr.colormap = XCreateColormap(dsp, DefaultRootWindow(dsp), vinfo.visual, AllocNone);
   win_attr.background_pixel = 0;
   win_attr.border_pixel = 0;

   *x = WidthOfScreen(scr), *y = HeightOfScreen(scr);

   da = XCreateWindow(dsp, DefaultRootWindow(dsp),
           0, 0, *x, *y, 0, vinfo.depth, InputOutput,
           vinfo.visual,
           CWColormap | CWBorderPixel | CWBackPixel, &win_attr);

   fullscreen (dsp, da);

   XSelectInput(dsp, da, PointerMotionMask | ButtonPressMask | KeyPressMask);
   XMapWindow(dsp, da);

   sfc = cairo_xlib_surface_create(dsp, da, vinfo.visual, *x, *y);
   cairo_xlib_surface_set_size(sfc, *x, *y);

   Window rw=DefaultRootWindow(dsp);
   Window cw=da;
   int rx, ry;
   unsigned int mr;
   XQueryPointer(dsp, da, &rw, &cw, &rx , &ry, &mousex, &mousey, &mr);
   *mx = mousex;
   *my = mousey;

   return sfc;
}


void cairo_close_x11_surface(cairo_surface_t *sfc)
{
   Display *dsp = cairo_xlib_surface_get_display(sfc);

   cairo_surface_destroy(sfc);
   XCloseDisplay(dsp);
}

int main(int argc, char **argv)
{
   cairo_surface_t *sfc;
   cairo_t *ctx;
   int x, y;
   struct timespec ts = {0, 5000000};

   double mx, my;
   int c = 0;
   double dr0, dr1, dr2, a;

   int running;

   x = y = 0;

   sfc = cairo_create_x11_surface(&x, &y, &mx, &my);
   ctx = cairo_create(sfc);

   for (running = 1; running;)
   {

      dr0 = 20 * sin(c*M_PI/180.0);
      dr1 = 20 * sin((c+45)*M_PI/180.0);
      dr2 = 20 * sin((c+90)*M_PI/180.0);
      a = c*M_PI/720.0;

      cairo_save (ctx);
      //cairo_set_source_rgba (ctx, 0, 0, 0, 1);
      //cairo_set_operator (ctx, CAIRO_OPERATOR_SOURCE);
      cairo_set_operator (ctx, CAIRO_OPERATOR_CLEAR);
      cairo_paint (ctx); 
      cairo_restore (ctx);

      cairo_push_group(ctx);
      cairo_translate(ctx, mx, my);
      cairo_rotate(ctx,a);
      cairo_translate(ctx, -mx, -my);
      cairo_set_source_rgba(ctx, 0, 0, 0, 0.1);
      cairo_paint(ctx);

      cairo_set_line_join (ctx, CAIRO_LINE_JOIN_MITER);
      cairo_set_source_rgba(ctx, 1, 0, 0, 1);
      cairo_set_line_width (ctx, 30);
      cairo_move_to (ctx, mx-50, my-100-dr0);
      cairo_rel_line_to (ctx, 50, 30);
      cairo_rel_line_to (ctx, 50, -30);
      cairo_move_to (ctx, mx+100+dr0, my-50);
      cairo_rel_line_to (ctx, -30, 50);
      cairo_rel_line_to (ctx, 30, 50);
      cairo_move_to (ctx, mx+50, my+100+dr0);
      cairo_rel_line_to (ctx, -50, -30);
      cairo_rel_line_to (ctx, -50, 30);
      cairo_move_to (ctx, mx-100-dr0, my+50);
      cairo_rel_line_to (ctx, 30, -50);
      cairo_rel_line_to (ctx, -30, -50);
      cairo_stroke(ctx);
      cairo_set_source_rgba(ctx, 1, 0, 0, 0.5);
      cairo_move_to (ctx, mx-50, my-150-dr1);
      cairo_rel_line_to (ctx, 50, 30);
      cairo_rel_line_to (ctx, 50, -30);
      cairo_move_to (ctx, mx+150+dr1, my-50);
      cairo_rel_line_to (ctx, -30, 50);
      cairo_rel_line_to (ctx, 30, 50);
      cairo_move_to (ctx, mx+50, my+150+dr1);
      cairo_rel_line_to (ctx, -50, -30);
      cairo_rel_line_to (ctx, -50, 30);
      cairo_move_to (ctx, mx-150-dr1, my+50);
      cairo_rel_line_to (ctx, 30, -50);
      cairo_rel_line_to (ctx, -30, -50);
      cairo_stroke(ctx);
      cairo_set_source_rgba(ctx, 1, 0, 0, 0.3);
      cairo_move_to (ctx, mx-50, my-200-dr2);
      cairo_rel_line_to (ctx, 50, 30);
      cairo_rel_line_to (ctx, 50, -30);
      cairo_move_to (ctx, mx+200+dr2, my-50);
      cairo_rel_line_to (ctx, -30, 50);
      cairo_rel_line_to (ctx, 30, 50);
      cairo_move_to (ctx, mx+50, my+200+dr2);
      cairo_rel_line_to (ctx, -50, -30);
      cairo_rel_line_to (ctx, -50, 30);
      cairo_move_to (ctx, mx-200-dr2, my+50);
      cairo_rel_line_to (ctx, 30, -50);
      cairo_rel_line_to (ctx, -30, -50);
      cairo_stroke(ctx);
      cairo_pop_group_to_source(ctx);
      cairo_paint(ctx);
      cairo_surface_flush(sfc);

      switch (cairo_check_event(sfc, 0, &mx, &my))
      {
         case 0xff1b:   // Esc
         case -1:       // left mouse button
            running = 0;
            break;
      }

      c++;
      nanosleep(&ts, NULL);
   }

   cairo_destroy(ctx);
   cairo_close_x11_surface(sfc);
   return 0;
}
user.dz
fuente
1
Es un poco desconcertante que la lista de tareas pendientes se haya escrito hace casi 5 años y aún no se haya abordado. También soy malo de esa manera, pero al menos lo hago después de un año o dos como máximo.
WinEunuuchs2Unix
@ WinEunuuchs2Unix, Que Sera Sera. Siempre escribo mis ideas de tormenta de ideas, problemas (BugR, comentarios, resultados de pruebas) en el mismo guión. Es difícil de recordar cuando se cambian proyectos (contexto mental), trabajando 5w / 5w rotación en diferentes dominios. Al final, no vuelvo, si no tiene mucha base de usuarios y solo funciona lo suficiente (interés público o solo pérdida de recursos que tengo, por cierto, no soy un usuario directo de mi script). Así que ahora la tecnología avanza rápidamente: x11 reemplazado, este script murió, la unidad cayó, xkbmod-indicador murió, x11 reemplazado, keyboard_modifiers, reescritura de todo para gtk actualizado, ..: D
user.dz
3

Hay un truco simple y sucio que usa "yad", que es una herramienta para generar ventanas relativamente simples. (Es un tenedor de zenity)

Entonces, si crea un script en su, digamos $ HOME / bin, con el siguiente contenido:

yad --picture  --width=68 --height=68 --no-buttons --size=fit --filename=ANY_PICTURE_YOU_LIKE --timeout=1 --mouse --undecorated  --on-top  > /dev/null 2>&1 

El valor de ancho y alto debe ser 4 píxeles más que el tamaño real de la imagen.

Superpondrá la imagen, por un segundo, en la posición del mouse, si la imagen es un gif animado, obtienes algo bastante similar a lo que estás pidiendo.

Solo tiene que asignar un atajo de teclado a su nueva aplicación.

Hay algunas animaciones agradables en preloader.net (no he verificado problemas de derechos de autor)

Espero eso ayude.

Andres
fuente
No funciona con i3):
Jezor
Esto es realmente genial. ¿Hay alguna manera de hacer que siga al mouse?
Persona93
1
¡Buen truco! @Jezor, también funciona en i3. Solo necesita hacer que la ventana flote usando for_window [class="Yad"] floating enableen su configuración i3.
Gautam