Import Upstream version 7.7+19ubuntu14

This commit is contained in:
openKylinBot 2022-05-14 03:21:45 +08:00
commit 9e88810c3a
22 changed files with 2669 additions and 0 deletions

19
xsf-docs/COPYING Normal file
View File

@ -0,0 +1,19 @@
© 2010-2011 Cyril Brulebois <kibi@debian.org>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

64
xsf-docs/Makefile Normal file
View File

@ -0,0 +1,64 @@
#!/usr/bin/make -f
txt_files = $(shell find -name '*.txt' -a ! -name '.*.txt')
html_files = $(patsubst %.txt,%.html,$(txt_files))
pdf_files = $(patsubst %.txt,%.pdf,$(txt_files))
TXT_TO_HTML = TZ=UTC asciidoc -a linkcss
HTML_TO_PDF = wkhtmltopdf
CSS_FILE = xsf.css
ADOC_CSS_FILE= asciidoc-xhtml11.css
ADOC_JS_FILE = asciidoc-xhtml11.js
SVG_LOGO = xsf.svg
PNG_LOGO = xsf.png
all_files = $(html_files) $(txt_files) $(CSS_FILE) $(ADOC_CSS_FILE) $(ADOC_JS_FILE) $(SVG_LOGO) $(PNG_LOGO)
all: html $(PNG_LOGO)
html: $(html_files)
pdf: $(pdf_files)
%.html: rel_path=$(shell echo $@|sed 's,[^/],,g;s,/,../,g')
%.html: link_home=$(shell echo "<a href=\"$(rel_path)index.html\">XSF</a> / ")
%.html: %.txt
@echo " HTML $@"
@$(TXT_TO_HTML) -o $@.tmp $<
@echo " HOME $@"
@if [ $< != index.txt ]; then sed -i 's,<h1>,<h1>$(link_home),' $@.tmp; fi
@echo " CSS $@"
@sed -i 's,\(rel="stylesheet" href="\)[^"]*,\1$(rel_path)$(CSS_FILE),' $@.tmp
@echo " JS $@"
@sed -i 's,\(type="text/javascript" src="\)[^"]*,\1$(rel_path)$(ADOC_JS_FILE),' $@.tmp
@mv $@.tmp $@
%.pdf: %.html $(CSS_FILE) $(ADOC_CSS_FILE) $(ADOC_JS_FILE) $(SVG_LOGO)
@echo " GEN $@"
@$(HTML_TO_PDF) $< $@
# We usually don't need to run this one, but it's easier to keep both
# SVN and PNG logos in sync:
$(PNG_LOGO): $(SVG_LOGO)
inkscape $< -e $@
install:
@if [ -z "$(DESTDIR)" ]; then \
echo 'E: DESTDIR is not set, not installing.'; exit 1; \
fi
mkdir -p $(DESTDIR)
# There are probably better ways:
set -e; for i in $(all_files); do \
d=$(DESTDIR)/`dirname $$i` && \
mkdir -p $$d && \
install $$i $$d; \
done
clean:
@echo "Removing all generated files"
rm -f $(html_files) $(pdf_files)
.PHONY: clean html pdf all

View File

@ -0,0 +1,424 @@
/* Sans-serif font. */
h1, h2, h3, h4, h5, h6,
div.title, caption.title,
thead, p.table.header,
div#toctitle,
span#author, span#revnumber, span#revdate, span#revremark,
div#footer {
font-family: Arial,Helvetica,sans-serif;
}
/* Serif font. */
div.sectionbody {
font-family: Georgia,"Times New Roman",Times,serif;
}
/* Monospace font. */
tt {
font-size: inherit;
}
body {
margin: 1em 5% 1em 5%;
}
a {
color: blue;
text-decoration: underline;
}
a:visited {
color: fuchsia;
}
em {
font-style: italic;
color: navy;
}
strong {
font-weight: bold;
color: #083194;
}
tt {
font-size: inherit;
color: navy;
}
h1, h2, h3, h4, h5, h6 {
color: #527bbd;
margin-top: 1.2em;
margin-bottom: 0.5em;
line-height: 1.3;
}
h1, h2, h3 {
border-bottom: 2px solid silver;
}
h2 {
padding-top: 0.5em;
}
h3 {
float: left;
}
h3 + * {
clear: left;
}
div.sectionbody {
margin-left: 0;
}
hr {
border: 1px solid silver;
}
p {
margin-top: 0.5em;
margin-bottom: 0.5em;
}
ul, ol, li > p {
margin-top: 0;
}
ul > li { color: #aaa; }
ul > li > * { color: black; }
pre {
padding: 0;
margin: 0;
}
span#author {
color: #527bbd;
font-weight: bold;
font-size: 1.1em;
}
span#email {
}
span#revnumber, span#revdate, span#revremark {
}
div#footer {
font-size: small;
border-top: 2px solid silver;
padding-top: 0.5em;
margin-top: 4.0em;
}
div#footer-text {
float: left;
padding-bottom: 0.5em;
}
div#footer-badges {
float: right;
padding-bottom: 0.5em;
}
div#preamble {
margin-top: 1.5em;
margin-bottom: 1.5em;
}
div.tableblock, div.imageblock, div.exampleblock, div.verseblock,
div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
div.admonitionblock {
margin-top: 1.0em;
margin-bottom: 1.5em;
}
div.admonitionblock {
margin-top: 2.0em;
margin-bottom: 2.0em;
margin-right: 10%;
color: #606060;
}
div.content { /* Block element content. */
padding: 0;
}
/* Block element titles. */
div.title, caption.title {
color: #527bbd;
font-weight: bold;
text-align: left;
margin-top: 1.0em;
margin-bottom: 0.5em;
}
div.title + * {
margin-top: 0;
}
td div.title:first-child {
margin-top: 0.0em;
}
div.content div.title:first-child {
margin-top: 0.0em;
}
div.content + div.title {
margin-top: 0.0em;
}
div.sidebarblock > div.content {
background: #ffffee;
border: 1px solid #dddddd;
border-left: 4px solid #f0f0f0;
padding: 0.5em;
}
div.listingblock > div.content {
border: 1px solid #dddddd;
border-left: 5px solid #f0f0f0;
background: #f8f8f8;
padding: 0.5em;
}
div.quoteblock, div.verseblock {
padding-left: 1.0em;
margin-left: 1.0em;
margin-right: 10%;
border-left: 5px solid #f0f0f0;
color: #777777;
}
div.quoteblock > div.attribution {
padding-top: 0.5em;
text-align: right;
}
div.verseblock > pre.content {
font-family: inherit;
font-size: inherit;
}
div.verseblock > div.attribution {
padding-top: 0.75em;
text-align: left;
}
/* DEPRECATED: Pre version 8.2.7 verse style literal block. */
div.verseblock + div.attribution {
text-align: left;
}
div.admonitionblock .icon {
vertical-align: top;
font-size: 1.1em;
font-weight: bold;
text-decoration: underline;
color: #527bbd;
padding-right: 0.5em;
}
div.admonitionblock td.content {
padding-left: 0.5em;
border-left: 3px solid #dddddd;
}
div.exampleblock > div.content {
border-left: 3px solid #dddddd;
padding-left: 0.5em;
}
div.imageblock div.content { padding-left: 0; }
span.image img { border-style: none; }
a.image:visited { color: white; }
dl {
margin-top: 0.8em;
margin-bottom: 0.8em;
}
dt {
margin-top: 0.5em;
margin-bottom: 0;
font-style: normal;
color: navy;
}
dd > *:first-child {
margin-top: 0.1em;
}
ul, ol {
list-style-position: outside;
}
ol.arabic {
list-style-type: decimal;
}
ol.loweralpha {
list-style-type: lower-alpha;
}
ol.upperalpha {
list-style-type: upper-alpha;
}
ol.lowerroman {
list-style-type: lower-roman;
}
ol.upperroman {
list-style-type: upper-roman;
}
div.compact ul, div.compact ol,
div.compact p, div.compact p,
div.compact div, div.compact div {
margin-top: 0.1em;
margin-bottom: 0.1em;
}
div.tableblock > table {
border: 3px solid #527bbd;
}
thead, p.table.header {
font-weight: bold;
color: #527bbd;
}
tfoot {
font-weight: bold;
}
td > div.verse {
white-space: pre;
}
p.table {
margin-top: 0;
}
/* Because the table frame attribute is overriden by CSS in most browsers. */
div.tableblock > table[frame="void"] {
border-style: none;
}
div.tableblock > table[frame="hsides"] {
border-left-style: none;
border-right-style: none;
}
div.tableblock > table[frame="vsides"] {
border-top-style: none;
border-bottom-style: none;
}
div.hdlist {
margin-top: 0.8em;
margin-bottom: 0.8em;
}
div.hdlist tr {
padding-bottom: 15px;
}
dt.hdlist1.strong, td.hdlist1.strong {
font-weight: bold;
}
td.hdlist1 {
vertical-align: top;
font-style: normal;
padding-right: 0.8em;
color: navy;
}
td.hdlist2 {
vertical-align: top;
}
div.hdlist.compact tr {
margin: 0;
padding-bottom: 0;
}
.comment {
background: yellow;
}
.footnote, .footnoteref {
font-size: 0.8em;
}
span.footnote, span.footnoteref {
vertical-align: super;
}
#footnotes {
margin: 20px 0 20px 0;
padding: 7px 0 0 0;
}
#footnotes div.footnote {
margin: 0 0 5px 0;
}
#footnotes hr {
border: none;
border-top: 1px solid silver;
height: 1px;
text-align: left;
margin-left: 0;
width: 20%;
min-width: 100px;
}
div.colist td {
padding-right: 0.5em;
padding-bottom: 0.3em;
vertical-align: top;
}
div.colist td img {
margin-top: 0.3em;
}
@media print {
div#footer-badges { display: none; }
}
div#toc {
margin-bottom: 2.5em;
}
div#toctitle {
color: #527bbd;
font-size: 1.1em;
font-weight: bold;
margin-top: 1.0em;
margin-bottom: 0.1em;
}
div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
margin-top: 0;
margin-bottom: 0;
}
div.toclevel2 {
margin-left: 2em;
font-size: 0.9em;
}
div.toclevel3 {
margin-left: 4em;
font-size: 0.9em;
}
div.toclevel4 {
margin-left: 6em;
font-size: 0.9em;
}
span.aqua { color: aqua; }
span.black { color: black; }
span.blue { color: blue; }
span.fuchsia { color: fuchsia; }
span.gray { color: gray; }
span.green { color: green; }
span.lime { color: lime; }
span.maroon { color: maroon; }
span.navy { color: navy; }
span.olive { color: olive; }
span.purple { color: purple; }
span.red { color: red; }
span.silver { color: silver; }
span.teal { color: teal; }
span.white { color: white; }
span.yellow { color: yellow; }
span.aqua-background { background: aqua; }
span.black-background { background: black; }
span.blue-background { background: blue; }
span.fuchsia-background { background: fuchsia; }
span.gray-background { background: gray; }
span.green-background { background: green; }
span.lime-background { background: lime; }
span.maroon-background { background: maroon; }
span.navy-background { background: navy; }
span.olive-background { background: olive; }
span.purple-background { background: purple; }
span.red-background { background: red; }
span.silver-background { background: silver; }
span.teal-background { background: teal; }
span.white-background { background: white; }
span.yellow-background { background: yellow; }
span.big { font-size: 2em; }
span.small { font-size: 0.6em; }

View File

@ -0,0 +1,128 @@
var asciidoc = { // Namespace.
/////////////////////////////////////////////////////////////////////
// Table Of Contents generator
/////////////////////////////////////////////////////////////////////
/* Author: Mihai Bazon, September 2002
* http://students.infoiasi.ro/~mishoo
*
* Table Of Content generator
* Version: 0.4
*
* Feel free to use this script under the terms of the GNU General Public
* License, as long as you do not remove or alter this notice.
*/
/* modified by Troy D. Hanson, September 2006. License: GPL */
/* modified by Stuart Rackham, 2006, 2009. License: GPL */
// toclevels = 1..4.
toc: function (toclevels) {
function getText(el) {
var text = "";
for (var i = el.firstChild; i != null; i = i.nextSibling) {
if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
text += i.data;
else if (i.firstChild != null)
text += getText(i);
}
return text;
}
function TocEntry(el, text, toclevel) {
this.element = el;
this.text = text;
this.toclevel = toclevel;
}
function tocEntries(el, toclevels) {
var result = new Array;
var re = new RegExp('[hH]([2-'+(toclevels+1)+'])');
// Function that scans the DOM tree for header elements (the DOM2
// nodeIterator API would be a better technique but not supported by all
// browsers).
var iterate = function (el) {
for (var i = el.firstChild; i != null; i = i.nextSibling) {
if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
var mo = re.exec(i.tagName);
if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {
result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
}
iterate(i);
}
}
}
iterate(el);
return result;
}
var toc = document.getElementById("toc");
var entries = tocEntries(document.getElementById("content"), toclevels);
for (var i = 0; i < entries.length; ++i) {
var entry = entries[i];
if (entry.element.id == "")
entry.element.id = "_toc_" + i;
var a = document.createElement("a");
a.href = "#" + entry.element.id;
a.appendChild(document.createTextNode(entry.text));
var div = document.createElement("div");
div.appendChild(a);
div.className = "toclevel" + entry.toclevel;
toc.appendChild(div);
}
if (entries.length == 0)
toc.parentNode.removeChild(toc);
},
/////////////////////////////////////////////////////////////////////
// Footnotes generator
/////////////////////////////////////////////////////////////////////
/* Based on footnote generation code from:
* http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
*/
footnotes: function () {
var cont = document.getElementById("content");
var noteholder = document.getElementById("footnotes");
var spans = cont.getElementsByTagName("span");
var refs = {};
var n = 0;
for (i=0; i<spans.length; i++) {
if (spans[i].className == "footnote") {
n++;
// Use [\s\S] in place of . so multi-line matches work.
// Because JavaScript has no s (dotall) regex flag.
note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
noteholder.innerHTML +=
"<div class='footnote' id='_footnote_" + n + "'>" +
"<a href='#_footnoteref_" + n + "' title='Return to text'>" +
n + "</a>. " + note + "</div>";
spans[i].innerHTML =
"[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
"' title='View footnote' class='footnote'>" + n + "</a>]";
var id =spans[i].getAttribute("id");
if (id != null) refs["#"+id] = n;
}
}
if (n == 0)
noteholder.parentNode.removeChild(noteholder);
else {
// Process footnoterefs.
for (i=0; i<spans.length; i++) {
if (spans[i].className == "footnoteref") {
var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
href = href.match(/#.*/)[0]; // Because IE return full URL.
n = refs[href];
spans[i].innerHTML =
"[<a href='#_footnote_" + n +
"' title='View footnote' class='footnote'>" + n + "</a>]";
}
}
}
}
}

96
xsf-docs/faq/general.txt Normal file
View File

@ -0,0 +1,96 @@
General FAQ
===========
:toc:
Cyril Brulebois <kibi@debian.org>
Input drivers
-------------
* _How do I configure input for X?_ +
Look at the link:../howto/configure-input.html[how to configure input] documentation.
* _Why cant I kill X through `Ctrl+Alt+Backspace`?_ +
Thats explained in the above-mentioned documentation.
<<<
Video drivers
-------------
All drivers
~~~~~~~~~~~
* _Whats wrong with the DPI setting?_ +
By the default, the X server uses 96 DPI, as seen on upstream bug
https://bugs.freedesktop.org/show_bug.cgi?id=23705[#23705] (in
particular
https://bugs.freedesktop.org/show_bug.cgi?id=23705#c6[Keiths comment]). A
particular DPI setting can be set through desktop environments
preferences, through the `-dpi` X server command line option (see
++Xserver++s manual page), or through ++xrandr++s `--dpi` option.
* _How do I get some info about 3D support?_ +
Look at the link:../howto/build-mesa.html[instructions to build mesa],
there are a few commands to learn about 3D support, the current driver,
etc.
Ati driver
~~~~~~~~~~
* _Why is it Im getting low performances, or even crashes?_ +
Make sure you have installed the
link:http://packages.debian.org/firmware-linux&exact=1[`firmware-linux`
package]. The driver might still be working without the firmware,
but using code paths which arent supported as well as the “normal”
ones.
Intel driver
~~~~~~~~~~~~
* _Why isnt it working?_ +
KMS is mandatory, as documented in its `README.Debian` (view it
online:
http://git.debian.org/?p=pkg-xorg/driver/xserver-xorg-video-intel.git;a=blob;f=debian/README.Debian[git.debian.org]). You
probably disabled KMS or didnt include it in your kernel
configuration if youre using a custom kernel.
* _X is crashing all the time with my “old” Intel card. What can I do?_ +
Unfortunately, old cards are not very well supported, and you cant
do much more than switching to a generic driver, like `fbdev` or
`vesa`, as documented in `README.Debian` (view it online:
http://git.debian.org/?p=pkg-xorg/driver/xserver-xorg-video-intel.git;a=blob;f=debian/README.Debian[git.debian.org]). Please
note that you need to disable `KMS` if you want to use the `vesa`
driver. A minimal `xorg.conf` would look like:
----
Section "Device"
Identifier "MyBuggyCard"
Driver "fbdev"
EndSection
----
Nouveau driver
~~~~~~~~~~~~~~
* _Why isnt it working?_ +
Since its still considered experimental by its authors, the
interfaces arent stable yet, so the driver has particular
dependencies on the kernel, which are documented in `README.Debian`
(view it online:
http://git.debian.org/?p=pkg-xorg/driver/xserver-xorg-video-nouveau.git;a=blob;f=debian/README.Debian;h=27ced6b1bf5102a5b72525318439efdfb330745d;hb=6c2f12ca18f55b55d49e083d86d87d970ce53a07[for squeeze],
http://git.debian.org/?p=pkg-xorg/driver/xserver-xorg-video-nouveau.git;a=blob;f=debian/README.Debian[for sid]).
<<<
Others
------
Session management
~~~~~~~~~~~~~~~~~~
* _How to start a bare X session (without Gnome, KDE, etc.)?_ +
Assuming theres no X running on the `:1` display, run this from a
VT:
----
startx /usr/bin/xterm -- :1
----

View File

@ -0,0 +1,201 @@
How to build mesa
=================
:toc:
Cyril Brulebois <kibi@debian.org>
Foreword
--------
Mesa is a special package since many flavours are built, which means
it takes quite some time to get all packages ready, as well as some
disc space (over 2GB for the `build/` directory alone).
Also, trying to figure out whether latest `master` is also affected,
or backporting some bug fixes might lead to some painful I/O while
generating the `.deb` files, and then installing/unpacking them. This
is why this document was written: Helping users test other mesa
releases, branches, bug fixes without having to build full packages,
and without having to mess with their systems (_i.e._ no root access
is needed once the build dependencies are installed).
Well focus on the DRI (Direct Rendering Infrastructure) flavour
(`libgl1-mesa-dri`), which is the most common.
It might be possible to adapt the following steps to another flavour,
in which case the appropriate options to be passed to `./configure`
should be looked up in the `debian/rules` file of the Debian source
package.
<<<
Gathering information
---------------------
Get started by installing `mesa-utils`, which contains `glxinfo`.
* _Is direct rendering enabled?_
+
$ glxinfo | grep ^direct
direct rendering: Yes
+
↪ Yes.
* _Is this the classic or http://en.wikipedia.org/wiki/Gallium3D[Gallium] driver?_
+
$ glxinfo | grep 'renderer string'
OpenGL renderer string: Mesa DRI Intel(R) 945GM GEM 20100330 DEVELOPMENT
+
↪ No “Gallium” here, therefore: “classic”.
* _Which driver is this, and where is it located?_
+
$ LIBGL_DEBUG=verbose glxinfo 2>&1 >/dev/null | grep so$
libGL: OpenDriver: trying /usr/lib/dri/tls/i915_dri.so
libGL: OpenDriver: trying /usr/lib/dri/i915_dri.so
+
↪ `i915`, from the system directory: `/usr/lib/dri` (likely installed through a Debian package).
* _How can I get more debugging information?_
export LIBGL_DEBUG=verbose
export MESA_DEBUG=1
export EGL_LOG_LEVEL=debug
<<<
Preparing mesa sources
----------------------
To get started, installing all build dependencies of the `mesa` source
package should be sufficient, along with the essential build tools,
and `git`:
----
$ sudo apt-get install build-essential git
$ sudo apt-get build-dep mesa
----
Make sure you have some disc space available, since the git repository
is over 120MB, and since the mesa directory is over 500MB after a
build. Once youre ready, grab the upstream mesa sources:
----
$ git clone git://anongit.freedesktop.org/mesa/mesa mesa.git
$ cd mesa.git
$ autoreconf -vfi
----
Heres what the `./configure` call will look like:
----
$ ./configure --prefix=/usr \
--enable-driglx-direct \
--enable-gles1 \
--enable-gles2 \
--enable-glx-tls \
--with-dri-driverdir=/usr/lib/dri \
--with-egl-platforms='drm x11' \
----
Now, what are the parameters to replace “++…++” with? Basically, if
you determined an Intel driver (`i915` or `i965`), you want to use the
classic drivers and to disable the Gallium drivers. Other drivers are
only available on Gallium (`r300`, `r600`, `radeonsi` and more).
Running `./configure --help` might be useful.
Examples for common drivers:
* For `i915`, you need:
--with-dri-drivers=i915
* For `i965`, you need:
--with-dri-drivers=i965
* For `nouveau`, you may want to try:
--with-dri-drivers=nouveau --with-gallium-drivers=nouveau
* For `r300`, you need:
--with-gallium-drivers=r300
* For `r600`, you need:
--with-gallium-drivers=r600
* For `radeonsi`, you need:
--with-gallium-drivers=radeonsi
Now, once youve run `./configure`, time for your favorite beverage:
----
$ make
----
<<<
Running the newly-built mesa libraries
--------------------------------------
Shared libraries end up in the `lib/` directory. It contains the
classic drivers, while Gallium drivers end up under `lib/gallium`. If
youre not an Intel user, overwrite the classic drivers with the
Gallium ones:
----
$ mv lib/gallium/* lib/
----
Now, 3 variables need to be set, so that the locally-built libraries
are used.
* To begin with, libGL itself and its drivers:
+
$ export LIBGL_DRIVERS_PATH=lib
+
_Did this work?_
+
$ LIBGL_DEBUG=verbose glxinfo 2>&1 >/dev/null | grep so$
libGL: OpenDriver: trying lib/tls/i915_dri.so
libGL: OpenDriver: trying lib/i915_dri.so
+
↪ Yes: No system directory, paths are relative to `lib/`.
* Set `LD_LIBRARY_PATH` to make sure the locally-built libraries
(including those pulled through library dependencies) are used,
instead of system ones:
+
$ export LD_LIBRARY_PATH=lib
+
_Did this work?_
+
$ ldd lib/libGLESv2.so | grep glapi
libglapi.so.0 => lib/libglapi.so.0 (0x00007fee3192e000)
+
↪ Yes: Path is relative to `lib`.
* Set the EGL search path:
+
$ export EGL_DRIVERS_PATH=lib/egl
+
_Did this work?_
+
$ EGL_LOG_LEVEL=debug es2_info 2>&1 >/dev/null | grep '\.so'
libEGL debug: added lib/egl/egl_gallium.so to module array
libEGL debug: dlopen(lib/egl/egl_gallium.so)
libEGL debug: DRI2: dlopen(lib/i915_dri.so)
+
↪ Yes: No system directory, paths are relative to `lib/`.
[float]
The end.
~~~~~~~~
Now you should be ready to test upstreams suggestions!

View File

@ -0,0 +1,193 @@
How to configure input
======================
:toc:
Cyril Brulebois <kibi@debian.org>
General considerations
----------------------
Foreword
~~~~~~~~
The Debian wiki also contains an
http://wiki.debian.org/XStrikeForce/InputHotplugGuide[input hotplug guide]
which contains some context around Xs input subsystem. The present
document is meant to be an executive summary, and might miss some
bits. (*FIXME:* Merge those bits.)
Rules of thumb
~~~~~~~~~~~~~~
In this documentation, only the last part of the drivers name will be
mentioned, all of them are under the `xserver-xorg-input-*` namespace.
* On Linux, `evdev` is used for both keyboard and mouse
input.
* On Linux as well, `synaptics` can be used to benefit from extra
features; it takes precedence over `evdev` automatically if both
are installed.
* On GNU/kFreeBSD and GNU/Hurd, `kbd` handles the keyboard and
`mouse` handles mice, unsurprisingly.
Configuration snippets
~~~~~~~~~~~~~~~~~~~~~~
X can now be run without `xorg.conf`, but sometimes one has to
configure a few settings for this or that driver. Starting with
`squeeze`, that can be done by adding a file under
`/etc/X11/xorg.conf.d`, with a `.conf` suffix, as documented in the
`xorg.conf` manpage.
Some packages ship a default configuration file under
`/usr/share/X11/xorg.conf.d` with general rules to match appropriate
hardware. The files under `/etc/X11/xorg.conf.d` take precedence, as
documented in the `xorg.conf` manpage.
Its probably mostly useful in the `synaptics` case, in case one wants
to change default settings on a system-wide fashion. See the _Pointer
configuration_ section below for an example.
<<<
Basic keyboard configuration
----------------------------
The `keyboard-configuration` package ships `/etc/default/keyboard`
which can be used to set the following `xkb` items: model, layout,
variant, and options. Heres an example:
----
XKBMODEL="pc105"
XKBLAYOUT="fr"
XKBVARIANT="oss"
XKBOPTIONS="compose:menu,terminate:ctrl_alt_bksp"
----
Quick words about the options:
* They are comma-separated.
* The list of options and a short description for each can be found
in the `/usr/share/X11/xkb/rules/base.lst` file (shipped by the
`xkb-data` package).
* First option: `compose:menu`. This sets the `menu` key as the
Compose key. More information about it can be found in the
`Compose` manpage.
* Second option: `terminate:ctrl_alt_bksp`. By default, the X server
is no longer killed through `Ctrl+Alt+Backspace`. This option
restores the old behaviour.
Two ways to change the configuration:
* `dpkg-reconfigure keyboard-configuration` is going to ask questions
through debconf prompts.
* Manually editing `/etc/default/keyboard` also works.
How does it propagate to X?
* When HAL is used (that is: on GNU/kFreeBSD and GNU/Hurd), one has
to restart it: `invoke-rc.d hal restart`
* When udev is used (on GNU/Linux, starting with `squeeze`), one has
to tell udev to reload input-related configuration:
`udevadm trigger --subsystem-match=input --action=change`
(that can be found in ++keyboard-configuration++s `README.Debian`
file). Properties attached to the input devices are then updated,
and X uses those properties when it starts, as can be seen by
searching for `xkb_` in the X log. Please note that trying
`invoke-rc.d udev restart` changes nothing, one has to use
`udevadm`. Properties can be inspected through:
`/sbin/udevadm info --export-db`
<<<
Pointer configuration
---------------------
evdev configuration
~~~~~~~~~~~~~~~~~~~
Available options are documented in the `evdev` manpage. Lets check
what a configuration snippet (mentioned in _General considerations_)
would look like. Here is a fictional `/etc/X11/xorg.conf.d/42-evdev.conf`:
----
Section "InputClass"
Identifier "evdev pointer tweaked catchall"
MatchIsPointer "on"
Driver "evdev"
Option "Emulate3Buttons" "True"
Option "SwapAxes" "True"
EndSection
----
Line by line walkthrough:
* To avoid specifying any device under `/dev/input` (`event$N` might
change, remember its about hotplug support!), we use an
`InputClass`.
* We need an identifier, the actual name doesnt matter.
* We match everything that looks like a touchpad. Meaning no generic
pointer, keyboard, or tablet.
* We specify the driver we want to use for the matched device(s).
* Finally the options we want to set. Here we enable the 3rd button
emulation (clicking left and right buttons at the same time then no
longer acts as if the middle button was clicked). Then we swap x
and y axes, just for the fun of it.
synaptics configuration
~~~~~~~~~~~~~~~~~~~~~~~
The `synaptics` driver comes with two tools. The more interesting one
is `synclient`, which can be used to list available options and
current settings: `synclient -l`. The documentation for each option
can be found in the `synaptics` manpage.
`synclient` can also be used to set options. A common example is
enabling tapping (upstream kept it disabled by default, Debian wont
deviate, no need to file bugs): `synclient TapButton1=1`; one can also
disable the touchpad temporarily: `synclient TouchpadOff=1` to
disable it, `synclient TouchpadOff=0` to enable it again.
Lets check what a configuration snippet (mentioned in _General
considerations_) would look like. Here is a fictional
`/etc/X11/xorg.conf.d/42-synaptics.conf`:
----
Section "InputClass"
Identifier "touchpad tweaked catchall"
MatchIsTouchpad "on"
Driver "synaptics"
Option "TapButton1" "1"
Option "HorizEdgeScroll" "1"
EndSection
----
Line by line walkthrough:
* To avoid specifying any device under `/dev/input` (`event$N` might
change, remember its about hotplug support!), we use an
`InputClass`.
* We need an identifier, the actual name doesnt matter.
* We match everything that looks like a touchpad. Meaning no generic
pointer, keyboard, or tablet.
* We specify the driver we want to use for the matched device(s).
* Finally the options we want to set. We enable tapping for the first
button. And we enable horizontal scrolling (by default, only
vertical scrolling is enabled).
Settings can also be changed by various settings managers, like
Gnomes or KDEs. An example of a graphical user interface making it
possible to set options in a clicky way: `gpointing-device-settings`.
Theres a palm detection setting but that relies on hardware/firmware
support for the touchpad. The other tool shipped with the `synaptics`
driver is `syndaemon`, which makes it trivial to disable the touchpad
temporarily, when the keyboard is being used. Heres an example:
`syndaemon -d -i 0.5` makes `syndaemon` start in background (`-d` for
daemon mode), waiting 0.5 second before enabling the touchpad again
after the last keypress. Warning: it becomes quite difficult to use
things like `Ctrl+click` in a browser, or `Alt+drag` to move
windows.

View File

@ -0,0 +1,62 @@
How to report bugs
==================
Cyril Brulebois <kibi@debian.org>
Report it upstream
------------------
In most cases, it is preferrable to report the bug upstream at
https://bugs.freedesktop.org/enter_bug.cgi?product=xorg
See https://01.org/linuxgraphics/documentation/how-report-bugs-0 for a good
introduction on how to write useful bug reports. While the document is targeted
at Intel graphics hardware, it is a good guideline for other vendors hardware
as well.
Simple as reportbug
-------------------
Initial report
~~~~~~~~~~~~~~
Unless you know which package to report the bug against, you can
report the bug against the `xorg` metapackage:
----
reportbug xorg
----
Like most packages related to the X server, reporting a bug against
this package triggers a bug script which is going to collect X-related
information, be it installed packages, running kernel, X
configuration, X log, and so on.
****
.Note
In case this metapackage wasnt used to install your X stack,
report a bug against `xserver-xorg` instead. And if that one isnt
installed either, go for `xserver-xorg-core`.
****
If a backtrace shows up in the X log, its much appreciated to try and
get a link:use-gdb.html[full backtrace using gdb].
Follow-up with more info
~~~~~~~~~~~~~~~~~~~~~~~~
If you reported a bug against another package and if that bug was
reassigned to an X-related package, we might need more
information. You can run the bug script manually and attach its output
to your mail to the bug report:
----
/usr/share/bug/xserver-xorg-core/script 3>/tmp/script.log
----
****
.Note
Make sure theres no space between `3` and `>`, thats a shell
redirection.
****

View File

@ -0,0 +1,104 @@
How to triage bugs
==================
:toc:
Cyril Brulebois <kibi@debian.org>
Packaging bugs or upstream bugs?
--------------------------------
Itd be nice to get all upstream bugs tagged as such (`upstream` tag),
forwarded upstream (which means the bugzilla instance on
http://bugs.freedesktop.org/ for most packages), and marked as such.
A mail to `control@bugs.debian.org` would look like:
----
tag X upstream
forwarded X https://bugs.freedesktop.org/show_bug.cgi?id=Y
thanks
----
Then http://bts-link.alioth.debian.org/[`bts-link`] comes into play
and helps us tracking upstream status, which is pretty nice to have.
<<<
Usertags
--------
Another feature of the BTS is usertagging. That lets people keep track
of additional tags, “attached” to a given mail address. For XSF,
thats `debian-x@lists.debian.org`.
The list of all usertagged bugs can be seen on the following page; the
list of all used usertags is at the bottom, in the form. +
→ http://bugs.debian.org/cgi-bin/pkgreport.cgi?users=debian-x%40lists.debian.org
Lets give some examples:
* `i810`, `i915`: helps triaging `-video-intel` bugs depending on the
chipset.
* `r200`, `r300`: ditto for `-video-ati`.
* `xset`, `xrandr`: helps triaging `x11-xserver-utils` bugs depending
on the affected tool (like other `x11-*` packages, thats a bundle
of teeny tiny apps).
* `squeeze-candidate`: helps keeping a list of bugs wed like to get
fixed in a point release (through a stable update).
* `needs-forwarding`: of course, itd be nice to have all upstream
bugs reported upstream, but some might need special attention
(_e.g._ security bugs).
Heres an example of URL, for the last tags: +
→ http://bugs.debian.org/cgi-bin/pkgreport.cgi?users=debian-x%40lists.debian.org&tag=squeeze-candidate +
→ http://bugs.debian.org/cgi-bin/pkgreport.cgi?users=debian-x%40lists.debian.org&tag=needs-forwarding
By the way one should keep an eye on the list of found/fixed
versions since those bugs are likely marked as resolved (in `unstable`
or `experimental`), but might still affect a stable release.
To list the bugs marked `squeeze-candidate` but not
`squeeze-accepted`: +
→ http://bugs.debian.org/cgi-bin/pkgreport.cgi?users=debian-x%40lists.debian.org&tag=squeeze-candidate&exclude=tag:squeeze-accepted
<<<
Categories
----------
The BTS has yet another feature which can help, categories. Thats
based on usertags as well, but one has to use the package address
(`$package@packages.debian.org`), so thats package-specific rather
than team-specific.
Categories are
http://wiki.debian.org/bugs.debian.org/usertags[documented on the wiki],
and they would probably be welcome in the `intel` and `ati` cases
above, as well as in the “multiple tools in a single bundle”
cases… An example of what we could achieve is the
http://bugs.debian.org/devscripts[devscripts bug page] (it takes
some time to load, plenty of bugs).
Needed steps for that to happen:
* create usercategories.
* move usertags from `debian-x@lists.debian.org` to
`$package@packages.debian.org`, probably using the `bts select`
command to get the list over which to iterate.
* profit!
To move the usertags, something like that should do the job:
----
# Adding usertags:
user $package1@packages.debian.org
usertag X xset
usertag Y xrandr
user $package2@packages.debian.org
usertag Z i810
# Removing tags which are no longer needed:
user debian-x@lists.debian.org
usertag X - xset
usertag Y - xrandr
usertag Z - i810
----

179
xsf-docs/howto/use-gdb.txt Normal file
View File

@ -0,0 +1,179 @@
How to use gdb
==============
:toc:
Cyril Brulebois <kibi@debian.org>
Foreword
--------
One should note that X is responsible for VT switching, meaning
switching between an X session and console terminals. In other words,
`Ctrl+Alt+Fn` is handled by X. If X is stopped, for example because
its running under `gdb`, one can no longer switch to another
VT. Thats why were recommending using a second machine to debug
X. Nevertheless, here are some instructions to attempt debugging X
with a single machine.
One-machine approach
~~~~~~~~~~~~~~~~~~~~
This is a _post-mortem_ approach. The idea is to run X with the
`-core` option. Once it dies, a core file (`/etc/X11/core`) is
generated, and can be loaded from `gdb`.
Follow these steps:
1. Getting a core file.
2. Loading a core file.
3. Displaying/saving a backtrace.
Two-machine approach
~~~~~~~~~~~~~~~~~~~~
You pay the “need a second machine” price, but that buys you
interactivity. Just log into the first machine from the second one,
using `ssh`.
Follow these steps:
1. Attaching/Starting X from gdb.
2. Displaying/saving a backtrace.
Needed packages
~~~~~~~~~~~~~~~
Obviously, `gdb` is needed; `xserver-xorg-core-dbg` contains the
debugging symbols for the server itself. Other needed packages can be
determined by looking at the backtrace. **FIXME: More info about
that.**
<<<
Actual gdb work
---------------
Getting a core file
~~~~~~~~~~~~~~~~~~~
* Using `gdm3` 3.4.1 and above: uncomment `Enable = true` in the
`[debug]` section of the `/etc/gdm3/daemon.conf` file.
* Using an older `gdm3` package: The idea is to tweak the daemons
`LocalXserverCommand` setting, adding the `-core` option. As of
`gdm3 2.30`, the defaults can be found in
`/usr/share/gdm/gdm.schemas`. Sample `/etc/gdm3/daemon.conf`
excerpt:
----
[daemon]
LocalXserverCommand=/usr/bin/Xorg -br -verbose -audit 0 -novtswitch -core
----
* Using `kdm`: One should look for the `ServerArgsLocal` variable in
the `/etc/kde4/kdm/kdmrc` file, and add `-core` there. Example:
----
ServerArgsLocal=-br -nolisten tcp -core
----
* Using `xdm`: Its sufficient to add `-core` to the command
configured through `/etc/X11/xdm/Xservers`, for example:
----
:0 local /usr/bin/X :0 vt7 -nolisten tcp -core
----
Loading a core file
~~~~~~~~~~~~~~~~~~~
Thats trivial, one just needs to pass both the core file and the path
to the binary:
----
# gdb -c /etc/X11/core /usr/bin/Xorg
----
Now `gdb` is ready to display backtraces.
Attaching X from gdb
~~~~~~~~~~~~~~~~~~~~
The way of starting X doesnt really matter, as `gdb` makes it
possible to attach a running process. If theres a single X instance
running, that will do the job:
----
# gdb attach $(pidof X)
[---GDB starts---]
(gdb) handle SIGPIPE nostop
(gdb) cont
----
If there are several instances, one can use `ps aux` to determine the
PID of the appropriate instance (2nd column → `$pid`), and then attach
it:
----
# gdb attach $pid
[---GDB starts---]
(gdb) handle SIGPIPE nostop
(gdb) cont
----
Starting X from gdb
~~~~~~~~~~~~~~~~~~~
In case X crashes at start-up, one can start X from `gdb` in the
following way. In this example, the only parameter is the display, but
more parameters can be added.
----
# gdb --args Xorg :0
[---GDB starts---]
(gdb) handle SIGPIPE nostop
(gdb) run
----
What is SIGPIPE?
~~~~~~~~~~~~~~~~
`SIGPIPE` is a signal that can reach the X server quite easily,
especially when performing a VT switch, or refreshing large parts of
the screen. Thats why we ask `gdb` not to stop when such a signal is
caught, thanks to the `handle SIGPIPE nostop` command.
How to display a backtrace?
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Once X is crashed, for example because it received a `SIGSEGV`
(segmentation fault, usually because of a NULL pointer dereference),
or a `SIGBUS`, one gets back to the `gdb` prompt. One can then request
a backtrace (`bt`) or a full backtrace (`bt full`). The latter is what
developers are usually interested in, because variable values are also
available.
----
(gdb) bt
(gdb) bt full
----
How to save a backtrace?
~~~~~~~~~~~~~~~~~~~~~~~~
To save a recording of the gdb session to a file (`gdb.txt` by
default):
----
(gdb) set logging on
----
To save in a different file, use this instead:
----
(gdb) set logging file my-file.txt
(gdb) set logging on
----
Once logging is enabled, you can request a (full) backtrace using the
previous commands.

View File

@ -0,0 +1,214 @@
How to use xrandr
=================
:toc:
Cyril Brulebois <kibi@debian.org>
Getting started
---------------
What is xrandr?
~~~~~~~~~~~~~~~
`xrandr` is a command-line tool to interact with the X `RandR`
extension [see http://www.x.org/wiki/Projects/XRandR[x.org],
http://en.wikipedia.org/wiki/RandR[wikipedia]], which allows for
live (re)configuration of the X server (_i.e._ without restarting it):
It provides automatic discovery of modes (resolutions, refresh rates,
etc.) together with the ability to configure outputs dynamically
(resize, rotate, move, etc.).
*FIXME: Status across drivers?*
What consequences for xorg.conf?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Starting with `squeeze`, removing the `xorg.conf` configuration file
entirely should work well enough, but in case that doesnt work out,
lets document what can be removed from it from a `RandR` point of
view.
With the driver detecting modes automatically, several configuration
options become useless most of the time in your configuration file
(xorg.conf). You might want to remove:
* `HorizSync` and `VertRefresh` from the `Monitor` section.
* Modes from `Display` subsection in `Screen` section.
* `ModeLine` from the `Monitor` section.
Theres also no need to keep static dual-head configuration. Some
suggestions to get a tiny `xorg.conf`:
* Drop dual `Device`/`Screen`/`Monitor` sections, a single one is
needed.
* Drop `MonitorLayout` option and `Screen` lines from the remaining
`Device` section.
* Drop the `ServerLayout` section(s).
* Drop `RightOf`/`LeftOf` indication of the remaining `Screen` line
in `ServerLayout` section.
<<<
Basic xrandr usage
------------------
Once the configuration file (`xorg.conf`) is removed or updated,
starting the server should enable some outputs by default. Their
top-left corners will be at the same part of the image, but their
modes will probably be different.
All outputs may be configured through `xrandr`. To see the available
outputs, just run `xrandr`:
----
$ xrandr
Screen 0: minimum 320 x 200, current 1280 x 800, maximum 4096 x 4096
VGA1 disconnected (normal left inverted right x axis y axis)
LVDS1 connected 1280x800+0+0 inverted X and Y axis (normal left inverted right x axis y axis) 261mm x 163mm
1280x800 59.8*+
1024x768 60.0
800x600 60.3 56.2
640x480 59.9
DVI1 disconnected (normal left inverted right x axis y axis)
TV1 disconnected (normal left inverted right x axis y axis)
----
Comments:
* We see 4 outputs: `VGA1`, `LVDS1`, `DVI1`, `TV1`.
* Only the internal panel (`LVDS1`) is connected and it supports 4
modes at 60 Hz, 1 mode at 56 Hz.
* The mode marked with a star (`*`) is the current mode.
* The one marked with a plus (`+`) is the preferred one. Most
monitors report a preferred mode to the driver. And the
server/driver will generally choose it by default.
*FIXME: Mention output name conventions?*
When manipulating `VGA1` output properties, you should use:
----
$ xrandr --output VGA1 <options>
----
Adding/removing heads dynamically
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The old days where you had to restart X when plugging a new monitor
are gone. With `RandR` 1.2, you can plug/unplug monitors whenever you
want. Running the following line will query all outputs and enable
them with their default mode:
----
$ xrandr --auto
----
You may also disable one output using:
----
$ xrandr --output LVDS1 --off
----
This may be useful for some buggy application that dont support
multiple outputs well. Also, due to CRTC limitations (see the Caveats
section below), it is often required to disable one output before
enabling another since most hardware only support 2 at the same time.
Changing the mode
~~~~~~~~~~~~~~~~~
With the above `xrandr` output, you may change the `LVDS1` mode to
`1024x768` using:
----
$ xrandr --output LVDS1 --mode 1024x768
----
The refresh rate may also be changed, either at the same time or
independently:
----
$ xrandr --output LVDS1 --mode 1024x768 --rate 75
$ xrandr --output LVDS1 --rate 75
----
To get back to the default mode:
----
$ xrandr --output LVDS1 --auto
----
<<<
Placing outputs in a virtual screen
-----------------------------------
A bit of configuration for non-KMS setups:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lets have a look at the maximal virtual screen size, we see
`4096x4096` in this example:
----
$ xrandr|head -1
Screen 0: minimum 320 x 200, current 1280 x 800, maximum 4096 x 4096
----
With KMS (*FIXME: Link to a page which explains what KMS is*),
there's no need to specify any `Virtual` option. With DRI and without
KMS, that might be needed. Indeed, drivers will often create a default
virtual screen with small dimensions, for instance `1600x1200`, to
reduce memory consumption.
If you plan to use multiple outputs displaying different zones, you
should configure your `xorg.conf` by adding a `Virtual` line to the
`Display` subsection in the `Screen` section.
----
Section "Screen"
SubSection "Display"
Depth 24
Virtual 3000 2000
EndSubSection
EndSection
----
Place outputs
~~~~~~~~~~~~~
Outputs are placed using the following options:
`--right-of`/`--left-of`/`--above`/`--below`. For instance, to place
the `VGA1` output virtually-right of the internal panel (`LVDS1`):
----
$ xrandr --output VGA1 --right-of LVDS1
----
Note that hardware and memory limitations may severely restrict the
size of your virtual screen, see the Caveats section below.
<<<
Adding new modes
----------------
Under some circumstances, some modes might be missing. For instance,
if the monitor does not report correct EDID information. Or if the
output didn't have a CRTC available at startup because another output
was using it and you disabled it in the meantime.
If a mode exist, you may add it to one output with:
----
$ xrandr --addmode VGA1 800x600
----
If the mode does not exist, you may first create it by passing a modeline:
----
$ xrandr --newmode <ModeLine>
----
You may create a modeline using the `gtf` or `cvt` tools (shipped in
the `xserver-xorg-core` package).

1
xsf-docs/howtos Symbolic link
View File

@ -0,0 +1 @@
howto

51
xsf-docs/index.txt Normal file
View File

@ -0,0 +1,51 @@
X Strike Forces documentation
==============================
_The “X Strike Force” takes care of packaging X.Org for Debian._
{nbsp}
These documents are shipped in the
http://packages.debian.org/xserver-xorg&exact=1[xserver-xorg]
metapackage (under `/usr/share/doc/xorg`), starting with
`wheezy`. They are also available online at
http://x.debian.net/[x.debian.net], which is an alias for the
longer-to-type
http://pkg-xorg.alioth.debian.org/[pkg-xorg.alioth.debian.org].
Getting started
---------------
* link:faq/general.html[General FAQ]
How to…
-------
* link:howto/report-bugs.html[How to report bugs]
* link:howto/triage-bugs.html[How to triage bugs]
* link:howto/use-gdb.html[How to use GDB]
* link:howto/configure-input.html[How to configure input]
* link:howto/use-xrandr.html[How to configure outputs]
* link:howto/build-mesa.html[How to build mesa]
Reference documentation
-----------------------
* link:reference/git-usage.html[Using git for X repositories]
* link:reference/dependencies.html[Dependencies between server and drivers]
* link:reference/squeeze-backports.html[Backports of the whole X stack for squeeze]
* link:reference/upstream-contacts.html[Upstream contacts]
Other documentation
-------------------
* link:upstream-features.html[Upstream features]
Feedback
--------
* Sources for these documents are available on
http://git.debian.org/?p=pkg-xorg/debian/xorg.git;a=shortlog;h=xsf-docs[git.debian.org].
* Patches, suggestions, flames, etc. are welcome, using the
http://lists.debian.org/debian-x/[debian-x] mailing list.

View File

@ -0,0 +1,260 @@
Dependencies between server and drivers
=======================================
:toc:
Cyril Brulebois <kibi@debian.org>
Upstream-side: ABI version numbers
----------------------------------
The X server defines several
http://en.wikipedia.org/wiki/Application_binary_interface[ABI] version numbers in the
`hw/xfree86/common/xf86Module.h` header, through the
`SET_ABI_VERSION(maj,min)` macro. In this document, the focus is on
`ABI_VIDEODRV_VERSION` and `ABI_XINPUT_VERSION`, which are
respectively about `video` drivers and `input` drivers.
An example of input ABI is `12.1`, `12` being the `major`, `1` being
the `minor`.
Like in usual shared libraries, the major is bumped when interfaces
are broken. Theres no compatibility at all in that case.
The minor gets bumped when interfaces are added. In other words, if a
driver is working with `x.y`, it should also work with higher minors:
`x.z`; `z>y`. The converse is not true, if a driver requires a given
minor (for example because it needs a new feature, like MultiTouch),
it wont work with lower minors (which didnt provide the needed
feature). Put another way: we have ascending compatibility with the
minors.
Conclusion: We need to keep track of both major and minor.
Thanks to `pkg-config` we can query them:
----
$ pkg-config --variable=abi_videodrv xorg-server
9.0
$ pkg-config --variable=abi_xinput xorg-server
12.1
----
<<<
Debian-side: Using virtual packages
-----------------------------------
Servers build system
~~~~~~~~~~~~~~~~~~~~~
When `xorg-server` gets built, we use ++pkg-config++s output to
determine the current major. Through substitution variables, we add
two virtual packages in the `Provides` field of the server (for both
`xserver-xorg-core` and `xserver-xorg-core-udeb`): `xorg-input-abi-$x`
and `xorg-video-abi-$y`, where `$x` and `$y` are the major part of the
version queried through `pkg-config` variables.
To handle ascending compatibility for minors, we maintain in
`debian/serverminver` the minimal version of `xserver-xorg-core` which
is needed. When a minor is bumped, we store the server version in that
file. This way, drivers built afterwards will depend on a *minimal*
version of the driver, the last which saw a minor version bump. In
other words: they will “depend on the server version they were built
against, or a higher/compatible one”.
Both ABI and minimal server version are recorded in two files shipped
in `xserver-xorg-dev`, to be used while building drivers:
* `/usr/share/xserver-xorg/xinputdep`
* `/usr/share/xserver-xorg/videodrvdep`
Example for `xinputdep`:
----
xorg-input-abi-11, xserver-xorg-core (>= 2:1.8.99.904)
----
To make sure we bump the `debian/serverminver` when theres a minor
ABI change, theres a `abibumpcheck` target (on which `clean`
depends), which extracts input and video ABI from the upstream header,
and compares them to the previous ones stored in
`debian/serverminver`, failing and diffing is something changed.
Drivers control file
~~~~~~~~~~~~~~~~~~~~~
Drivers also use substitution variables in their control file,
replaced at build time.
----
# Input driver:
Depends: ${xinpdriver:Depends}, …
Provides: ${xinpdriver:Provides}
# Video driver:
Depends: ${xviddriver:Depends}, …
Provides: ${xviddriver:Provides}
----
For now, `${xinpdriver:Provides}` is always replaced with
`xorg-driver-input`, and `${xviddriver:Provides}` is always replaced
with `xorg-driver-video`. Hopefully provided packages will not change,
but using substitution variables is cheap, and makes it easy to add
tweaks afterwards if needed.
Drivers build system
~~~~~~~~~~~~~~~~~~~~~
To set those variables, we ship a `dh_xsf_substvars` script in
`xserver-xorg-dev` starting with `2:1.9.4`, to be run before
`dh_gencontrol`. It iterates on the packages listed by
`dh_listpackages` (very old `debhelper` command) and does the
following work:
* It reads variables from the files mentioned above.
* If a package name ends with `-udeb`, it replaces
`xserver-xorg-core` with `xserver-xorg-core-udeb`.
* If a package name ends with `-dbg`, it does nothing for this
package. Debug packages usually depend strictly on the non-debug
packages, which in turn have appropriate dependencies.
* If a package name starts with `xserver-xorg-input-`, it appends
`xinpdriver:Depends=…` and `xinpdriver:Provides=…` to this
packages substvars file.
* If a package name starts with `xserver-xorg-video-`, it appends
`xviddriver:Depends=…` and `xviddriver:Provides=…` to this
packages substvars file.
Why such heuristics? The idea is to avoid getting “unused substitution
variable” warning messages while building. And since theres a clear
`xserver-xorg-{input,video}-*` namespace, we can use that to specify
only input-related variables for input drivers, and only video-related
variables for video drivers.
To make it easy to compute substvars when using `dh`, a `dh` sequence
(`xsf.pm`) is shipped. As of `2:1.9.4-1`, it inserts
`dh_xsf_substvars` right before the `dh_gencontrol` call. Other
repetitive tasks could also be automated this way.
<<<
Sample driver packaging
-----------------------
The following assumes:
* The upstream build system is sane enough, which lets us run
`autoreconf` at build time.
* It is a `video` driver. For an `input` driver, replace both
`xviddriver` occurrences with `xinpdriver`.
Sample debian/control file
~~~~~~~~~~~~~~~~~~~~~~~~~~
----
Build-Depends:
debhelper (>= 8),
dh-autoreconf,
quilt,
xserver-xorg-dev (>= 2:1.9.4),
----
----
Depends:
${shlibs:Depends},
${misc:Depends},
${xviddriver:Depends},
Provides:
${xviddriver:Provides}
----
Sample debian/rules file
~~~~~~~~~~~~~~~~~~~~~~~~
----
#!/usr/bin/make -f
# Configuration:
#override_dh_auto_configure:
# dh_auto_configure -- --with-FOO --without-BAR
# Install in debian/tmp to retain control through dh_install:
override_dh_auto_install:
dh_auto_install --destdir=debian/tmp
# Kill *.la files, and forget no-one:
override_dh_install:
find debian/tmp -name '*.la' -delete
dh_install --fail-missing
## Debug package:
#override_dh_strip:
# dh_strip --dbg-package=xserver-xorg-video-DRIVER-dbg
# That's a plugin, use appropriate warning level:
override_dh_shlibdeps:
dh_shlibdeps -- --warnings=6
%:
dh $@ --with quilt,autoreconf,xsf --builddirectory=build/
----
Some comments:
* `dh_auto_configure`: Commented out since theres usually no
specific option to pass when building drivers. Sometimes needed to
get a related utility built.
* `dh_auto_install`: It behaves differently when operating on a
single package (it installs under `debian/PACKAGE` instead of
`debian/tmp`), so make it use `debian/tmp` in all cases. This way,
`dh_install` has to be used (see below). That also means that a
binary package (_e.g._ a debug package) can be added without
changing this part.
* `dh_install`: No point in keeping the `.la` files. Also, using
`--fail-missing` makes sure every file installed by upstream is
installed in some package, or explicitly ignored.
* `dh_strip`: Commented out, theres only a few drivers shipping a
debug package.
* `dh_shlibdeps`: The comment really says it all.
* `dh`: The order is important! We want patching to happen before
autoreconfiguring (both `quilt` and `autoreconf` insert commands
before `dh_auto_configure`, and after `dh_clean`). Also, we build
out-of-tree. The `xsf` sequence is explained in the previous part.
If one needs to build several flavours,
http://git.debian.org/?p=pkg-xorg/driver/xserver-xorg-video-fbdev.git;a=blob;f=debian/rules[++fbdev++s rules file]
can be used as an example.
<<<
Handling a transition
---------------------
When a new major version of the server comes up, it can be updated
following its `README.source`. Usually, drivers can be rebuilt using
binNMUs. Be sure `xorg-server` is marked as `Installed` on all
buildds, or set a `dep-wait`.
On the release team side, a transition page can be asked for, to track
fully rebuilt drivers. For the input 12→13 and video 10→11
transitions, the settings are:
* Affected: `.build-depends ~ /xserver-xorg-dev/`
* Good: `.depends ~ /xorg-input-abi-13/ | .depends ~ /xorg-video-abi-11/`
* Bad: `.depends ~ /xorg-input-abi-12/ | .depends ~ /xorg-video-abi-10/`
<<<
Staying tuned
-------------
Staying informed of driver-related changes can be a bit difficult in
the following cases:
* If one maintains a single driver within the X Strike Force, one
might not notice the few mails about drivers in the heavy mail flow
on `debian-x@`.
* If one maintains a driver outside the X Strike Force, one is
probably not subscribed to the mailing list at all.
For those reasons, a mail alias is being set up to gather all
maintainers interested in receiving driver-related mails.

View File

@ -0,0 +1,98 @@
Handling multiple server versions thanks to experimental
========================================================
Cyril Brulebois <kibi@debian.org>
Context
-------
A quick overview of how things work upstream for the server:
* Patches get reviewed and merged into the `master` branch.
* After a few release candidates, `master` gets tagged (say: `1.10`
or `1.10.0`), and a stable branch (`server-1.10-branch` in this
case) is created to receive bug fixes.
* Those bug fixes usually are cherry-picks from commits in the
`master` branch.
* This leads to stable bugfix releases: `1.10.1`, `1.10.2`, and
so on.
It doesnt make much sense to try and package `master` on a continuous
fashion, since the ABI can be broken multiple times, without a bump
for the ABI version numbers every time. Its usually done once a bunch
of major changes landed, and when things are supposed to be stable
for a while. On the packaging side, as explained on the
link:dependencies.html[dependencies between server and drivers] page,
a bump means the need for a rebuild of the relevant drivers (input
and/or video).
Thats why the idea is to concentrate on upstream release candidates
and official releases. Depending on available developer time (both
upstream and in Debian), several branches can be developed/maintained
in parallel, so it can be worth having several versions available in
parallel, which is where `experimental` is handy.
Keeping on with this example, with `1.9` in `unstable`, release
candidates for `1.10` can be uploaded to `experimental`, along with a
few drivers so that its actually useful.
Selecting drivers
-----------------
To avoid repetitive and sometimes pointless work, its probably a good
idea to upload (to `experimental` as well) only a few drivers built
against the server in `experimental`. ABI might be bumped between
release candidates (that happened between `1.10rc3` and `1.10` for
example), so drivers would need to be rebuilt (even though binNMUs
might help).
The proposed drivers can be seen on the
link:squeeze-backports.html[backports policy for squeeze] page, along
with a tiny description for each.
Building drivers in experimental
--------------------------------
Having a driver in `experimental` doesnt change much: It is sufficient
to declare a build-dependency against `xserver-xorg-dev (>=
$serverminver)`, where `$serverminver` can be seen in:
* `debian/serverminver` in the `xorg-server` source package: see its
first line.
* `/usr/share/xserver-xorg/inputdrvdep`: see the needed version of
`xserver-xorg-core`.
* `/usr/share/xserver-xorg/videodrvdep`: ditto.
So, for a given version of a driver in `unstable`, bumping the
build-dep version and uploading to `experimental` should be enough,
providing it doesnt require further changes (source code changes are
sometimes needed to support building against a newer server). When
that happens, the revision number can be constructed by appending
`+exp1`. The idea here is to avoid things like:
* `1.42-1` to `unstable`.
* `1.42-2` to `experimental`: bump the build-dep.
* `1.42-3` to `unstable`: revert the build-dep bump, add a bugfix.
* `1.42-4` to `experimental`: build the build-dep again, keep the bugfix.
* etc.
Instead, that seems more natural:
* `1.42-1` to `unstable`.
* `1.42-1+exp1` to `experimental`: bump the build-dep.
* `1.42-2` to `unstable`: add a bugfix to ++unstable++s version.
* `1.42-2+exp1` to `experimental`: rebuild against experimental
(merging or rebasing the build-dep bump).
****
.Note
Remember `experimental` is special. With the above sequence of
uploads, if the `1.42-2+exp1` version isnt uploaded, the
`1.42-1+exp1` upload might disappear from `experimental` after some
time, since the version in `unstable` is more recent: the “obsolete”
package goes away. Thats why its important to remember uploading to
`experimental` as well when uploading a new driver to `unstable`.
****

View File

@ -0,0 +1,200 @@
Git usage
=========
:toc:
Cyril Brulebois <kibi@debian.org>
[NOTE]
The old documentation is still available on the wiki:
http://wiki.debian.org/XStrikeForce/git-usage[wiki.debian.org/XSF/git-usage];
this documentation is just a draft for now.
Getting started
---------------
Upstream repositories are hosted on
http://cgit.freedesktop.org/[git.freedesktop.org]
Debian repositories are hosted on
http://git.debian.org/[git.debian.org] under the `pkg-xorg/*`
namespace. Each repository is about a single Debian source package.
We have two types of repositories:
* *regular* packages: 1 upstream repository → 1 Debian repository → 1
Debian source package (non-native).
* *bundle* packages: multiple upstream repositories → 1 Debian
repository → 1 Debian source package (native).
A local git repository can have several remotes. In the context of
Debian packaging, one usually starts by cloning the Debian repository,
so `origin` will likely point to `git.debian.org`. One can use
`upstream` to point to `anongit.freedesktop.org`. The following
documentation assumes this convention.
The following bits in `~/.gitconfig` will make it possible to fetch
updates using the `git` protocol (anonymously), and to push updates
through `ssh` without having to fiddle with the remotes URL (in other
words: using `git://git.debian.org` everywhere):
----
[url "ssh://git.debian.org"]
pushInsteadOf = "git://git.debian.org"
----
To get the repository from `git.debian.org` one can run `debcheckout
$package` (or `debcheckout $package $package.git`), which will use the
`Vcs-Git` fields in the APT cache to pick the appropriate git
location. To add the `upstream` remote (using the info stored in
`debian/watch`), one can use `xsf-remote-add-upstream` script from the
http://git.debian.org/?p=pkg-xorg/debian/xsf-tools.git[pkg-xorg/debian/xsf-tools.git]
repository.
**TODO:** There will be more information about how to deal with the
many repositories maintained by the X Strike Force in a later chapter.
The usual workflow is to keep the target suite in `debian/changelog`
to `UNRELEASED` until the upload happens, the last commit before a
commit being only `dch -r`. To achieve that, and to avoid noise since
those packages are comaintained, its advised to set the following
variable in `~/.devscripts`:
----
DEBCHANGE_RELEASE_HEURISTIC=changelog
----
Regular packages
----------------
For most packages (exceptions include `xorg-server`), development is
linear, and happens in a `master` branch. That `master` branch is
pushed in the Debian repository as `upstream-$suite`
(e.g. `upstream-unstable`), depending on the target suite. Usually,
`upstream-unstable` tracks `upstream/master`.
The packaging is kept in `debian-$suite` branches, branched from
`upstream-$suite`. When cloning a Debian repository, the default
branch is `debian-unstable`.
To create the initial packaging from the `upstream-unstable` branch,
just run `git checkout -b debian-unstable`, add packaging files
(`changelog`, `control`, `copyright`, `rules` etc. under `debian/`),
and thats it.
Heres how to merge from upstream (`$foo` being a tag or
`upstream/master`):
----
git checkout upstream-unstable
git merge $foo
git log $foo > ChangeLog
dch -v $debianrevision
git commit -am 'Bump changelogs.'
----
`$debianrevision` is usually `$foo` with `-1` appended (first upload),
and sometimes prepended with a epoch (for example `2:`). Passing
`$foo-1` is usually a good rule of thumb, since `dch` will complain if
the epoch is missing (given the specified version string wouldnt be
newer than the current one).
When development isnt linear
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
For packages like `xorg-server` and `libx11`, there are stable
branches which receive updates for a while. Trying to switch from
`1.10.2` to `1.11.0` might trigger a lot of conflicts. But in the end
what matters is the changes between `upstream-$suite` and
`debian-$suite`. Heres an example, supposing `upstream-unstable` and
`debian-unstable` are pointing to the “old” branches, and supposing
the new branch is `upstream/master`:
----
git checkout -b debian-unstable-new upstream/master
git merge -s ours upstream-unstable
git merge debian-unstable
git branch -d debian-unstable
git branch -m debian-unstable
----
Subtitles:
* Create a `debian-unstable-new` branch starting with the upstream
`master` branch, and switch to it.
* “Merge” the old `upstream-unstable` branch, actually keeping only
the new upstream branch.
* Merge the old packaging on top of it.
* Remove the old branch (so that the name can be reused).
* Rename the current `debian-unstable-new` branch into
`debian-unstable`.
Since the tip of the new `debian-unstable` branch is a descendant of
the tip of the old `debian-unstable` one, it can be pushed normally.
Since old `upstream-unstable` and new `upstream-unstable` diverged,
this branch has to be pushed with a `-f` to force the update (its not
a fast-forward).
Bundle packages
---------------
One bundle package is a Debian native package, with just a (Debian)
tarball, instead of an upstream tarball plus a Debian diff.
There is no upstream branches here, only `debian-$suite`.
The repository contains a `debian/` directory for the packaging, and
one directory per upstream source. Merging a new upstream release
means updating the contents of the relevant directory with the
contents of the new upstream tarball. Fetching new tarballs is
automated through a specific target: `make -f debian/rules
get-tarballs`
To perform an update, first run `dch -i` to create a new changelog
entry if the previous commit was an upload (the new entry targets the
`UNRELEASED` suite, see “Foreword”).
Assuming `get-tarballs` made `foo-bar.tar.gz` appear in the top-level
directory, heres how to update (trailing slashes are not needed, just
there to clarify were working on directories):
----
git rm -r foo/
tar xf foo-bar.tar.gz
mv foo-bar/ foo/
git add foo/
dch "foo bar"
debcommit -a
----
Using the `xsf-remote-add-upstream` script will create several
`upstream-$foo` remotes, using info stored in `debian/watch*`. This
helps browsing the history of a given repository (rather than having
to look at a big fat diff with autogenerated files in the middle).
Upgrade checklist
-----------------
[NOTE]
Since its likely for a reader of this page to be on her way to update
a package, heres a tiny upgrade checklist.
Basic checks include looking into what happened to those files since
the last packaging update:
* `COPYING`: Update `debian/copyright` accordingly.
* `configure.ac` (or `configure.in`): Update (build-)dependencies
accordingly.
About xorg macros (they show up very often in the diff), theyre
shipped in the `xutils-dev` package, which contains a file to help map
macro versions and package versions:
`/usr/share/doc/xutils-dev/versions`
Some packages might have more specific instructions. Thats the case
for at least `xorg-server`. See its `debian/README.source`, below the
generic “how to use quilt” blurb.

View File

@ -0,0 +1,70 @@
Backports for squeeze
=====================
Cyril Brulebois <kibi@debian.org>
Birds-eye view
---------------
If one forgets about libraries and clients, a whole X stack boils down
to: the server itself, input and video drivers, libdrm, and mesa.
To keep things simple, the idea is to backport all of those to
`squeeze` through `squeeze-backports`, along with some of the
additional packages which might be involved (like `libxfont` or
`x11proto-fixes-dev`).
The backports were prepared so that its possible to upgrade the
`input-all` and `video-all` meta packages on `amd64` and `i386`. If
specific drivers (maintained by the X Strike Force) are wanted,
requesting them on the `debian-backports@` / `debian-x@` mailing lists
should do the trick. For other drivers, please contact the relevant
package maintainers.
Instructions
------------
The usual link:http://backports-master.debian.org/[backports instructions]
apply. But lets gather everything in a single place.
Add that to your `sources.list`:
----
deb http://backports.debian.org/debian-backports squeeze-backports main
----
Update your cache:
----
apt-get update
----
If youre interested in just upgrading the usual `mesa` packages:
----
apt-get install -t squeeze-backports libgl1-mesa-dri libgl1-mesa-glx
----
If you want the whole stack, we should distinguish between two
cases.
In the usual case, both the `xserver-xorg-input-all` and
`xserver-xorg-video-all` meta packages were installed, and pulled a
lot of packages, which should work for most users.
Specifying a few packages to upgrade should pull
everything from `squeeze-backports`.
----
apt-get install -t squeeze-backports xorg xserver-xorg xserver-xorg-core xserver-xorg-input-all xserver-xorg-video-all
apt-get install -t squeeze-backports libgl1-mesa-dri libgl1-mesa-glx
----
In case only the needed packages were installed, like the `synaptics`
input driver and the `intel` video driver, the following should be
sufficient:
----
apt-get install -t squeeze-backports xorg xserver-xorg xserver-xorg-core xserver-xorg-input-synaptics xserver-xorg-video-intel
apt-get install -t squeeze-backports libgl1-mesa-dri libgl1-mesa-glx
----
It is probably a very good idea to install the Linux kernel from
`squeeze-backports` as well. It is even required for the `nouveau`
video driver.

View File

@ -0,0 +1,46 @@
Upstream contacts
=================
:toc:
Cyril Brulebois <kibi@debian.org>
Getting announcements
---------------------
* Almost everything: `xorg-announce@lists.freedesktop.org`
* Mesa: `mesa-announce@lists.freedesktop.org`
_(Source: http://wiki.x.org/wiki/XorgMailingLists[XorgMailingLists])_
Developer lists
---------------
Almost everything:
* `xorg-devel@lists.freedesktop.org` — doc:
http://wiki.x.org/wiki/Development/Documentation/SubmittingPatches[SubmittingPatches]
— module maintainers:
http://cgit.freedesktop.org/xorg/doc/xorg-docs/tree/MAINTAINERS[MAINTAINERS]
Driver-specific:
* ATI: `xorg-driver-ati@lists.x.org`
* Intel: `intel-gfx@lists.freedesktop.org` — doc:
http://intellinuxgraphics.org/how_to_report_bug.html[How to file a good bug report]
* Nouveau: `nouveau@lists.freedesktop.org`
* VMMouse & VMWare: `thellstrom@vmware.com` — source:
http://wiki.x.org/wiki/vmware[vmware wikipage]
Other:
* DRM: `dri-devel@lists.freedesktop.org`
* Mesa: `mesa-dev@lists.freedesktop.org`
* Pixman: `pixman@lists.freedesktop.org`
* Wayland: `wayland-devel@lists.freedesktop.org`
* XCB: `xcb@lists.freedesktop.org`
* XKeyboardConfig/xkb-data: `xkb@listserv.bat.ru` — source:
http://www.freedesktop.org/wiki/Software/XKeyboardConfig/Development[XKeyboardConfig]
_(Source: http://wiki.x.org/wiki/XorgMailingLists[XorgMailingLists])_

View File

@ -0,0 +1,17 @@
Upstream features
=================
Cyril Brulebois <kibi@debian.org>
Lets collect links where one can learn more about features. It might
make sense to ask permission to (re)use those and merge them into this
package, in case the hosting sites go offline.
Multitouch/touchpads
--------------------
Touchpad features, by Peter Hutterer: +
→ http://who-t.blogspot.com/2010/06/incomplete-roundup-of-touchpad-features.html
What multitouch really is about, by Peter Hutterer: +
→ http://who-t.blogspot.com/2010/10/thoughts-on-linux-multitouch.html

8
xsf-docs/xsf.css Normal file
View File

@ -0,0 +1,8 @@
@import url("asciidoc-xhtml11.css");
h1 {
background-image: url("xsf.svg");
background-repeat: no-repeat;
background-position: center right;
background-size: auto 95%;
}

BIN
xsf-docs/xsf.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

234
xsf-docs/xsf.svg Normal file
View File

@ -0,0 +1,234 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="80"
height="80"
id="svg2958"
version="1.1"
inkscape:version="0.47 r22583"
sodipodi:docname="attempt3.svg">
<defs
id="defs2960">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective2966" />
<inkscape:perspective
id="perspective2940"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective3239"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<linearGradient
inkscape:collect="always"
xlink:href="#LO"
id="linearGradient3224"
gradientUnits="userSpaceOnUse"
x1="319.20822"
y1="235.14877"
x2="657.65295"
y2="269.49396" />
<linearGradient
id="LO"
gradientUnits="userSpaceOnUse"
x1="319.20822"
y1="235.14877"
x2="657.65295"
y2="269.49396">
<stop
style="stop-color:#e54c18"
offset="0"
id="stop3094" />
<stop
style="stop-color:#fec350"
offset="1"
id="stop3096" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#LO"
id="linearGradient3284"
gradientUnits="userSpaceOnUse"
x1="319.20822"
y1="235.14877"
x2="657.65295"
y2="269.49396" />
<linearGradient
inkscape:collect="always"
xlink:href="#LO"
id="linearGradient3291"
gradientUnits="userSpaceOnUse"
x1="319.20822"
y1="235.14877"
x2="657.65295"
y2="269.49396" />
<linearGradient
inkscape:collect="always"
xlink:href="#LO"
id="linearGradient3300"
gradientUnits="userSpaceOnUse"
x1="319.20822"
y1="235.14877"
x2="657.65295"
y2="269.49396" />
<linearGradient
inkscape:collect="always"
xlink:href="#LO"
id="linearGradient3306"
gradientUnits="userSpaceOnUse"
x1="319.20822"
y1="235.14877"
x2="657.65295"
y2="269.49396" />
<linearGradient
inkscape:collect="always"
xlink:href="#LO"
id="linearGradient3309"
gradientUnits="userSpaceOnUse"
x1="319.20822"
y1="235.14877"
x2="657.65295"
y2="269.49396"
gradientTransform="matrix(0.33444317,0,0,0.33444317,160.14506,391.84518)" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="57.251616"
inkscape:cy="2.651303"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="666"
inkscape:window-height="756"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0" />
<metadata
id="metadata2963">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-288.5803,-423.06919)">
<rect
id="rect3105"
height="0"
width="0.16891931"
y="465.94339"
x="406.15314"
style="opacity:0.40740739;fill:#000cff" />
<g
id="g3375"
transform="matrix(0.61835866,0,0,0.61835866,129.38048,171.50702)">
<path
id="path3102"
d="m 274.54934,522.51286 37.15573,-48.57995 -38.25252,-53.41491 24.58638,0.0204 30.48048,42.00033 -45.57461,59.9741 -8.39546,0 z m 72.72393,0.0343 -30.27005,-42.07244 45.95411,-60.00228 8.18775,0 -37.30736,48.80915 38.02231,53.26557 -24.58676,0 z" />
<g
i:rgbTrio="#4F008000FFFF"
i:dimmedPercent="50"
i:layer="yes"
id="Layer_1"
transform="matrix(1.2459517,0,0,0.63116303,267.96832,440.28054)">
<g
id="g2900">
<path
id="path2902"
d="m 51.986,57.297 c -1.797,0.025 0.34,0.926 2.686,1.287 0.648,-0.506 1.236,-1.018 1.76,-1.516 -1.461,0.358 -2.948,0.366 -4.446,0.229"
i:knockout="Off"
style="fill:#d70751" />
<path
id="path2904"
d="m 61.631,54.893 c 1.07,-1.477 1.85,-3.094 2.125,-4.766 -0.24,1.192 -0.887,2.221 -1.496,3.307 -3.359,2.115 -0.316,-1.256 -0.002,-2.537 -3.612,4.546 -0.496,2.726 -0.627,3.996"
i:knockout="Off"
style="fill:#d70751" />
<path
id="path2906"
d="m 65.191,45.629 c 0.217,-3.236 -0.637,-2.213 -0.924,-0.978 0.335,0.174 0.6,2.281 0.924,0.978"
i:knockout="Off"
style="fill:#d70751" />
<path
id="path2908"
d="m 45.172,1.399 c 0.959,0.172 2.072,0.304 1.916,0.533 1.049,-0.23 1.287,-0.442 -1.916,-0.533"
i:knockout="Off"
style="fill:#d70751" />
<path
id="path2910"
d="M 47.088,1.932 46.41,2.072 47.041,2.016 47.088,1.932"
i:knockout="Off"
style="fill:#d70751" />
<path
id="path2912"
d="m 76.992,46.856 c 0.107,2.906 -0.85,4.316 -1.713,6.812 l -1.553,0.776 c -1.271,2.468 0.123,1.567 -0.787,3.53 -1.984,1.764 -6.021,5.52 -7.313,5.863 -0.943,-0.021 0.639,-1.113 0.846,-1.541 -2.656,1.824 -2.131,2.738 -6.193,3.846 L 60.16,65.878 C 50.142,70.591 36.226,61.251 36.409,48.507 c -0.107,0.809 -0.304,0.607 -0.526,0.934 -0.517,-6.557 3.028,-13.143 9.007,-15.832 5.848,-2.895 12.704,-1.707 16.893,2.197 -2.301,-3.014 -6.881,-6.209 -12.309,-5.91 -5.317,0.084 -10.291,3.463 -11.951,7.131 -2.724,1.715 -3.04,6.611 -4.227,7.507 -1.597,11.737 3.004,16.808 10.787,22.773 1.225,0.826 0.345,0.951 0.511,1.58 -2.586,-1.211 -4.954,-3.039 -6.901,-5.277 1.033,1.512 2.148,2.982 3.589,4.137 -2.438,-0.826 -5.695,-5.908 -6.646,-6.115 4.203,7.525 17.052,13.197 23.78,10.383 -3.113,0.115 -7.068,0.064 -10.566,-1.229 -1.469,-0.756 -3.467,-2.322 -3.11,-2.615 9.182,3.43 18.667,2.598 26.612,-3.771 2.021,-1.574 4.229,-4.252 4.867,-4.289 -0.961,1.445 0.164,0.695 -0.574,1.971 2.014,-3.248 -0.875,-1.322 2.082,-5.609 l 1.092,1.504 c -0.406,-2.696 3.348,-5.97 2.967,-10.234 0.861,-1.304 0.961,1.403 0.047,4.403 1.268,-3.328 0.334,-3.863 0.66,-6.609 0.352,0.923 0.814,1.904 1.051,2.878 -0.826,-3.216 0.848,-5.416 1.262,-7.285 -0.408,-0.181 -1.275,1.422 -1.473,-2.377 0.029,-1.65 0.459,-0.865 0.625,-1.271 -0.324,-0.186 -1.174,-1.451 -1.691,-3.877 0.375,-0.57 1.002,1.478 1.512,1.562 -0.328,-1.929 -0.893,-3.4 -0.916,-4.88 -1.49,-3.114 -0.527,0.415 -1.736,-1.337 -1.586,-4.947 1.316,-1.148 1.512,-3.396 2.404,3.483 3.775,8.881 4.404,11.117 -0.48,-2.726 -1.256,-5.367 -2.203,-7.922 0.73,0.307 -1.176,-5.609 0.949,-1.691 C 83.519,18.706 76.074,10.902 69.225,7.24 70.063,8.007 71.121,8.97 70.741,9.121 67.335,7.093 67.934,6.935 67.446,6.078 64.671,4.949 64.489,6.169 62.651,6.08 57.421,3.306 56.413,3.601 51.6,1.863 l 0.219,1.023 c -3.465,-1.154 -4.037,0.438 -7.782,0.004 -0.228,-0.178 1.2,-0.644 2.375,-0.815 -3.35,0.442 -3.193,-0.66 -6.471,0.122 0.808,-0.567 1.662,-0.942 2.524,-1.424 -2.732,0.166 -6.522,1.59 -5.352,0.295 -4.456,1.988 -12.37,4.779 -16.811,8.943 l -0.14,-0.933 c -2.035,2.443 -8.874,7.296 -9.419,10.46 l -0.544,0.127 c -1.059,1.793 -1.744,3.825 -2.584,5.67 -1.385,2.36 -2.03,0.908 -1.833,1.278 -2.724,5.523 -4.077,10.164 -5.246,13.97 0.833,1.245 0.02,7.495 0.335,12.497 -1.368,24.704 17.338,48.69 37.785,54.228 2.997,1.072 7.454,1.031 11.245,1.141 -4.473,-1.279 -5.051,-0.678 -9.408,-2.197 -3.143,-1.48 -3.832,-3.17 -6.058,-5.102 l 0.881,1.557 c -4.366,-1.545 -2.539,-1.912 -6.091,-3.037 l 0.941,-1.229 C 28.751,98.334 26.418,96.056 25.78,94.795 l -1.548,0.061 c -1.86,-2.295 -2.851,-3.949 -2.779,-5.23 l -0.5,0.891 c -0.567,-0.973 -6.843,-8.607 -3.587,-6.83 -0.605,-0.553 -1.409,-0.9 -2.281,-2.484 l 0.663,-0.758 c -1.567,-2.016 -2.884,-4.6 -2.784,-5.461 0.836,1.129 1.416,1.34 1.99,1.533 -3.957,-9.818 -4.179,-0.541 -7.176,-9.994 L 8.412,66.472 C 7.926,65.74 7.631,64.945 7.24,64.165 l 0.276,-2.75 C 4.667,58.121 6.719,47.409 7.13,41.534 7.415,39.145 9.508,36.602 11.1,32.614 l -0.97,-0.167 c 1.854,-3.234 10.586,-12.988 14.63,-12.486 1.959,-2.461 -0.389,-0.009 -0.772,-0.629 4.303,-4.453 5.656,-3.146 8.56,-3.947 3.132,-1.859 -2.688,0.725 -1.203,-0.709 5.414,-1.383 3.837,-3.144 10.9,-3.846 0.745,0.424 -1.729,0.655 -2.35,1.205 4.511,-2.207 14.275,-1.705 20.617,1.225 7.359,3.439 15.627,13.605 15.953,23.17 l 0.371,0.1 c -0.188,3.802 0.582,8.199 -0.752,12.238 l 0.908,-1.912"
i:knockout="Off"
style="fill:#d70751" />
<path
id="path2914"
d="m 32.372,59.764 -0.252,1.26 c 1.181,1.604 2.118,3.342 3.626,4.596 -1.085,-2.118 -1.891,-2.993 -3.374,-5.856"
i:knockout="Off"
style="fill:#d70751" />
<path
id="path2916"
d="m 35.164,59.654 c -0.625,-0.691 -0.995,-1.523 -1.409,-2.352 0.396,1.457 1.207,2.709 1.962,3.982 l -0.553,-1.63"
i:knockout="Off"
style="fill:#d70751" />
<path
id="path2918"
d="m 84.568,48.916 -0.264,0.662 c -0.484,3.438 -1.529,6.84 -3.131,9.994 1.77,-3.328 2.915,-6.968 3.395,-10.656"
i:knockout="Off"
style="fill:#d70751" />
<path
id="path2920"
d="M 45.527,0.537 C 46.742,0.092 48.514,0.293 49.803,0 48.123,0.141 46.451,0.225 44.8,0.438 l 0.727,0.099"
i:knockout="Off"
style="fill:#d70751" />
<path
id="path2922"
d="m 2.872,23.219 c 0.28,2.592 -1.95,3.598 0.494,1.889 1.31,-2.951 -0.512,-0.815 -0.494,-1.889"
i:knockout="Off"
style="fill:#d70751" />
<path
id="path2924"
d="M 0,35.215 C 0.563,33.487 0.665,32.449 0.88,31.449 -0.676,33.438 0.164,33.862 0,35.215"
i:knockout="Off"
style="fill:#d70751" />
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB