Có người trợ giúp `Xác định vị trí con trỏ 'trong Lubfox (dành cho người khiếm thị)


9

Một trong những điều khó khăn nhất đối với người khiếm thị là định vị chuột nhìn lên màn hình.

Do đó, cho phép locate mousehoặc locate pointercung cấp thêm một số chú ý trực quan (nhấp nháy vòng tròn / sóng màu cam) sau khi nhấn CTRL. (khó bắt trong ảnh chụp màn hình: ở bên trái)

Xác định vị trí chuột trong Ubuntu

Xubfox không có công cụ vô giá này và Ubuntu quá nặng đối với phần cứng cũ 1GB, lõi kép. Gnome có nó, Unity có nó, Compiz có nó, Mint có nó. Xubfox / XFCE không có nó.

Nó không phải là về một con chuột lớn hơn, điều đó giúp một chút. Một số chú ý nhấp nháy là cần thiết.

Sử dụng chủ đề tương phản cao.

Nếu Lubfox có nó, tôi xem xét chuyển từ Xu sang Lu.


Bạn đã xem trong trình quản lý gói Synaptic cho Big Coder chưa? Nó có thể giải quyết vấn đề của bạn.
Rex

Cái này là dành cho Xubfox, sau đó tiêu đề đã được đổi thành Lubfox nhưng các đoạn vẫn nói về Xubfox. Bạn có chắc chắn đó không phải là một bản sao cho câu hỏi khác của bạn Định vị trình trợ giúp chuột trong Xubfox cho người khiếm thị
user.dz

Không, tôi không nghĩ tiêu đề đã thay đổi, có thể bạn nhầm lẫn nó với ảnh chụp màn hình. Tôi đã hỏi trước về Xubfox trong một câu hỏi khác, câu hỏi này là về Lubfox, nhưng tạo ra các mẹo về Xubfox và Lubfox.
Janghou

Câu trả lời:


5
  • Trong Xubfox, hãy vào Trình quản lý cài đặt - Chuột và Bàn di chuột - Chủ đề . Ở đó bạn có thể làm cho kích thước con trỏ chuột lớn hơn.

    Cài đặt chuột và bàn di chuột Xubfox

  • Ngoài ra, bạn có thể tải xuống các chủ đề bổ sung cho chuột giúp việc xem chuột dễ dàng hơn. Xem xfce-look.org . Bạn có thể chọn chủ đề theo thị hiếu của bạn.

    Tôi nghĩ rằng điều này phù hợp nhất với nhu cầu của bạn: DMZ với Đa nền màu vàng .

    Đối với Lubfox : Theo trang wiki của nó, PCManFM và LxPanel không sử dụng chủ đề con trỏ, bạn sẽ phải thay đổi con trỏ theo cách thủ công. Xem tại đây để biết thêm chi tiết: https://wiki.archlinux.org/index.php/LXDE#Cursors

  • Và một tùy chọn khác: Cài đặt môi trường MATE trên Ubuntu của bạn, nó chạy nhẹ trên máy RAM 512 MB và có tùy chọn flash chuột mà bạn đang tìm kiếm.

    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
    

    Nếu bạn muốn chỉ có một môi trường, bạn thậm chí có thể tải xuống và cài đặt phiên bản Ubuntu Mate dưới dạng một HĐH duy nhất (Nhưng lưu ý rằng điều đó không được Canonical hỗ trợ chính thức).

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

    Sau khi bạn đã cài đặt môi trường MATE, bạn có thể đặt đèn flash chuột:

    1. Chuyển đến Menu và chọn Tùy chọnChuột và Bàn di chuột .
    2. Kích hoạt dấu tick bên cạnh Vị trí con trỏ Hiển thị con trỏ khi nhấn Phím điều khiển .

    Xem liên kết để biết chi tiết: Định vị nhanh con trỏ chuột trong Linux Mint / Ubuntu | Tôi có một PC .


Thx, tôi sẽ thử, tôi cũng sẽ thử chủ đề Treepata.
Janghou

Chủ đề DMZ / chuột vàng là tốt. Điều này cùng với chủ đề Treepata (ví dụ: độ cao / độ tương phản được cải thiện) cung cấp một loại hỗ trợ phù hợp cho Xubfox. Thx
Janghou

5
  1. Tải xuống định vị-con trỏ.c

    wget https://gist.githubusercontent.com/sneetsher/d6d35b6181aa70c27a85/raw/dd874ac535d511c675724fa30d9e12ba5b810c37/locate-pointer.c
    
  2. Cài đặt yêu cầu xây dựng

    sudo apt-get install build-essential libx11-dev libcairo2-dev
    
  3. Xây dựng nó

    gcc `pkg-config --cflags x11 cairo` locate-pointer.c -o locate-pointer `pkg-config --libs x11 cairo` -lm
    
  4. Sao chép nó vào hệ thống bin/

    sudo cp locate-pointer /usr/local/bin/
    
  5. Tạo một lối tắt để khởi chạy nó

  6. Kích hoạt tính năng tổng hợp

    Lubfox

    1. Cài đặt trình quản lý tổng hợp

      sudo apt-get install xcompmgr
      
    2. Thêm một dòng cho nó trong

      ~/.config/lxsession/Lubuntu/autostart
      

    Xubfox

    1. Chạy xfwm4-tweaks-settings→ Compositor → Kiểm tra kích hoạt tính năng tổng hợp hiển thị

Ghi chú

  • Bạn sẽ có được một nền đen mà không cần tổng hợp. Nếu bạn không thể làm cho nó làm việc, cố gắng quản lý tổng hợp khác như: compton, cairo-compmgr.

con trỏ định vị trong Lubfox với xcompmgr

con trỏ định vị trong phiên Xubfox

Đây là mã hoàn chỉnh của locate-pointer.c, chỉ trong trường hợp liên kết bị phá vỡ.

/*
 * 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
Đó là một chút bối rối danh sách những việc cần làm đã được viết cách đây gần 5 năm và chưa được xử lý. Tôi cũng tệ theo cách đó nhưng ít nhất tôi cũng hoàn thành được một phần sau một hoặc hai năm.
WinEunuuchs2Unix

@ WinEunuuchs2Unix, Que Sera Sera. Tôi luôn viết các ý tưởng gây bão não của mình, các vấn đề (BugR, phản hồi, kết quả thử nghiệm) trong cùng một kịch bản. Thật khó để nhớ khi chuyển đổi dự án (bối cảnh tâm trí), làm việc xoay 5w / 5w trên các miền khác nhau. Cuối cùng, tôi không quay lại, nếu nó không có nhiều cơ sở người dùng và nó chỉ hoạt động đủ (lợi ích công cộng hoặc chỉ lãng phí tài nguyên tôi có, BTW Tôi không phải là người sử dụng trực tiếp tập lệnh của tôi). Vì vậy, bây giờ công nghệ di chuyển nhanh: x11 thay thế, tập lệnh này đã chết, unity bị hủy, xkbmod-Indicator chết, x11 thay thế, keyboard_modifier, todo viết lại cho gtk được cập nhật, ..: D
user.dz

3

Có một mẹo đơn giản và bẩn bằng cách sử dụng "yad", đây là một công cụ để tạo các cửa sổ tương đối đơn giản. (Đó là một ngã ba từ zquil)

Vì vậy, nếu bạn tạo một tập lệnh trên, hãy nói $ HOME / bin, với nội dung sau:

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 

Giá trị của chiều rộng và chiều cao phải lớn hơn 4 pixel so với kích thước thực tế của hình ảnh.

Nó sẽ che phủ hình ảnh, trong một giây, ở vị trí của con chuột, nếu hình ảnh là một gif hoạt hình, bạn sẽ nhận được một cái gì đó khá giống với những gì bạn yêu cầu.

Bạn chỉ cần ánh xạ một phím tắt đến ứng dụng mới của bạn.

Có một số hình ảnh động đẹp tại preloader.net (Tôi chưa kiểm tra vấn đề bản quyền)

Hy vọng nó giúp.


Không hoạt động với i3):
Jezor

Điều này thực sự mát mẻ. Có cách nào để làm cho nó theo con chuột?
Person93

1
Bí quyết đẹp! @Jezor, nó cũng hoạt động trong i3. Bạn chỉ cần làm cho cửa sổ nổi bằng cách sử dụng for_window [class="Yad"] floating enablecấu hình i3 của bạn.
Gautam
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.