Apakah ada bantuan `Locate pointer` di Lubuntu (untuk tunanetra)

9

Salah satu hal yang paling sulit bagi orang-orang tunanetra adalah menemukan mouse untuk melihat ke layar.

Karena itu mengaktifkan locate mouseatau locate pointermemberikan perhatian visual ekstra (berkedip lingkaran / gelombang oranye) setelah menekan CTRL. (tangkapan layar sulit ditangkap: di sebelah kiri)

Temukan mouse di Ubuntu

Xubuntu tidak memiliki alat yang sangat berharga ini, dan Ubuntu terlalu berat untuk perangkat keras lama dual core 1GB. Gnome memilikinya, Unity memilikinya, Compiz memilikinya, Mint memilikinya. Xubuntu / XFCE tidak memilikinya.

Ini bukan tentang mouse yang lebih besar, yang sedikit membantu. Diperlukan perhatian kilat.

Menggunakan tema kontras tinggi.

Jika Lubuntu memilikinya, saya mempertimbangkan beralih dari Xu ke Lu.

Janghou
sumber
Sudahkah Anda mencari di manajer paket Synaptic untuk Big Cursor? Ini bisa menyelesaikan masalah Anda.
Rex
Ini untuk Xubuntu, maka judulnya diubah menjadi Lubuntu tetapi paragraf masih berbicara tentang Xubuntu. Apakah Anda yakin itu bukan duplikat untuk pertanyaan Anda yang lain Temukan penolong mouse di Xubuntu untuk tunanetra
user.dz
Tidak, saya rasa judulnya tidak berubah, mungkin Anda bingung dengan tangkapan layarnya. Saya bertanya sebelumnya tentang Xubuntu dalam pertanyaan lain, ini tentang Lubuntu, tetapi menghasilkan tips tentang Xubuntu dan Lubuntu.
Janghou

Jawaban:

5
  • Di Xubuntu, buka Settings Manager - Mouse dan Touchpad - Theme . Di sana Anda dapat membuat ukuran kursor mouse lebih besar.

    Pengaturan xubuntu mouse & touchpad

  • Anda juga dapat mengunduh tema tambahan untuk mouse Anda yang membuat tampilan mouse lebih mudah. Lihat xfce-look.org . Anda dapat memilih tema berdasarkan selera Anda.

    Saya pikir ini yang paling sesuai dengan kebutuhan Anda: DMZ dengan Background Kuning Multisized .

    Adapun Lubuntu : Menurut situs wiki-nya, PCManFM dan LxPanel tidak menggunakan tema kursor, Anda harus mengubah kursor secara manual. Lihat di sini untuk detail lebih lanjut: https://wiki.archlinux.org/index.php/LXDE#Cursors

  • Dan satu opsi lagi: Instal lingkungan MATE di Ubuntu Anda, ini ringan dijalankan pada mesin RAM 512-MB dan memiliki opsi flash mouse yang Anda cari.

    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
    

    Jika Anda hanya ingin memiliki satu lingkungan, Anda bahkan dapat mengunduh dan menginstal versi Ubuntu Mate sebagai OS tunggal (Tetapi perhatikan bahwa ini tidak didukung secara resmi oleh Canonical).

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

    Setelah Anda menginstal lingkungan MATE Anda dapat mengatur flash mouse:

    1. Buka Menu dan pilih PreferensiMouse dan Touchpad .
    2. Aktifkan tanda centang di sebelah " Tampilkan posisi penunjuk saat tombol Kontrol ditekan ".

    Lihat tautan untuk detailnya: Temukan Mouse Pointer Dengan Cepat di Linux Mint / Ubuntu | Saya Punya PC .

Muzaffar
sumber
Terima kasih, saya akan coba, saya juga akan mencoba tema Treepata.
Janghou
Tema mouse DMZ / kuning baik-baik saja. Ini bersama dengan tema Treepata (mis. Peningkatan kontras / tinggi) menawarkan jenis bantuan yang sesuai untuk Xubuntu. Thx
Janghou
5
  1. Unduh loc-pointer.c

    wget https://gist.githubusercontent.com/sneetsher/d6d35b6181aa70c27a85/raw/dd874ac535d511c675724fa30d9e12ba5b810c37/locate-pointer.c
    
  2. Instal persyaratan bangunan

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

    gcc `pkg-config --cflags x11 cairo` locate-pointer.c -o locate-pointer `pkg-config --libs x11 cairo` -lm
    
  4. Salin ke sistem bin/

    sudo cp locate-pointer /usr/local/bin/
    
  5. Buat jalan pintas untuk meluncurkannya

  6. Aktifkan Komposit

    Lubuntu

    1. Instal manajer komposit

      sudo apt-get install xcompmgr
      
    2. Tambahkan baris untuk itu di

      ~/.config/lxsession/Lubuntu/autostart
      

    Xubuntu

    1. Jalankan xfwm4-tweaks-settings→ Kompositor → Periksa Aktifkan Penggabungan Display

Catatan

  • Anda akan mendapatkan latar belakang hitam tanpa komposit. Jika Anda tidak dapat membuatnya berfungsi, coba manajer komposit lain seperti: compton, cairo-compmgr.

cari-pointer di Lubuntu dengan xcompmgr

cari-pointer di sesi Xubuntu

Berikut adalah kode lengkap locate-pointer.c, hanya jika tautan rusak.

/*
 * 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
sumber
1
Agak membingungkan daftar To-Do ditulis hampir 5 tahun yang lalu dan belum ditangani. Aku juga buruk tapi setidaknya aku bisa menyelesaikannya setelah satu atau dua tahun.
WinEunuuchs2Unix
@ WinEunuuchs2Unix, Que Sera Sera. Saya selalu menulis ide, masalah (brainRing, umpan balik, hasil pengujian) di otak saya yang sama. Sulit untuk diingat ketika beralih proyek (konteks pikiran), bekerja rotasi 5w / 5w pada domain yang berbeda. Pada akhirnya, saya tidak kembali, jika tidak memiliki basis pengguna yang banyak dan hanya berfungsi (kepentingan publik atau hanya pemborosan sumber daya yang saya miliki, BTW saya bukan pengguna langsung skrip saya). Jadi sekarang teknologinya bergerak cepat: x11 diganti, skrip ini mati, kesatuan turun, xkbmod-indikator mati, x11 diganti, keyboard_modifiers, todo penulisan ulang untuk gtk yang diperbarui, ..: D
user.dz
3

Ada trik sederhana dan kotor menggunakan "yad", yang merupakan alat untuk menghasilkan windows yang relatif sederhana. (Ini adalah garpu dari zenity)

Jadi, jika Anda membuat skrip pada Anda, katakanlah $ HOME / bin, dengan konten berikut:

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 

Nilai lebar dan tinggi harus 4 piksel lebih dari ukuran gambar yang sebenarnya.

Ini akan menutupi gambar, untuk sesaat, pada posisi mouse, jika gambar tersebut adalah animasi gif, Anda mendapatkan sesuatu yang sangat mirip dengan apa yang Anda tanyakan.

Anda hanya perlu memetakan pintasan keyboard ke aplikasi baru Anda.

Ada beberapa animasi yang bagus di preloader.net (Saya belum memeriksa masalah hak cipta)

Semoga ini bisa membantu.

Andres
sumber
Tidak bekerja dengan i3):
Jezor
Ini sangat keren. Apakah ada cara untuk membuatnya mengikuti mouse?
Person93
1
Trik yang bagus! @ Joor, itu bekerja di i3 juga. Anda hanya perlu membuat jendela mengambang menggunakan for_window [class="Yad"] floating enablekonfigurasi i3 Anda.
Gautam