TetaTricks/chap/X11.tex

174 lines
5.0 KiB
TeX
Raw Normal View History

2020-09-29 10:41:53 +02:00
\chapter{X11}
2020-11-13 01:35:31 +01:00
\label{chap:X11}\index{X11}
2020-09-29 10:41:53 +02:00
2021-11-03 09:05:49 +01:00
2020-09-29 10:41:53 +02:00
%-------------------------------------------------------------------
\section{Les fontes}
Comment fait-on pour connaitre la liste des polices installées ?
\begin{verbatim}
$ fc-list | awk -F ":" '{print $1}' | sort -u
\end{verbatim}
Comment faire pour visualiser la plénitude des formes de mes fontes ?
2020-11-10 02:40:30 +01:00
2020-11-24 00:42:06 +01:00
\begin{verbatim}
tth@debian:~/Devel/TetaTricks$ man fontimage
No manual entry for fontimage
See 'man 7 undocumented' for help when manual pages are not available.
tth@debian:~/Devel/TetaTricks$
\end{verbatim}
Wtf\index{Wtf} ?
2020-09-29 10:41:53 +02:00
%-------------------------------------------------------------------
2021-06-26 07:39:01 +02:00
\section{Xephyr}\index{Xephyr}
2020-09-29 10:41:53 +02:00
D'après la manpage :
2020-11-22 21:07:05 +01:00
\textsl{Xephyr is a kdrive server that outputs to a window on a pre-existing
2020-09-29 10:41:53 +02:00
"host" X display. Think Xnest but with support for modern
2021-06-26 07:39:01 +02:00
extensions like composite, damage and randr.
Unlike Xnest\index{Xnest} which is an X proxy, i.e. limited to the
capabilities of the host X server, Xephyr is a real X server which
uses the host X server window as "framebuffer" via fast SHM XImages.}
2020-09-29 10:41:53 +02:00
2021-06-26 07:39:01 +02:00
Ça peut sembler attirant à première vue, mais l'utilisation n'est pas
si simple que ça.
2020-09-29 10:41:53 +02:00
Par exemple, quelle est la méthode à mettre en œuvre pour avoir
le clavier en Azerty\index{azerty} ?
2020-11-22 21:07:05 +01:00
XXX\index{XXX}
2020-09-29 10:41:53 +02:00
%-------------------------------------------------------------------
\section{Numlock}
2020-11-22 21:07:05 +01:00
Vous l'avez voulu, le voici~:
2020-09-29 10:41:53 +02:00
\begin{verbatim}
#include <X11/XKBlib.h>
#include <X11/extensions/XKB.h>
#include <X11/keysym.h>
int main(){
Display *disp = XOpenDisplay (NULL);
if(disp == NULL) return 1;
unsigned int nl_mask = XkbKeysymToModifiers \
(disp, XK_Num_Lock);
XkbLockModifiers (disp, XkbUseCoreKbd, nl_mask, nl_mask);
XCloseDisplay (disp);
return 0;}
\end{verbatim}
2020-11-10 02:40:30 +01:00
Mais c'est du très vieux code, ça !
2020-09-29 10:41:53 +02:00
%-------------------------------------------------------------------
% new 20 décembre 2012 à Mixart-Myrys
\section{xdotool}
\index{xdotool}
D'après la manpage :
\textit{
xdotool lets you programatically (or manually) simulate keyboard input
and mouse activity, move and resize windows, etc. It does this using
X11's XTEST extension and other Xlib functions.
}
En gros, et pour faire simple, avec ce logiciel,
vous pouvez piloter des
applications X11, à la manière d'un wm, et ce, à partir de
la ligne de commande.
Vous pourrez les déplacer, les redimensionner, leur envoyer des
évènements clavier, tout ce genre de choses. Il est donc possible
de coder «~des sortes d'animations~» uniquement basées sur le
protocole de X11. \textsl{Big win, bro !}
La démarche d'utilisation n'étant pas immédiate, nous allons
commencer par un petit exemple : déplacer un Xlogo sur l'écran.
2020-11-24 00:42:06 +01:00
Et comme un petit script vaut mieux qu'un long discours~:
\lstinputlisting[language=sh]{code/move-xlogo.sh}
2020-09-29 10:41:53 +02:00
La première étape est le lancement de la cible en arrière-plan.
La seconde est la récupération de l'indentifiant
(interne à X11) de la fenêtre concernée.
2020-11-24 00:42:06 +01:00
2020-09-29 10:41:53 +02:00
\begin{verbatim}
$ xlogo &
[3] 2674
$ WIN=$(xdotool search -name xlogo)
$ echo $WIN
69206019
\end{verbatim}
2020-11-24 00:42:06 +01:00
Voilà\footnote{En français dans le texte.}, nous savons maintenant
2020-11-10 02:40:30 +01:00
à quelle fenêtre causer : par son numéro d'identification.
Le problême des multiples fenêtres du même nom sera abordé
2020-11-24 00:42:06 +01:00
ultérieurement. Nous pouvons maintenant déplacer notre widget
avec vigueur\dots
2020-09-29 10:41:53 +02:00
\begin{verbatim}
$ xdotool windowmove $WIN 10 10
\end{verbatim}
C'est simple, non ?
2020-11-22 21:07:05 +01:00
%-------------------------------------------------------------------
2021-11-03 09:05:49 +01:00
\section{Le Windowmanager}
Aka \textbf{WM}.
%
% https://jichu4n.com/posts/how-x-window-managers-work-and-how-to-write-one-part-i/
%
%-------------------------------------------------------------------
2020-11-22 21:07:05 +01:00
\section{XCB}\index{XCB}
Vous avez pratiqué la \textsl{Xlib} ? Avez-vous aimé ?
\textsc{[oui]} et \textsc{[non]} sont deux réponses valables.
2021-06-26 07:39:01 +02:00
Et si vous ne savez pas quoi répondre, c'est que vous n'avez
pas compris la question.
2020-09-29 10:41:53 +02:00
2020-11-24 00:42:06 +01:00
\begin{quote}
The X protocol C-language Binding (XCB) is a replacement for Xlib
featuring a small footprint, latency hiding, direct access to the
protocol, improved threading support, and extensibility.
\end{quote}
2020-11-22 21:07:05 +01:00
%
% https://xcb.freedesktop.org/tutorial/basicwindowsanddrawing/
%
2020-09-29 10:41:53 +02:00
%-------------------------------------------------------------------
2021-05-04 10:33:30 +02:00
\section{Xforms}\index{Xforms}
À première vue\footnote{Avril 2021}, un toolkit sympa, très abordable
en C, mais le premier exemple du tutorial d'initiation ne fonctionne
2021-06-26 07:39:01 +02:00
pas vraiment comme il devrait. Mais quand même une affaire à suivre.
2021-05-04 10:33:30 +02:00
2021-11-18 14:36:08 +01:00
\lstinputlisting[language=c]{code/xform/yesno.c}
Compilation: \texttt{gcc yesno.c -lforms -o yesno}
En fait, je ne me souviens plus du petit souci qui m'a fait négliger
trop lontemps ce discret toolkit graphique, mais ça avait
quelque chose à voir avec
la constante \texttt{FL\_BORDER\_BOX} qui
\textbf{ne} fait \textbf{pas} le borderbox.
http://xforms-toolkit.org/examples.html
2021-05-04 10:33:30 +02:00
%-------------------------------------------------------------------
2020-11-22 21:07:05 +01:00