Lubuntu中是否有“定位指针”助手(视力障碍者)


9

视障人士最困难的事情之一就是将鼠标定位在屏幕上方。

因此,在按CTRL后启用locate mouselocate pointer给予一些额外的视觉注意(闪烁的橙色圆圈/波形)。(难以抓取屏幕截图:在左侧)

在Ubuntu中找到鼠标

Xubuntu没有此宝贵的工具,而对于1GB双核旧硬件而言,Ubuntu太重了。Gnome拥有,Unity拥有,Compiz拥有,Mint拥有。Xubuntu / XFCE没有它。

它与更大的鼠标无关,这会有所帮助。需要一些闪光的注意。

使用高对比度主题。

如果有Lubuntu,我考虑从Xu切换到Lu。


您是否在Synaptic的Big Cursor软件包管理器中寻找过产品?它可以解决您的问题。
Rex

这是给Xubuntu的,然后标题更改为Lubuntu,但是段落中仍在谈论Xubuntu。您确定不是其他问题的重复项吗?在Xubuntu中找到视障者的鼠标助手
user.dz 2015年

不,我认为标题没有更改,也许您将其与屏幕截图混淆了。我之前在另一个问题中问过有关Xubuntu的问题,这是有关Lubuntu的问题,但提出了有关Xubuntu和Lubuntu的技巧。
侯2015年

Answers:


5
  • Xubuntu中转到“设置管理器 - 鼠标和触摸板 - 主题”。在那里,您可以增大鼠标光标的大小。

    Xubuntu鼠标和触摸板设置

  • 您也可以为鼠标下载其他主题,从而使查看鼠标更​​加容易。参见xfce-look.org。您可以根据自己的喜好选择主题。

    我认为这最适合您的需求:黄色背景多尺寸DMZ

    至于Lubuntu:根据其Wiki网站,PCManFM和LxPanel不使用光标主题,您将必须手动更改光标。有关更多详细信息,请参见此处:https : //wiki.archlinux.org/index.php/LXDE#Cursors

  • 还有一个选项:在Ubuntu上安装MATE环境,它在512 MB RAM计算机上运行时是轻量级的,并且具有您正在搜索的鼠标闪存选项。

    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
    

    如果您只想拥有一个环境,您甚至可以将Ubuntu Mate版本作为单个操作系统下载并安装(但请注意,Canonical并未正式支持该版本)。

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

    安装MATE环境后,可以设置鼠标闪烁:

    1. 进入菜单,然后选择首选项鼠标和触摸板
    2. 启用“ 按下Control键时显示指针的位置 ”旁边的对勾标记。

    有关详细信息,请参见链接:在Linux Mint / Ubuntu中快速找到鼠标指针| 我有一台电脑


谢谢,我会尝试一下,我也会尝试Treepata主题。
侯2015年

DMZ /黄色鼠标主题很好。这与Treepata主题(例如,改善的高/对比度)一起为Xubuntu提供了适当类型的帮助。Thx
Janghou

5
  1. 下载locate-pointer.c

    wget https://gist.githubusercontent.com/sneetsher/d6d35b6181aa70c27a85/raw/dd874ac535d511c675724fa30d9e12ba5b810c37/locate-pointer.c
    
  2. 安装构建要求

    sudo apt-get install build-essential libx11-dev libcairo2-dev
    
  3. 建立它

    gcc `pkg-config --cflags x11 cairo` locate-pointer.c -o locate-pointer `pkg-config --libs x11 cairo` -lm
    
  4. 复制到系统 bin/

    sudo cp locate-pointer /usr/local/bin/
    
  5. 创建启动它的快捷方式

  6. 启用复合

    鲁本图

    1. 安装复合管理器

      sudo apt-get install xcompmgr
      
    2. 在其中添加一行

      ~/.config/lxsession/Lubuntu/autostart
      

    许本图

    1. 运行xfwm4-tweaks-settings→合成器→选中启用显示合成

笔记

  • 您将获得没有合成的黑色背景。如果您无法使用它,请尝试使用其他复合管理器,例如:comptoncairo-compmgr

用xcompmgr在Lubuntu中定位指针

Xubuntu会话中的定位指针

这是的完整代码locate-pointer.c,以防万一链接断开。

/*
 * 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
有点令人不安的是,待办事项清单是在大约5年前编写的,尚未得到解决。这样我也很糟糕,但至少在一两年后,我会完成一些工作。
WinEunuuchs2Unix

@ WinEunuuchs2Unix,Que Sera Sera。我总是在同一脚本中写出头脑风暴的想法,问题(BugR,反馈,测试结果)。切换项目(注意上下文),在不同域上以5w / 5w旋转时,很难记住。最后,我不会再回来了,如果它没有太多的用户群并且足够用(公众利益或只是浪费我的资源,顺便说一句,我不是脚本的直接用户)。因此,现在技术发展迅速:x11被替换,该脚本死亡,统一性下降,xkbmod-indicator死亡,x11被替换,keyboard_modifiers,为更新的gtk重写,..:D
user.dz,

3

使用“ yad”有一个简单而肮脏的把戏,它是生成相对简单的窗口的工具。(这是zenity的叉子)

因此,如果您在自己的脚本上创建了一个脚本,则假设$ HOME / bin具有以下内容:

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 

width和height的值应比图片的实际尺寸大4个像素。

如果图片是动画的gif,它将在鼠标的位置上覆盖图片一秒钟,您会得到与您要的位置非常相似的图像。

您只需要将键盘快捷键映射到新应用即可。

preloader.net上有一些不错的动画 (我还没有检查版权问题)

希望能帮助到你。


不适用于i3):
Jezor

这真的很酷。有没有办法让它跟随鼠标?
Person93

1
好招!@Jezor,它也可以在i3中使用。您只需要for_window [class="Yad"] floating enable在i3配置中使用使窗口浮动即可。
乔塔姆
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.