Existe um auxiliar `Locate pointer` no Lubuntu (para deficientes visuais)

9

Uma das coisas mais difíceis para as pessoas com deficiência visual é localizar o mouse olhando para a tela.

Portanto, ative locate mouseou locate pointerdê uma atenção visual extra (círculo laranja intermitente / ondas) depois de pressionar CTRL. (difícil de capturar na captura de tela: à esquerda)

Localize o mouse no Ubuntu

O Xubuntu não possui essa ferramenta inestimável e o Ubuntu é muito pesado para o hardware antigo de 1 GB e núcleo duplo. Gnome tem, Unity tem, Compiz tem, Mint tem. O Xubuntu / XFCE não possui.

Não se trata de um mouse maior, isso ajuda um pouco. Alguma atenção é necessária.

Usando o tema de alto contraste.

Se o Lubuntu tiver, considere mudar de Xu para Lu.

Janghou
fonte
Você já procurou o Big Cursor no gerenciador de pacotes Synaptic? Isso pode resolver seu problema.
Rex
Era para o Xubuntu, então o título foi alterado para Lubuntu, mas os parágrafos ainda falam sobre o Xubuntu. Tem certeza que não é um duplicado para sua outra pergunta Localize ajudante do mouse no Xubuntu para deficientes visuais
user.dz
Não, acho que o título não mudou, talvez você o confunda com a captura de tela. Eu perguntei antes sobre o Xubuntu em outra pergunta, essa é sobre o Lubuntu, mas gerando dicas sobre o Xubuntu e o Lubuntu.
Janghou

Respostas:

5
  • No Xubuntu, vá para Gerenciador de configurações - Mouse e Touchpad - Tema . Lá você pode aumentar o tamanho do cursor do mouse.

    Configurações de mouse e touchpad do Xubuntu

  • Além disso, você pode baixar temas adicionais para o mouse, que facilitam a visualização do mouse. Veja xfce-look.org . Você pode escolher o tema a seu gosto.

    Penso que este melhor se adapta às suas necessidades: DMZ com fundo amarelo Multisized .

    Quanto ao Lubuntu : de acordo com o site wiki, PCManFM e LxPanel não usam o tema do cursor, você terá que mudar o cursor manualmente. Veja aqui para mais detalhes: https://wiki.archlinux.org/index.php/LXDE#Cursors

  • E mais uma opção: instale o ambiente MATE no seu Ubuntu, ele é leve rodando na máquina de 512 MB de RAM e tem a opção de flash do mouse que você está procurando.

    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 você deseja ter apenas um ambiente, pode até baixar e instalar a versão Ubuntu Mate como um único sistema operacional (mas observe que isso não é oficialmente suportado pela Canonical).

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

    Depois de instalar o ambiente MATE, você pode definir o flash do mouse:

    1. Vá para Menu e selecione PreferênciasMouse e Touchpad .
    2. Ative a marca de seleção ao lado de " Mostrar posição do ponteiro quando a tecla Control for pressionada ".

    Consulte o link para obter detalhes: Localize rapidamente o ponteiro do mouse no Linux Mint / Ubuntu | Eu tenho um PC .

Muzaffar
fonte
Thx, vou tentar, também tentarei o tema Treepata.
Janghou
O tema DMZ / mouse amarelo está bom. Isso, juntamente com o tema Treepata (por exemplo, alto / contraste aprimorado) oferece um tipo apropriado de assistência para o Xubuntu. Thx
Janghou 18/01/15
5
  1. Baixar localize-pointer.c

    wget https://gist.githubusercontent.com/sneetsher/d6d35b6181aa70c27a85/raw/dd874ac535d511c675724fa30d9e12ba5b810c37/locate-pointer.c
    
  2. Instalar requisitos de construção

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

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

    sudo cp locate-pointer /usr/local/bin/
    
  5. Crie um atalho para iniciá-lo

  6. Ativar composto

    Lubuntu

    1. Instale um gerenciador composto

      sudo apt-get install xcompmgr
      
    2. Adicione uma linha para ele em

      ~/.config/lxsession/Lubuntu/autostart
      

    Xubuntu

    1. Executar xfwm4-tweaks-settings→ Compositor → Marque Ativar composição de exibição

Notas

  • Você terá um fundo preto sem composto. Se você não conseguiu fazê-lo funcionar, tente outro gerenciador composto como: compton, cairo-compmgr.

localize-ponteiro no Lubuntu com xcompmgr

localizador-ponteiro na sessão do Xubuntu

Aqui está o código completo de locate-pointer.c, caso o link esteja quebrado.

/*
 * 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
fonte
1
É um pouco desconcertante a lista de afazeres ter sido escrita há quase 5 anos e ainda não ter sido abordada. Eu sou ruim assim também, mas pelo menos eu faço um pouco disso depois de um ano ou dois no máximo.
WinEunuuchs2Unix 20/10/19
@ WinEunuuchs2Unix, Que Sera Sera. Eu sempre escrevo meu cérebro invadindo idéias, problemas (BugR, feedback, resultados de testes) no mesmo script. É difícil lembrar ao alternar projetos (contexto da mente), trabalhando rotação de 5w / 5w em diferentes domínios. No final, eu não volto, se não tiver muita base de usuários e funcionar apenas o suficiente (interesse público ou apenas desperdício de recursos que tenho, BTW, não sou um usuário direto do meu script). Então, agora a tecnologia movendo rápido: x11 substituído, este script morreu, unidade caiu, xkbmod-indicador morreu, x11 substituído, keyboard_modifiers, TODO reescrever para GTK atualizado, ..: D
user.dz
3

Existe um truque simples e sujo usando o "yad", que é uma ferramenta para gerar janelas relativamente simples. (É um garfo de zenity)

Portanto, se você criar um script, digamos $ HOME / bin, com o seguinte conteúdo:

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 

O valor da largura e da altura deve ser 4 pixels a mais que o tamanho real da imagem.

Sobreporá a imagem, por um segundo, na posição do mouse, se a imagem for um gif animado, você terá algo parecido com o que você está pedindo.

Você só precisa mapear um atalho de teclado para seu novo aplicativo.

Existem algumas animações interessantes em preloader.net (não verifiquei problemas de direitos autorais)

Espero que ajude.

Andres
fonte
Não funciona com o i3):
Jezor 29/01
Isso é muito legal. Existe uma maneira de fazê-lo seguir o mouse?
Person93
1
Bom truque! @ Jezor, ele funciona no i3 também. Você só precisa fazer a janela flutuar usando for_window [class="Yad"] floating enablena sua configuração do i3.
Gautam