<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Kanru&#039;s 探險日誌 &#187; xorg</title>
	<atom:link href="http://blog.kanru.info/archives/tag/xorg/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.kanru.info</link>
	<description>當發現美好的事物時，所要做的第一件事，就是把它分享給所有人</description>
	<lastBuildDate>Sun, 23 May 2010 09:51:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>The good old xorg.conf and the new xorg.conf.d</title>
		<link>http://blog.kanru.info/archives/732</link>
		<comments>http://blog.kanru.info/archives/732#comments</comments>
		<pubDate>Thu, 08 Apr 2010 15:38:12 +0000</pubDate>
		<dc:creator>kanru</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[xorg]]></category>

		<guid isPermaLink="false">http://blog.kanru.info/?p=732</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p>自從 Xorg xserver 宣佈要放棄使用 hal 的自動設定機制後，Xorg 開發者們就開始討論與實做各種可能的 config backend。最後定案的是在 Linux 上直接使用 udev 來偵測 input device，在這個後端實做的早期也想把設定的工作一起做在 udev rules 裡，但顯然這樣的做法是有其侷限的。很多人說這只是把 hal 的 .fdi 換個寫法放到 udev rules 裡罷了，同樣是對 user 極不友善的做法，而且使用 udev 在非 Linux 的平台就不能用了。</p>

<p>最後一個很聰明的辦法是把 auto probe 與 config 這兩個行為分開，讓 udev 只管找到新的裝置，config 則集中放在 xorg.conf.d 中。xorg.conf.d 中設定檔的格式和 xorg.conf 是一樣的，因此不但 code 可以重用，使用者也不用學新的語法，其他平台則可以用不同的 backend。</p>

<p>因為 udev backend 是以 Debian Developer &#8211; Julien Cristau 為主開發的, Debian 很早就可以使用 udev backend 了，最近 Debian 更從 xorg-xserver 1.8 backport 了 xorg.conf.d 的修改，所以設定方式又不太一樣了。(大概只有 Debian 是這樣一改再改吧，其他 distro 應是無痛升級)</p>

<p>參考 xorg.conf(5)，X 在啟動時會去找</p>

<p><pre class="brush: plain;">
           /etc/X11/&lt;cmdline&gt;
           /usr/etc/X11/&lt;cmdline&gt;
           /etc/X11/$XORGCONFIG
           /usr/etc/X11/$XORGCONFIG
           /etc/X11/xorg.conf-4
           /etc/X11/xorg.conf
           /etc/xorg.conf
           /usr/etc/X11/xorg.conf.&lt;hostname&gt;
           /usr/etc/X11/xorg.conf-4
           /usr/etc/X11/xorg.conf
           /usr/lib/X11/xorg.conf.&lt;hostname&gt;
           /usr/lib/X11/xorg.conf-4
           /usr/lib/X11/xorg.conf
</pre></p>

<p>這些地方的設定檔，因此設定不用全放在一個檔案裡了。這也是近來很多 daemon 要支援多重設定檔常用的方法，可以讓 vendor 或 distro 的設定與 user 的設定可以各自獨立出來。</p>

<p>接下來我們有興趣的地方是 <code>InputClass</code> 這個新的 Section，就是它讓我們可以設定隨插即用裝置。</p>

<p><pre class="brush: plain;">
           Section &quot;InputClass&quot;
               Identifier  &quot;name&quot;
               entries
               ...
               options
               ...
           EndSection
</pre></p>

<p>就像 xorg.conf 內其他 Section 一樣，<code>Identifier</code> 是必需的，我們可以用各種 Match rule 去比對裝置的特性並用 Option 加以設定。所有的 InputClass 都可以被其之後的 InputClass 取代，因此使用者可以用新設定檔取代系統的設定。</p>

<p>現在可以用的 Match rule 有</p>

<p><pre class="brush: plain;">
MatchProduct        &quot;matchproduct&quot;
MatchVendor         &quot;matchvendor&quot;
MatchDevicePath     &quot;matchdevice&quot;
MatchTag            &quot;matchtag&quot;
MatchIsKeyboard     &quot;bool&quot;
MatchIsPointer      &quot;bool&quot;
MatchIsJoystick     &quot;bool&quot;
MatchIsTablet       &quot;bool&quot;
MatchIsTouchpad     &quot;bool&quot;
MatchIsTouchscreen  &quot;bool&quot;
</pre></p>

<p>前四個可以用來 match 特定的裝置名稱、路徑，其他的則可以用來 match 一般的裝置特性如滑鼠、鍵盤等。如我要設定 touchpad 的話，可以用</p>

<div>
<pre class="brush: plain;">
# /etc/X11/xorg.conf.d/10-synaptics.conf
Section &quot;InputClass&quot;
    Identifier &quot;Synaptics&quot;
    MatchIsTouchpad &quot;true&quot;

    Option &quot;TapButton1&quot; &quot;1&quot;
    Option &quot;HorizEdgeScroll&quot; &quot;true&quot;
EndSection
</pre>
</div>

<p>來設定。再加上 X 會自己找到可以用的 driver，和<a href="http://blog.kanru.info/archives/251">以前</a><a href="http://blog.kanru.info/archives/279">的</a><a href="http://blog.kanru.info/archives/339">方法</a>比起來，是不是簡單很多呢？ <img src='http://blog.kanru.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kanru.info/archives/732/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Xorg 1.5 XInput Hotplug</title>
		<link>http://blog.kanru.info/archives/339</link>
		<comments>http://blog.kanru.info/archives/339#comments</comments>
		<pubDate>Sat, 04 Oct 2008 11:58:46 +0000</pubDate>
		<dc:creator>kanru</dc:creator>
				<category><![CDATA[爬網探險]]></category>
		<category><![CDATA[hal]]></category>
		<category><![CDATA[udev]]></category>
		<category><![CDATA[xorg]]></category>

		<guid isPermaLink="false">http://blog.kanru.info/?p=339</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p>之前寫過 <a href="http://blog.kanru.info/archives/279">Xorg 1.4 XInput Hotplug</a>，提到 xorg, evdev 可以利用 hal 自動偵測硬體載入 driver 與設定參數，而即將 release 的 Xorg 1.5 又新增了一些可以在 hal policy 裡設定的參數：</p>

<ul>
<li>input.x11_driver 可以設定這個 device 要使用的 driver，對應到 xorg.conf 的 Driver 選項</li>
<li>input.x11_options.<option name> 則可以設定任意可以用 xorg.conf 裡的 Option 設定的選項 (除了 Option Device，因為 hal 已經知道是甚麼 device)</option></li>
</ul>

<p>如今我的 /etc/hal/fdi/policy/10-x11-input.fdi 長這樣：</p>

<p><pre lang="xml">
< ?xml version="1.0" encoding="ISO-8859-1"?>
<deviceinfo version="0.2">
  <device>
      <match key="info.capabilities" contains="input.mouse">
          <merge key="input.x11_driver" type="string">mouse</merge>
          </match><match key="/org/freedesktop/Hal/devices/computer:system.kernel.name"
              string="Linux">
              <merge key="input.x11_driver" type="string">evdev</merge>
          </match>
      </device></deviceinfo></pre></p>

<pre><code>&lt;match key="info.capabilities" contains="input.keys"&gt;
    &lt;merge key="input.x11_options.XkbRules" type="string"&gt;base&lt;/merge&gt;
    &lt;!-- If we're using Linux, we use evdev by default (falling back to
    keyboard otherwise). --&gt;
    &lt;merge key="input.x11_driver" type="string"&gt;keyboard&lt;/merge&gt;
    &lt;merge key="input.x11_options.XkbModel" type="string"&gt;pc105&lt;/merge&gt;
    &lt;match key="/org/freedesktop/Hal/devices/computer:system.kernel.name"
        string="Linux"&gt;
        &lt;merge key="input.x11_driver" type="string"&gt;evdev&lt;/merge&gt;
        &lt;merge key="input.x11_options.XkbModel" type="string"&gt;evdev&lt;/merge&gt;
    &lt;/match&gt;
    &lt;merge key="input.x11_options.XkbVariant" type="string" /&gt;
    &lt;merge key="input.x11_options.XkbLayout" type="string"&gt;dvorak&lt;/merge&gt;
    &lt;merge key="input.x11_options.XkbOptions" type="string"&gt;ctrl:nocaps&lt;/merge&gt;
&lt;/match&gt;
&lt;match key="info.capabilities" contains="input.touchpad"&gt;
    &lt;merge key="input.x11_driver" type="string"&gt;synaptics&lt;/merge&gt;
    &lt;merge key="input.x11_options.Protocol" type="string"&gt;auto-dev&lt;/merge&gt;
    &lt;merge key="input.x11_options.SHMConfig" type="string"&gt;on&lt;/merge&gt;
    &lt;merge key="input.x11_options.LeftEdge" type="string"&gt;1100&lt;/merge&gt;
    &lt;merge key="input.x11_options.RightEdge" type="string"&gt;5800&lt;/merge&gt;
    &lt;merge key="input.x11_options.TopEdge" type="string"&gt;1600&lt;/merge&gt;
    &lt;merge key="input.x11_options.BottomEdge" type="string"&gt;4200&lt;/merge&gt;
    &lt;merge key="input.x11_options.HorizEdgeScroll" type="string"&gt;on&lt;/merge&gt;
&lt;/match&gt;
</code></pre>

<p>

</p>

<p>我的 /etc/X11/xorg.conf 只剩下必要的：</p>

<p><pre lang="plain">
Section "Device"
    Identifier  "i915gm"
    Driver      "intel"
EndSection</pre></p>

<p>Section "Screen"
    Identifier  "Default Screen"
    Device      "i915gm"
    DefaultDepth    24
    SubSection "Display"
        Modes       "1280x768"
        Virtual     1280 1792
    EndSubSection
EndSection
</p>

<p>X 啟動的 log 如下：</p>

<p><pre lang="plain">
(II) config/hal: Adding input device SynPS/2 Synaptics TouchPad
(II) LoadModule: "synaptics"</pre></p>

<p>(II) Loading /usr/lib/xorg/modules/input//synaptics_drv.so
(II) Module synaptics: vendor="X.Org Foundation"
        compiled for 1.4.99.906, module version = 0.15.0
        Module class: X.Org XInput Driver
        ABI class: X.Org XInput driver, version 2.1
(II) Synaptics touchpad driver version 0.15.0
(<strong>) Option "Device" "/dev/input/event8"
(</strong>) Option "SHMConfig" "on"
(<strong>) Option "LeftEdge" "1100"
(</strong>) Option "RightEdge" "5800"
(<strong>) Option "TopEdge" "1600"
(</strong>) Option "BottomEdge" "4200"
(<strong>) Option "HorizEdgeScroll" "on"
(--) SynPS/2 Synaptics TouchPad touchpad found
(</strong>) SynPS/2 Synaptics TouchPad: always reports core events
(II) XINPUT: Adding extended input device "SynPS/2 Synaptics TouchPad" (type: MOUSE)
(--) SynPS/2 Synaptics TouchPad touchpad found
</p>

<p>未來各 distro 可以提供預設的 fdi 檔，常見的 input device 都可以隨插即用 <img src='http://blog.kanru.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kanru.info/archives/339/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>X-Server 1.5.0 very sluggish</title>
		<link>http://blog.kanru.info/archives/333</link>
		<comments>http://blog.kanru.info/archives/333#comments</comments>
		<pubDate>Thu, 18 Sep 2008 00:56:13 +0000</pubDate>
		<dc:creator>kanru</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[爬網探險]]></category>
		<category><![CDATA[exa]]></category>
		<category><![CDATA[xorg]]></category>

		<guid isPermaLink="false">http://blog.kanru.info/?p=333</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p>最近升到 xorg 1.5.0，某些操作 (terminal 快速更新) 會使 xserver 佔用非常多 cpu，看來是<a href="http://lists.freedesktop.org/archives/xorg/2008-September/038534.html">這個</a>問題</p>

<blockquote>
  <p>Working on it &#8230; right now it looks like:</p>
  
  <ul>
  <li><p>XShm pixmaps got accidentally reenabled in the course of 
  Adam&#8217;s changes</p></li>
  <li><p>Someone (maybe GTK, having tracked it down yet) is taking advantage<br />
  of that by creating a shared pixmap and using it as the source for
  a composite operation.</p></li>
  <li><p>That is not handled well in EXA and triggers migration of the
  destination back to system memory. (*)</p></li>
  </ul>
  
  <p>&#8211; Owen</p>
  
  <p>(*) One of the many cases where we&#8217;d be better off creating temporaries
  in video memory to avoid migration.</p>
</blockquote>

<p>測測..</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kanru.info/archives/333/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Xorg 1.4 XInput Hotplug</title>
		<link>http://blog.kanru.info/archives/279</link>
		<comments>http://blog.kanru.info/archives/279#comments</comments>
		<pubDate>Thu, 15 Nov 2007 18:55:38 +0000</pubDate>
		<dc:creator>kanru</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[evdev]]></category>
		<category><![CDATA[xorg]]></category>
		<category><![CDATA[xwindow]]></category>

		<guid isPermaLink="false">http://blog.kanru.info/archives/279</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p>Xorg 1.4 開始支援 hal based 的 xinput hotplug，也就是說滑鼠跟鍵盤這些設備可以拔來拔去而不用在 xorg.conf 裡面設定，再加上越來越多 driver 可以 auto-configuration，xorg.conf 裡面的東西越來越少了。</p>

<p>xorg 的 evdev driver 是利用 linux kernel 的 evdev 支援，來使用滑鼠、鍵盤等多種設備，我的 Logitech V450 就一定要用 evdev 才能支援所有的按鍵。</p>

<p>無奈 Debian Sid 中的 Xorg 以及 evdev 都非常的新，但是一些升級的配套措施跟文件跟不上，導致最近發生許多問題，相關的 bug report 有 <a href="http://bugs.debian.org/443292">#443292</a>、<a href="http://bugs.debian.org/442316">#442316</a>。</p>

<p>今天終於把滑鼠鍵盤都設定好了，關鍵在於 hal 的設定跟 gnome 的設定。</p>

<p>首先是設定 hal，因為 hal 預設只設定了使用 evdev，但是沒有顧慮到非使用 us layout 的人，導致升級之後鍵盤 layout 大亂，目前暫時取消了這項設定，我們可以從 /usr/share/doc/hal/examples/10-x11-input.fdi 把設定撿回 
/etc/hal/fdi/policy/，內容如下：</p>

<p><pre>
&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;
&lt;deviceinfo version="0.2"&gt;
  &lt;device&gt;
    &lt;!-- FIXME: Support tablets too. --&gt;
    &lt;match key="info.capabilities" contains="input.mouse"&gt;
      &lt;merge key="input.x11_driver" type="string"&gt;mouse&lt;/merge&gt;
      &lt;match key="/org/freedesktop/Hal/devices/computer:system.kernel.name"
             string="Linux"&gt;
        &lt;merge key="input.x11_driver" type="string"&gt;evdev&lt;/merge&gt;
      &lt;/match&gt;
    &lt;/match&gt;</pre></p>

<pre><code>&amp;lt;match key="info.capabilities" contains="input.keys"&amp;gt;
  &amp;lt;!-- If we're using Linux, we use evdev by default (falling back to
       keyboard otherwise). --&amp;gt;
  &amp;lt;merge key="input.x11_driver" type="string"&amp;gt;keyboard&amp;lt;/merge&amp;gt;
  &amp;lt;match key="/org/freedesktop/Hal/devices/computer:system.kernel.name"
         string="Linux"&amp;gt;
    &amp;lt;merge key="input.x11_driver" type="string"&amp;gt;evdev&amp;lt;/merge&amp;gt;
    &amp;lt;merge key="input.xkb.rules" type="string"&amp;gt;xorg&amp;lt;/merge&amp;gt;
    &amp;lt;merge key="input.xkb.model" type="string"&amp;gt;evdev&amp;lt;/merge&amp;gt;
    &amp;lt;merge key="input.xkb.layout" type="string"&amp;gt;dvorak&amp;lt;/merge&amp;gt;
  &amp;lt;/match&amp;gt;
&amp;lt;/match&amp;gt;
</code></pre>

<p>&lt;/device&gt;
&lt;/deviceinfo&gt;
</p>

<p>其中關於鍵盤 layout、model、rules 的設定是我加上去的。滑鼠不需更動即可 hotplug 使用。</p>

<p>接下來關鍵的地方是，如果你使用 gnome 的話，記得把 keyboard model 改成 evdev，如圖：</p>

<p><a href="http://www.flickr.com/photos/kanru/2035334916/" title="gnome keyboard setting by Kanru Chen, on Flickr"><img src="http://farm3.static.flickr.com/2072/2035334916_e7d5594109_o.png" width="497" height="497" alt="gnome keyboard setting" /></a></p>

<p>最後，xorg.conf 就可以清乾淨了：</p>

<p><pre>
Section "Device"
        Identifier      "intel"
        Driver          "intel"
        Option          "AccelMethod"     "XAA"
        Option          "XAANoOffScreenPixmaps" "True"
EndSection</pre></p>

<p>Section "InputDevice"
        Identifier      "Synaptics Touchpad"
        Driver          "synaptics"
        Option          "CorePointer"
        Option          "Device"                "/dev/input/event9"
        Option          "Protocol"              "auto-dev"
        Option          "SHMConfig"             "on"
        Option          "LeftEdge"              "1100"
        Option          "RightEdge"             "5800"
        Option          "TopEdge"               "1600"
        Option          "BottomEdge"    "4200"
        Option          "HorizEdgeScroll" "on"
EndSection</p>

<p>Section "Monitor"
        Identifier      "Configured Monitor"
        Option          "DPMS"
        DisplaySize     330 200
EndSection</p>

<p>Section "Screen"
        Identifier      "Default Screen"
        Monitor         "Configured Monitor"
        DefaultDepth    24
        SubSection "Display"
                Modes           "1280x768" "1024x768"
        EndSubSection
EndSection
</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kanru.info/archives/279/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
