Gibt es in Lubuntu einen "Locate Pointer" -Helfer (für Sehbehinderte)?

9

Eines der schwierigsten Dinge für sehbehinderte Menschen ist es, die Maus auf den Bildschirm zu richten.

Aktivieren locate mouseoder aktivieren Sie daher locate pointernach dem Drücken von STRG die visuelle Aufmerksamkeit (blinkender orangefarbener Kreis / Wellen). (im Screenshot schwer zu fangen: links)

Suchen Sie die Maus in Ubuntu

Xubuntu verfügt nicht über dieses unschätzbare Tool, und Ubuntu ist zu schwer für die alte Dual-Core-Hardware mit 1 GB. Gnome hat es, Unity hat es, Compiz hat es, Mint hat es. Xubuntu / XFCE hat es nicht.

Es geht nicht um eine größere Maus, das hilft ein bisschen. Einige blinkende Aufmerksamkeit ist erforderlich.

Verwenden eines kontrastreichen Themas.

Wenn Lubuntu es hat, denke ich darüber nach, von Xu zu Lu zu wechseln.

Janghou
quelle
Haben Sie im Synaptic Package Manager nach Big Cursor gesucht? Es kann Ihr Problem lösen.
Rex
Dies war für Xubuntu, dann wurde der Titel in Lubuntu geändert, aber in den Absätzen wird immer noch über Xubuntu gesprochen. Sind Sie sicher, dass es kein Duplikat für Ihre andere Frage ist
? Suchen Sie den Maushelfer
Nein, ich glaube nicht, dass sich der Titel geändert hat. Vielleicht verwechseln Sie ihn mit dem Screenshot. Ich habe vorher in einer anderen Frage nach Xubuntu gefragt, diese betrifft Lubuntu, generiert aber Tipps zu Xubuntu und Lubuntu.
Janghou

Antworten:

5
  • In Xubuntu gehen auf Settings Manager - Maus und Touchpad - Theme . Dort können Sie den Mauszeiger vergrößern.

    Xubuntu Maus & Touchpad Einstellungen

  • Sie können auch zusätzliche Themen für Ihre Maus herunterladen, die das Anzeigen der Maus erleichtern. Siehe xfce-look.org . Sie können das Thema nach Ihrem Geschmack auswählen.

    Ich denke, dieses passt am besten zu Ihren Bedürfnissen: DMZ mit gelbem Hintergrund Multisized .

    Was Lubuntu betrifft: Laut seiner Wiki-Site verwenden PCManFM und LxPanel das Cursor-Thema nicht, Sie müssen den Cursor manuell ändern. Weitere Informationen finden Sie hier: https://wiki.archlinux.org/index.php/LXDE#Cursors

  • Und noch eine Option: Installieren Sie die MATE-Umgebung auf Ihrem Ubuntu. Sie läuft leicht auf einem 512-MB-RAM-Computer und verfügt über die von Ihnen gesuchte Maus-Flash-Option.

    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
    

    Wenn Sie nur eine Umgebung haben möchten, können Sie die Ubuntu Mate-Version sogar als einzelnes Betriebssystem herunterladen und installieren (beachten Sie jedoch, dass dies von Canonical nicht offiziell unterstützt wird).

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

    Nachdem Sie die MATE-Umgebung installiert haben, können Sie den Mausblitz einstellen:

    1. Gehen Sie zum Menü und wählen Sie EinstellungenMaus und Touchpad .
    2. Aktivieren Sie das Häkchen neben " Zeigerposition anzeigen, wenn die Steuertaste gedrückt wird ".

    Weitere Informationen finden Sie unter dem Link: Suchen Sie schnell den Mauszeiger in Linux Mint / Ubuntu | Ich habe einen PC .

Muzaffar
quelle
Thx, ich werde es versuchen, ich werde auch Treepata-Thema versuchen.
Janghou
Das DMZ / gelbe Maus-Thema ist in Ordnung. Dies zusammen mit dem Treepata Thema (zB verbesserte Hoch / Kontrast) bietet eine angemessene Art der Unterstützung für Xubuntu. Thx
Janghou
5
  1. Laden Sie locate-pointer.c herunter

    wget https://gist.githubusercontent.com/sneetsher/d6d35b6181aa70c27a85/raw/dd874ac535d511c675724fa30d9e12ba5b810c37/locate-pointer.c
    
  2. Installieren Sie die Build-Anforderungen

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

    gcc `pkg-config --cflags x11 cairo` locate-pointer.c -o locate-pointer `pkg-config --libs x11 cairo` -lm
    
  4. Kopieren Sie es in das System bin/

    sudo cp locate-pointer /usr/local/bin/
    
  5. Erstellen Sie eine Verknüpfung, um sie zu starten

  6. Composite aktivieren

    Lubuntu

    1. Installieren Sie einen Composite Manager

      sudo apt-get install xcompmgr
      
    2. Fügen Sie eine Zeile dafür in ein

      ~/.config/lxsession/Lubuntu/autostart
      

    Xubuntu

    1. Ausführen xfwm4-tweaks-settings→ Compositor → Aktivieren Sie Display Compositing aktivieren

Anmerkungen

  • Sie erhalten einen schwarzen Hintergrund ohne Composite. Wenn Sie es nicht zum Laufen bringen konnten, versuchen Sie es mit einem anderen zusammengesetzten Manager wie: compton, cairo-compmgr.

Ortungszeiger in Lubuntu mit xcompmgr

Lokalisierungszeiger in der Xubuntu-Sitzung

Hier ist der vollständige Code von locate-pointer.c, nur für den Fall, dass der Link unterbrochen wird.

/*
 * 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
quelle
1
Es ist ein wenig beunruhigend, dass die To-Do-Liste vor fast 5 Jahren geschrieben wurde und noch nicht in Angriff genommen wurde. Ich bin auch so schlecht, aber zumindest bekomme ich etwas davon nach ein oder zwei Jahren fertig.
WinEunuuchs2Unix
@ WinEunuuchs2Unix, Que Sera Sera. Ich schreibe meine Ideen und Probleme (BugR, Feedback, Testergebnisse) immer in dasselbe Skript. Es ist schwer zu merken, wenn Sie zwischen Projekten wechseln (Mind-Kontext) und 5w / 5w-Rotation in einer anderen Domäne ausführen. Am Ende komme ich nicht zurück, wenn es nicht viel Benutzerbasis hat und gerade genug funktioniert (öffentliches Interesse oder Verschwendung von Ressourcen, übrigens bin ich kein direkter Benutzer meines Skripts). Jetzt bewegt sich die Technologie schnell: x11 ersetzt, dieses Skript gestorben, Einheit gesunken, xkbmod-Indikator gestorben, x11 ersetzt, keyboard_modifiers, todo umschreiben für aktualisiertes gtk, ..: D
user.dz
3

Es gibt einen einfachen und schmutzigen Trick mit "yad", einem Tool zum Generieren relativ einfacher Fenster. (Es ist eine Gabelung aus dem Zenit)

Wenn Sie also ein Skript auf Ihrem Computer erstellen, sagen wir $ HOME / bin mit folgendem Inhalt:

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 

Der Wert für Breite und Höhe sollte 4 Pixel größer sein als die tatsächliche Bildgröße.

Es überlagert das Bild für eine Sekunde an der Position der Maus. Wenn es sich bei dem Bild um ein animiertes GIF handelt, erhalten Sie etwas, das dem sehr ähnlich ist, wonach Sie gefragt haben.

Sie müssen Ihrer neuen App nur eine Tastenkombination zuordnen.

Es gibt einige nette Animationen auf prestoader.net (ich habe keine Copyright-Probleme überprüft)

Ich hoffe es hilft.

Andres
quelle
Funktioniert nicht mit i3):
Jezor
Das ist wirklich cool. Gibt es eine Möglichkeit, es der Maus folgen zu lassen?
Person93
1
Guter Trick! @Jezor, es funktioniert auch in i3. Sie müssen nur das Fenster for_window [class="Yad"] floating enablein Ihrer i3-Konfiguration schweben lassen .
Gautam