# Duży-kursor-w-X11 MINI-JTZ

## Jak używać powiększonego kursora myszy z systemem X Window

## Jörg Schneider

v2, 11 August 1997

Wersja polska: Krzysztof P. Jasiutowicz kpjas@priv.onet.pl
v1.0, 27 sierpnia 1999 roku

Ten dokument opisuje jak używać powiększonego kursora myszy z systemem X Window.

## 1. Wstęp

Jest kilka przyczyn dla których standardowy kursor myszy jest dla niektórych niewłaściwy :

- praca na notebooku w X Window z LCD o niskim kontraście
- na zwykłych monitorach przy wysokich rozdzielczościach, np. 1600x1280
- u osób z osłabionym wzrokiem nawet na zwykłych monitorach przy niższych rozdzielczościach

W tych przypadkach pomocne są powiększone kursory myszy. Optymalnie powinno to być robione przez jeden program X-ów, który automatycznie powiększałby każdy kursor myszy.

O ile wiem, nie da się w prosty sposób napisać takiego programu, ponieważ protokół X-ów nie umożliwia dostępu do kursora myszy. Więcej szczegółów znajdziesz w rozdziale Szczegóły techniczne poniżej.

Jeśli naszym celem nie jest takie ogólne rozwiązanie, co nieco da się zrobić :

Istnieje standardowy zestaw kursorów myszy, znajdujący się w foncie kursora ( wypróbuj polecenie `xfd -fn cursor` wtedy go obejrzysz). Większość programów wykorzystuje te kursory myszy i zasada polega na zastępowaniu standardowego kursora jego powiększoną wersją.

## 2. O tym dokumencie

Zostałem umotywowany do napisania tego MINIHOWTO, kiedy słabo widzący kolega student zapytał mnie jak powiększyć kursor myszy w X-ach. Kiedy już się dowiedziałem jak to zrobić, napisałem pierwotną wersję tego dokumentu. Ponieważ wiedza o sposobie tu opisanym nie jest zapewne powszechna, zdecydowałem podzielić się nią i utworzyłem z tego dokumentu MINIHOWTO linuksowe, mimo tego że, nie jest on wcale typowy dla Linuksa. Jak inne MINIHOWTO, znajduje się on na macierzystym serwerze Linux Documentation Project (LDP).

Matryca tego dokumentu jest w formacie SGML/linuxdoc. Dzięki temu możliwe jest automatyczne tworzenie wersji w następujących formatach (które są dostępne w tym samym miejscu co matryca) : html, text, LaTeX, DVI, PostScript i GNU info.

Shinobu Miyata przetłumaczył to MINIHOWTO na japoński. Znajduje się ono tu : http://i11www.ira.uka.de/~schneid/jp/X11-big-cursor/.

## 3. Jak To Zrobić

Postępuj zgodnie z instrukcją podaną poniżej. Jeśli nie chcesz sam odnajdywać i kompilować pakietu bdfresize, możesz przejść do punktu 3 i ściągnąć powiększony font zamiast tworzyć go.

1. weź cursor.bdf, plik źródłowy fonta kursora, z jakiejś dystrybucji X-ów, n. p. z ftp://ftp.x.org/pub/R6.3/xc/fonts/bdf/misc/cursor.bdf (jeśli tam go nie będzie spróbuj archie lub pobierz go ode mnie).
2. zdobądź, skompiluj i zainstaluj pakiet bdfresize z ftp://ftp.cs.titech.ac.jp/X11/contrib/Local/bdfresize-1.4.tar.Z (lub ode mnie):

            zcat bdfresize-1.4.tar.Z  | tar xf -
            cd bdfresize-1.4
            xmkmf
            make

   W Linuksie pewnie trzeba użyć:

            make CCOPTIONS='-include /usr/include/bsd/bsd.h' clean all

3. utwórz katalog i zainstaluj w nim powiększony font kursora (powiększenie dwukrotne w tym przykładzie):

            mkdir $HOME/fonts
            bdfresize -f 2 cursor.bdf | bdftopcf >$HOME/fonts/cursor2.pcf
            mkfontdir $HOME/fonts

   Przygotowałem kilka powiększonych fontów kursora o następujących stopniach powiększenia: 1.5, 2, 2.5, 3, 4, 5, 6, 7, 8 i 16-krotne. Można je ściągnąć jeden z nich i zainstalować w `$HOME/fonts` jeżeli nie chcesz używać bdfresize.
4. zmodyfikuj plik `.xinitrc` lub `.xsession` : przed uruchomieniem jakiegokolwiek klienta X-ów (który używa kursora) następujące polecenie musi być wykonane :

            xset +fp $HOME/fonts
            xsetroot -cursor_name X_cursor

5. przerwij sesję X-ów i zrestartuj.

Gotowe—teraz wszystkie kursory myszy powinny być podwojonych rozmiarów.

## 4. Uwagi i ograniczenia

- X serwery mogą mieć pewien limit dla maksymalnego rozmiaru kursora, szczególnie gdy używają hardware-owej implementacji kursora myszy. Inne X serwery nie mają takiego ograniczenia. N. p. XF86_S3 3.3 pracuje nawet z kursorem myszy 512x512 (raczej wolno).
- Powiększony kursor myszy musi mieć taką samą nazwę jak pierwotny font (nazwa fonta musi być `cursor`, nazwa pliku nie ma znaczenia)—nie ma problemu bo `bdfresize` nie zmienia nazwy fonta.
- katalog z nowym fontem kursora musi znajdować się przed katalogiem ze standardowym fontem kursora w ścieżce fontów—wykonuje się to za pomocą `xset +fp` (w przeciwieństwie do `xset fp+`).
- Zmiany w `$HOME/fonts/` będą widoczne dopiero po wydaniu polecenia `mkfontdir $HOME/fonts; xset fp rehash` i tylko w nowo otworzonych klientach X-ów (dokładniej nowo utworzonych kursorach).
- `xset +fp path` może nie działać na terminalu X-ów. W tym wypadku można użyć font serwera (zobacz w rozdziale Jak używać font serwera) jeśli jest wspierany przez terminal X-ów lub jakąś inny sposób instalacji fonta na terminalu X-ów (zazwyczaj może to tylko wykonać administrator systemu).
- Identyczne podejście może być zastosowane dla fontów `olcursor` i `decw$cursor` i i każdego innego fontu kursora, który znajdziesz.
- Fonty kursora stworzone przez bdfresize nie wyglądają równo, szczególnie przy wyższych stopniach powiększenia. Byłoby dobrze gdyby ktoś mógł stworzyć ręcznie lepiej wyglądające wersje niektórych częściej używanych rozmiarów.

## 5. Szczegóły techniczne

Czy jest możliwe napisanie programu dla X-ów, powiększającego kursory automatycznie?

Rozwiązanie (częściowe)

  Użyj XTestCompareCursor z rozszerzenia XTEST. We wszystkich oknach nad którymi znajduje się kursor porównuj kursor tego okna z zestawem 'znanych' kursorów (n. p. z fontu kursora ). Jeżeli kursor istnieje, zamień go na powiększony odpowiednik, w innym przypadku albo zostaw bez zmian albo zamień na standardowy kursor. To zadziała tylko tam, gdzie dostępne jest rozszerzenie XTest.

Rozwiązanie 2

  Napisz proxy X serwer, który przekazuje wszystkie żądania klientów bez zmian, lecz przechwytuje wszystkie żądania odnoszące się do funkcji Xlib `XCreate*Cursor`. Żądania `XCreate*Cursor` powinny być zmieniane tak aby powiększonego kursora.

  Ten serwer proxy symuluje nowy display, n. p. `:1`. Wszystkie programy klienckie, które łączą się z tym display (n. p. `xterm -display :1`) są wyświetlane na rzeczywistym serwerze (zwykle `:0`) i ich kursory myszy są automatycznie powiększone. Kursory myszy klientów, które łączą się z `:0` pozostaną niezmienione.

## 6. Inne pomysły jak poprawić widoczność kursora myszy

Oto niektóre pomysły dla raczej prostych programów dla X-ów, które sprawią że kursor myszy będzie lepiej widoczny.

- Kiedy "gorący klawisz" zostanie naciśnięty wyświetl coś (duży kursor, małe okno, kształt okna) w pozycji kursora na 0,5 s.
- użyj XRecolorCursor do zmiany koloru kursora co 0,1 s.

Bardziej ambitnym projektem byłyby ślady myszy à la windoze, t. j. kiedy mysz jest przesuwana i kursor myszy musi być wyświetlony w innej pozycji, wtedy "stary kursor" nie znika od razu, ale z pewnym opóźnieniem. Ślady myszy najlepiej byłoby zaimplementować w X serwerze, ale można by to wykonać jako klienta X-ów, lub lepiej jako serwer proxy ( dokładniejszy opis w rozdziale Szczegóły techniczne).

## 7. Informacje związane z tym tematem

## 7.1 Jak używać font serwera

Font serwer jest usługą sieciową, która dostarcza zestaw fontów X11 z nieskomplikowanym protokołem. Można do niego wysyłać zapytania, które fonty są dostępne i zażądać od niego fontu bitmapowego.

Font serwer może być przydatny do dostarczenia X serwerowi zmodyfikowanego fontu kursora, zamiast informowania gdzie w file systemie on się znajduje.

Ta metoda jest szczególnie przydatna jeśli używa się kilku maszyn, które nie maja tego samego systemu plików lub jeśli używa się X terminali, które wspierają protokół font serwera.

Font serwer i związane z nim narzędzia są w dystrybucji X11R5+ (o ile wiem).

### instalacja font serwera

Przeczytaj strony podręcznika systemowego fs(1), fslsfonts(1) (lub xfs(1), xfslsfonts(1) pod X11R6) i spróbuj—to nie jest trudne. Powiedzmy, że serwer jest uruchomiony na hoście `some.host.edu` na porcie 7100. Instalację można wypróbować poleceniem `fslsfonts -server some.host.edu:7100`

Żeby naprawdę uruchomić font serwer należy wydać polecenie :

`xset +fp tcp/some.host.edu:7100`

które nie powinno dać informacji o błędzie.

## 7.2 Jak uzyskać źródła bdf jakiegoś fonta

Jeśli uruchomiłeś font serwer użyj po prostu `fstobdf` dołączonego do serwera fontów.

Inne wyjście to użycie `getbdf` który może zapisać dowolny zainstalowany font X11 do pliku bdf.