Existe-t-il un assistant de localisation du pointeur à Lubuntu (pour les malvoyants)

9

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

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

Localiser la souris dans Ubuntu

Xubuntu n'a pas cet outil précieux, et Ubuntu est trop lourd pour l'ancien matériel dual core 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, cela aide un peu. Une attention clignotante est nécessaire.

Utilisation d'un thème à contraste élevé.

Si Lubuntu l'a, je pense passer de Xu à Lu.

Janghou
la source
Avez-vous cherché dans le gestionnaire de paquets Synaptic pour Big Cursor? Cela peut résoudre votre problème.
Rex
C'était pour Xubuntu, puis le titre a été changé pour Lubuntu mais les paragraphes parlent toujours de Xubuntu. Êtes-vous sûr que ce n'est pas un doublon pour votre autre question Localiser l'aide de la souris dans Xubuntu pour les malvoyants
user.dz
Non, je ne pense pas que le titre ait changé, peut-être le confondez-vous avec la capture d'écran. J'ai déjà posé des questions sur Xubuntu dans une autre question, celle-ci concerne Lubuntu, mais génère des conseils sur Xubuntu et Lubuntu.
Janghou

Réponses:

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

    Paramètres de la souris et du pavé tactile Xubuntu

  • Vous pouvez également télécharger des thèmes supplémentaires pour votre souris qui facilitent la visualisation de la souris. Voir xfce-look.org . Vous pouvez choisir le thème selon vos goûts.

    Je pense que celui-ci convient le mieux à vos besoins: DMZ avec fond jaune multisize .

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

  • Et une autre option: installez l'environnement MATE sur votre Ubuntu, il est léger et fonctionne sur une machine RAM de 512 Mo et dispose de 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 ne souhaitez avoir qu'un seul environnement, vous pouvez même télécharger et installer la version Ubuntu Mate en tant que système d'exploitation unique (mais notez que cela 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 flash de la souris:

    1. Allez dans Menu et sélectionnez PréférencesSouris et pavé tactile .
    2. Activez la coche à côté de " Afficher la position du pointeur lorsque la touche Ctrl 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 .

Muzaffar
la source
Thx, je vais essayer, je vais aussi essayer le thème Treepata.
Janghou
Le thème de la souris DMZ / jaune est très bien. Ceci, associé au thème Treepata (par exemple, amélioration du contraste / contraste élevé), offre un type d'assistance approprié pour Xubuntu. Thx
Janghou
5
  1. Télécharger Locate-pointer.c

    wget https://gist.githubusercontent.com/sneetsher/d6d35b6181aa70c27a85/raw/dd874ac535d511c675724fa30d9e12ba5b810c37/locate-pointer.c
    
  2. Installer les exigences 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 dans le système bin/

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

  6. Activer le composite

    Lubuntu

    1. Installer un gestionnaire composite

      sudo apt-get install xcompmgr
      
    2. Ajoutez-y une ligne

      ~/.config/lxsession/Lubuntu/autostart
      

    Xubuntu

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

Remarques

  • Tu vas avoir un fond noir sans composite. Si vous ne parvenez pas à le faire fonctionner, essayez un autre gestionnaire de composites comme: compton, cairo-compmgr.

localiser-pointeur à Lubuntu avec xcompmgr

Locate-pointer dans la session Xubuntu

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

/*
 * 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
la source
1
C'est un peu déconcertant, la liste des choses à faire a été écrite il y a près de 5 ans et n'a pas encore été abordée. Je suis mauvais comme ça aussi mais au moins j'en fais une partie après un an ou deux au maximum.
WinEunuuchs2Unix
@ WinEunuuchs2Unix, Que Sera Sera. J'écris toujours mes idées, mes problèmes (brainR, feedback, tests) dans le même script. Il est difficile de se souvenir lors du changement de projet (contexte mental), en travaillant une rotation 5w / 5w sur un domaine différent. En fin de compte, je ne reviens pas, s'il n'a pas beaucoup de base d'utilisateurs et qu'il fonctionne juste assez (intérêt public ou simplement gaspillage de ressources, BTW, je ne suis pas un utilisateur direct de mon script). Alors maintenant, la technologie évolue rapidement: x11 remplacé, ce script est mort, l'unité a chuté, xkbmod-indicator est mort, x11 remplacé, keyboard_modifiers, todo rewriting for updated gtk, ..: D
user.dz
3

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

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 de très similaire à ce que vous demandez.

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

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

J'espère que cela aide.

Andres
la source
Ne fonctionne pas avec i3):
Jezor
C'est vraiment cool. Existe-t-il un moyen de le faire suivre la souris?
Person93
1
Joli tour! @Jezor, cela fonctionne aussi dans i3. Il vous suffit de faire flotter la fenêtre à l'aide for_window [class="Yad"] floating enablede votre configuration i3.
Gautam