web-dev-qa-db-fra.com

Existe-t-il un assistant `Locate pointeur` à Lubuntu (pour les malvoyants)

L'une des choses les plus difficiles pour les malvoyants est de localiser la souris en regardant l'écran.

Par conséquent, l'activation de locate mouseou locate pointer donne une attention visuelle supplémentaire (cercle orange clignotant/vagues) après avoir appuyé sur CTRL. (difficile à attraper en capture d'écran: à gauche)

Locate mouse in Ubuntu

Xubuntu ne dispose pas de cet outil inestimable et Ubuntu est trop lourd pour le vieux matériel bicœur de 1 Go. Gnome l'a, Unity l'a, Compiz l'a, Mint l'a. Xubuntu/XFCE ne l'a pas.

Il ne s'agit pas d'une souris plus grosse, ça aide un peu. Une certaine attention est nécessaire.

Utiliser un thème à contraste élevé.

Si Lubuntu l’a, j’envisage de passer de Xu à Lu.

8
Janghou
  • Dans Xubuntu , accédez à Gestionnaire de paramètres - Souris et pavé tactile - Thème . Là, vous pouvez agrandir la taille du curseur de la souris.

    Xubuntu mouse & touchpad csettings

  • Vous pouvez également télécharger des thèmes supplémentaires pour votre souris, ce qui facilite sa visualisation. Voir xfce-look.org . Vous pouvez choisir le thème par vos goûts.

    Je pense que celui-ci répond le mieux à vos besoins: DMZ avec fond jaune Multisized .

    En ce qui concerne Lubuntu : Selon son site wiki, PCManFM et LxPanel n'utilisent pas le thème du curseur, vous devrez le modifier manuellement. Voir ici pour plus de détails: https://wiki.archlinux.org/index.php/LXDE#Cursors

  • Et encore une option: Installez MATE environment sur votre Ubuntu, il est léger sous 512 Mo RAM machine et a l'option flash de la souris que vous recherchez.

    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 vous voulez avoir un seul environnement, vous pouvez même télécharger et installer la version d'Ubuntu Mate en tant que système d'exploitation unique (mais notez que ce n'est pas officiellement pris en charge par Canonical).

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

    Après avoir installé l'environnement MATE, vous pouvez définir le clignotement de la souris:

    1. Allez au menu et sélectionnez Préférences Souris et pavé tactile .
    2. Cochez la case en regard de " Afficher la position du pointeur lorsque la touche Contrôle est enfoncée ".

    Voir le lien pour plus de détails: localiser rapidement le pointeur de la souris dans Linux Mint/Ubuntu | J'ai un PC .

5
Muzaffar
  1. Télécharger localiser-pointeur.c

    wget https://Gist.githubusercontent.com/sneetsher/d6d35b6181aa70c27a85/raw/dd874ac535d511c675724fa30d9e12ba5b810c37/locate-pointer.c
    
  2. Installer les conditions de construction

    Sudo apt-get install build-essential libx11-dev libcairo2-dev
    
  3. Construit le

    gcc `pkg-config --cflags x11 cairo` locate-pointer.c -o locate-pointer `pkg-config --libs x11 cairo` -lm
    
  4. Copiez-le sur le système bin/

    Sudo cp locate-pointer /usr/local/bin/
    
  5. Créer un raccourci pour le lancer

  6. Activer Composite

    Lubuntu

    1. Installer un gestionnaire composite

      Sudo apt-get install xcompmgr
      
    2. Ajouter une ligne pour cela dans

      ~/.config/lxsession/Lubuntu/autostart
      

    Xubuntu

    1. Exécuter xfwm4-tweaks-settings → Compositeur → Activer la composition d'affichage

Remarques

  • Tu vas avoir un fond noir sans composite. Si vous ne pouvez pas le faire fonctionner, essayez un autre gestionnaire composite tel que: compton, cairo-compmgr.

locate-pointer in Lubuntu with xcompmgr

locate-pointer in Xubuntu session

Voici le code complet de locate-pointer.c, juste au cas où le lien serait rompu.

/*
 * 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;
}
5
user.dz

Il existe un truc simple et sale en utilisant "yad", qui est un outil pour générer des fenêtres relativement simples. (C'est une fourchette de zenity)

Donc, si vous créez un script sur votre, disons $ HOME/bin, avec le contenu suivant:

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 

La valeur de la largeur et de la hauteur doit être supérieure de 4 pixels à la taille réelle de l'image.

Il superposera l'image pendant une seconde, à la position de la souris, si l'image est un gif animé, vous obtenez quelque chose d'assez similaire à ce que vous demandez.

Il vous suffit de mapper un raccourci clavier vers votre nouvelle application.

Il y a quelques belles animations sur preloader.net (je n'ai pas vérifié les problèmes de copyright)

J'espère que ça aide.

2
Andres