Esiste un aiutante "Individua puntatore" in Lubuntu (per ipovedenti)


9

Una delle cose più difficili per i non vedenti è localizzare il mouse guardando verso lo schermo.

Pertanto, abilitando locate mouseo locate pointerprestando ulteriore attenzione visiva (cerchio / onde arancione lampeggianti) dopo aver premuto CTRL. (difficile da catturare nello screenshot: a sinistra)

Individua il mouse in Ubuntu

Xubuntu non ha questo prezioso strumento e Ubuntu è troppo pesante per l'hardware vecchio dual core da 1 GB. Gnome ce l'ha, Unity ce l'ha, Compiz ce l'ha, Mint ce l' ha. Xubuntu / XFCE non ce l'ha.

Non si tratta di un mouse più grande, che aiuta un po '. È necessaria una certa attenzione lampeggiante.

Utilizzando un tema ad alto contrasto.

Se Lubuntu ce l'ha, prendo in considerazione il passaggio da Xu a Lu.


Hai cercato nel gestore di pacchetti Synaptic per Big Cursor? Potrebbe risolvere il tuo problema.
Rex,

Questo era per Xubuntu, quindi il titolo è stato cambiato in Lubuntu ma i paragrafi parlano ancora di Xubuntu. Sei sicuro che non sia un duplicato per l'altra tua domanda Individua l'helper del mouse in Xubuntu per ipovedenti
user.dz,

No, non credo che il titolo sia cambiato, forse lo confondi con lo screenshot. Ho chiesto prima di Xubuntu in un'altra domanda, questa riguarda Lubuntu, ma generando suggerimenti su Xubuntu e Lubuntu.
Janghou,

Risposte:


5
  • In Xubuntu vai su Gestione impostazioni - Mouse e touchpad - Tema . Lì puoi aumentare le dimensioni del cursore del mouse.

    Impostazioni del mouse e del touchpad di Xubuntu

  • Inoltre è possibile scaricare temi aggiuntivi per il mouse che semplificano la visualizzazione del mouse. Vedi xfce-look.org . Puoi scegliere il tema secondo i tuoi gusti.

    Penso che questo soddisfi al meglio le tue esigenze: DMZ con sfondo giallo multisized .

    Per quanto riguarda Lubuntu : secondo il suo sito wiki, PCManFM e LxPanel non usano il tema del cursore, dovrete cambiare il cursore manualmente. Vedi qui per maggiori dettagli: https://wiki.archlinux.org/index.php/LXDE#Cursors

  • E un'altra opzione: installa l'ambiente MATE sul tuo Ubuntu, è leggero su una macchina RAM da 512 MB e ha l'opzione flash del mouse che stai cercando.

    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
    

    Se vuoi avere un solo ambiente puoi anche scaricare e installare la versione di Ubuntu Mate come un singolo sistema operativo (ma nota che non è ufficialmente supportato da Canonical).

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

    Dopo aver installato l'ambiente MATE è possibile impostare il flash del mouse:

    1. Vai a Menu e seleziona PreferenzeMouse e Touchpad .
    2. Abilitare il segno di spunta accanto a " Mostra posizione del puntatore quando si preme il tasto Control ".

    Per i dettagli, consultare il collegamento: Individua rapidamente il puntatore del mouse in Linux Mint / Ubuntu | Ho un PC .


Grazie, ci proverò, proverò anche il tema Treepata.
Janghou,

Il tema del mouse DMZ / giallo va bene. Questo insieme al tema Treepata (ad es. Miglioramento / contrasto migliorati) offre un tipo appropriato di assistenza per Xubuntu. Thx
Janghou,

5
  1. Scarica Locate-pointer.c

    wget https://gist.githubusercontent.com/sneetsher/d6d35b6181aa70c27a85/raw/dd874ac535d511c675724fa30d9e12ba5b810c37/locate-pointer.c
    
  2. Installa i requisiti di build

    sudo apt-get install build-essential libx11-dev libcairo2-dev
    
  3. Costruiscilo

    gcc `pkg-config --cflags x11 cairo` locate-pointer.c -o locate-pointer `pkg-config --libs x11 cairo` -lm
    
  4. Copialo sul sistema bin/

    sudo cp locate-pointer /usr/local/bin/
    
  5. Crea un collegamento per avviarlo

  6. Abilita composito

    Lubuntu

    1. Installa un gestore composito

      sudo apt-get install xcompmgr
      
    2. Aggiungi una linea per esso in

      ~/.config/lxsession/Lubuntu/autostart
      

    Xubuntu

    1. Esegui xfwm4-tweaks-settings→ Compositor → Seleziona Abilita composizione display

Appunti

  • Otterrai uno sfondo nero senza composito. Se non riesci a farlo funzionare, prova un altro gestore composito come: compton, cairo-compmgr.

Locate-pointer in Lubuntu con xcompmgr

pointer-pointer nella sessione di Xubuntu

Ecco il codice completo di locate-pointer.c, nel caso in cui il collegamento si interrompesse.

/*
 * 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 <bf@abenteuerland.at>
 *          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;
}

1
È un po 'sconcertante che l'elenco delle cose da fare sia stato scritto quasi 5 anni fa e non è stato ancora affrontato. Sto male anche in questo modo, ma almeno riesco a farlo dopo un anno o due al massimo.
WinEunuuchs2Unix,

@ WinEunuuchs2Unix, Que Sera Sera. Scrivo sempre idee, problemi (bugR, feedback, risultati dei test) di brain storming nella stessa sceneggiatura. È difficile ricordare quando si cambia progetto (contesto mentale), lavorando a rotazione 5w / 5w su domini diversi. Alla fine, non torno, se non ha molta base di utenti e funziona abbastanza (interesse pubblico o solo spreco di risorse che ho, a proposito non sono un utente diretto del mio script). Quindi ora la tecnologia si sta muovendo rapidamente: x11 sostituito, questo script è morto, unità caduta, xkbmod-indicatore è morto, x11 sostituito, tastiera_modificatori, todo riscrittura per gtk aggiornato, ..: D
user.dz

3

C'è un trucco semplice e sporco usando "yad", che è uno strumento per generare finestre relativamente semplici. (È un bivio da zenity)

Quindi, se crei uno script sul tuo, diciamo $ HOME / bin, con il seguente contenuto:

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 

Il valore di larghezza e altezza dovrebbe essere 4 pixel in più rispetto alla dimensione effettiva dell'immagine.

Sovrapporrà l'immagine, per un secondo, nella posizione del mouse, se l'immagine è una gif animata, otterrai qualcosa di molto simile a quello che stai chiedendo.

Devi solo mappare una scorciatoia da tastiera sulla tua nuova app.

Ci sono alcune belle animazioni su preloader.net (non ho verificato i problemi di copyright)

Spero che sia d'aiuto.


Non funziona con i3):
Jezor

Questo è davvero fantastico. C'è un modo per farlo seguire il mouse?
Person93

1
Bel trucco! @Jezor, funziona anche in i3. Hai solo bisogno di rendere la finestra mobile usando for_window [class="Yad"] floating enablenella tua configurazione i3.
Gautam,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.