vim PageUp/Down一次捲動半頁

相信很多人用PageUp/Down用的很不習慣,因為一次跳的太多了,眼睛又懶的像下看,如果按上下鍵的話又很慢,這裡提供一種方式讓PageUp/Down鍵一次只捲動半頁。

$ vim .vimrc
map <PageUp> <C-u>
map <PageDown> <C-d>
imap <PageUp> <C-o><C-u>
imap <PageDown> <C-o><C-d>

選擇核心開機

編的核心不一定就好用,就能夠啟動系統,因此在bsd上installkernel之後,如果開機沒有辦法開起來的話沒關係,因為bsd在installkernel之後,系統會自動備份舊的核心放在/boot/kernel.old/所以我們可以選擇使用舊的核心來開機。

開機之後看到數字倒數選擇prompt就是選項6
會出現OK>的提示命令列

OK> unload
OK> boot kernel.old

這樣就可以使用舊的核心啟動

freebsd portupgrade patch

patch PACKAGESITE error

--- ./lib/uri/ftp.rb.orig 2008-04-19 14:56:22.000000000 +0300
+++ ./lib/uri/ftp.rb 2009-05-18 22:06:25.000000000 +0300
@@ -176,9 +176,9 @@
#
# This method will then return "/pub/ruby"
#
- def path
- return @path.sub(/^\//,'').sub(/^%2F/i,'/')
- end
+ #def path
+ # return @path.sub(/^\//,'').sub(/^%2F/i,'/')
+ #end

def to_s
save_path = nil

synaptics安裝與設定

今天拿到我的小筆電acer D250,跑了X但是我發現其滑鼠有夠難用的,這是因為在xorg+hal的架構下面,會將我的touchpad以ps2 mouse來設定,因此這邊要處理一些這樣的hack。

首先我要將ps2 mouse改成touchpad的軀動,另外就是讓xorg完全不管input的工作,直接讓hal全部接管,因為hal也許是未來硬體設定的一個趨勢,所以現在漸漸的xorg.conf很多人都不太理它,或是不寫都可以,因為現在的xorg已經聰明到可以自動的設定,但是設定還是有些問題。

* 首先安裝synaptics軀動程式

# cd /usr/ports/x11-drivers/xf86-input-synaptics
# make install clean

* synaptics設定檔與hal相關資訊

synaptics可以在xorg.conf設定,也可以透過hal來設定,如果要使用hal來設定的話,就要自己訂它的policy fdi檔,所以來看一下它所附上的11-x11-synaptics.fdi

# cat /usr/local/share/hal/fdi/policy/10osvendor/11-x11-synaptics.fdi
<?xml version="1.0" encoding="ISO-8859-1"?>
<deviceinfo version="0.2">
<device>
<match key="info.capabilities" contains="input.touchpad">
<merge key="input.x11_driver" type="string">synaptics</merge>
<!-- Arbitrary options can be passed to the driver using
the input.x11_options property since xorg-server-1.5. -->
<!-- EXAMPLES:
Switch on shared memory, enables the driver to be configured at runtime
<merge key="input.x11_options.SHMConfig" type="string">true</merge>

Maximum movement of the finger for detecting a tap
<merge key="input.x11_options.MaxTapMove" type="string">2000</merge>

Enable vertical scrolling when dragging along the right edge
<merge key="input.x11_options.VertEdgeScroll" type="string">true</merge>

Enable vertical scrolling when dragging with two fingers anywhere on the touchpad
<merge key="input.x11_options.VertTwoFingerScroll" type="string">true</merge>

Enable horizontal scrolling when dragging with two fingers anywhere on the touchpad
<merge key="input.x11_options.HorizTwoFingerScroll" type="string">true</merge>

If on, circular scrolling is used
<merge key="input.x11_options.CircularScrolling" type="string">true</merge>

For other possible options, check CONFIGURATION DETAILS in synaptics man page
-->
</match>
</device>
</deviceinfo>

之後我們在看一下透過lshal所顯示出來hal所辨識的touchpad的資訊
udi = '/org/freedesktop/Hal/devices/psm_0'
freebsd.device_file = '/dev/psm0' (string)
freebsd.driver = 'psm' (string)
freebsd.unit = 0 (0x0) (int)
info.addons = {'hald-addon-mouse-sysmouse'} (string list)
info.capabilities = {'input', 'input.mouse'} (string list)
info.category = 'input.mouse' (string)
info.parent = '/org/freedesktop/Hal/devices/atkbdc_0' (string)
info.product = 'PS/2 Mouse' (string)
info.subsystem = 'platform' (string)
info.udi = '/org/freedesktop/Hal/devices/psm_0' (string)
input.device = '/dev/psm0' (string)
input.x11_driver = 'mouse' (string)
platform.id = 'psm.0' (string)

從這裡我們可以看出,這根本沒有match,因為由hal看出它所吃到的軀動還是一樣為mouse,而不是synaptics,可以仔細的看一下上面synaptics.fdi根本是有問題的
match key="info.capabilities" contains="input.touchpad"
它透過match key來看是否是正確為input.touchpad,但是由lshal可以看出,這並不match
info.capabilities = {'input', 'input.mouse'} (string list)
因此這個hack最重要的就是讓policy正確的去設定hal所辨識到的硬體資訊

* 讓硬體支援synaptics軀動

# vim /boot/loader.conf
hw.psm.synaptics_support="1"


* 讓hal正確辨識touchpad並設定synaptics的相關設定

自己新增一個hal的policy,我命名為synaptics.fdi
# vim /usr/local/etc/hal/fdi/policy/synaptics.fdi
<?xml version="1.0" encoding="ISO-8859-1"?>
<deviceinfo version="0.2">
<device>
<match key="info.udi" string="/org/freedesktop/Hal/devices/psm_0">
<merge key="input.x11_driver" type="string">synaptics</merge>
<merge key="input.x11_options.Protocol" type="string">psm</merge>
<merge key="input.x11_options.Device" type="string">/dev/psm0</merge>
<merge key="input.x11_options.SHMConfig" type="string">false</merge>
<merge key="input.x11_options.LeftEdge" type="string">1200</merge>
<merge key="input.x11_options.RightEdge" type="string">5700</merge>
<merge key="input.x11_options.TopEdge" type="string">1200</merge>
<merge key="input.x11_options.BottomEdge" type="string">5000</merge>
<merge key="input.x11_options.VertEdgeScroll" type="string">true</merge>
<merge key="input.x11_options.HorizEdgeScroll" type="string">true</merge>
<merge key="input.x11_options.VertScrollDelta" type="string">300</merge>
<merge key="input.x11_options.HorizScrollDelta" type="string">300</merge>
<merge key="input.x11_options.MaxSpeed" type="string">0.15</merge>
<merge key="input.x11_options.MinSpeed" type="string">0.15</merge>
<merge key="input.x11_options.CircularScrolling" type="string">true</merge>
<merge key="input.x11_options.CircularPad" type="string">true</merge>
<merge key="input.x11_options.CircScrollTrigger" type="string">2</merge>
<merge key="input.x11_options.CircScrollDelta" type="string">0.3</merge>
</match>
</device>
</deviceinfo>

仔細看可以看出我已經修改了match的方式,直接使用udi直接指定hal所辨識到的硬體,用我的方式來設定,以上有幾個很重要部份一定要設定
input.x11_driver 設定為 synaptics
input.x11_options.Protocol 設定為 psm
input.x11_options.Device 設定為 /dev/psm0
在synaptics的man文件之前有特別提到linux, freebsd, unix等等所設定protocol不同,另外就是必須要指定它device是那一個。而上面所提到的其它設定都是自己使用touchpad自己tune出來的,最後會提供如何客製到自己方便使用。

完成上面以後,重啟hald

* 看lshal所顯示的資訊是否正確

udi = '/org/freedesktop/Hal/devices/psm_0'
freebsd.device_file = '/dev/psm0' (string)
freebsd.driver = 'psm' (string)
freebsd.unit = 0 (0x0) (int)
info.addons = {'hald-addon-mouse-sysmouse'} (string list)
info.capabilities = {'input', 'input.mouse'} (string list)
info.category = 'input.mouse' (string)
info.parent = '/org/freedesktop/Hal/devices/atkbdc_0' (string)
info.product = 'PS/2 Mouse' (string)
info.subsystem = 'platform' (string)
info.udi = '/org/freedesktop/Hal/devices/psm_0' (string)
input.device = '/dev/psm0' (string)
input.x11_driver = 'synaptics' (string)
input.x11_options.BottomEdge = '5000' (string)
input.x11_options.CircScrollDelta = '0.3' (string)
input.x11_options.CircScrollTrigger = '2' (string)
input.x11_options.CircularPad = 'true' (string)
input.x11_options.CircularScrolling = 'true' (string)
input.x11_options.Device = '/dev/psm0' (string)
input.x11_options.HorizEdgeScroll = 'true' (string)
input.x11_options.HorizScrollDelta = '300' (string)
input.x11_options.LeftEdge = '1200' (string)
input.x11_options.MaxSpeed = '0.15' (string)
input.x11_options.MinSpeed = '0.15' (string)
input.x11_options.Protocol = 'psm' (string)
input.x11_options.RightEdge = '5700' (string)
input.x11_options.SHMConfig = 'false' (string)
input.x11_options.TopEdge = '1200' (string)
input.x11_options.VertEdgeScroll = 'true' (string)
input.x11_options.VertScrollDelta = '300' (string)
platform.id = 'psm.0' (string)

由這裡已經可以看出,本來是由mouse軀動程式來支援的ps2 mouse,但是我們加了policy之後,換成透過synaptics來支援ps2 mouse,這已經達到我們的目地了,但是還差一點,因為xorg.conf裡面的input mouse section會和hal相互衝突,所以我們要讓hal全部接管的話,我們必須讓xorg完全不處理,而讓hal來處理。

* 修改xorg.conf

如果你都直接讓xorg自動來處理這個部份的話,那你這邊就不需要修改了,但是如果像我會讓xorg不判斷錯誤的話,我還是會自己來處理xorg.conf的設定檔部份,那麼我就必須要修改了。
Section "ServerLayout"
Identifier "X.org Configured"
Screen 0 "Screen0" 0 0
EndSection

Section "Files"
ModulePath "/usr/local/lib/xorg/modules/"
FontPath "/usr/local/lib/X11/fonts/misc/"
FontPath "/usr/local/lib/X11/fonts/TTF/"
FontPath "/usr/local/lib/X11/fonts/OTF/"
FontPath "/usr/local/lib/X11/fonts/artwiz-aleczapka-en/"
FontPath "/usr/local/lib/X11/fonts/TrueType/"
FontPath "/usr/local/lib/X11/fonts/Type1/"
FontPath "/usr/local/lib/X11/fonts/100dpi/"
FontPath "/usr/local/lib/X11/fonts/75dpi/"
EndSection

Section "Module"
Load "extmod"
Load "record"
Load "dbe"
Load "glx"
Load "dri"
Load "dri2"
EndSection

Section "Monitor"
Identifier "Monitor0"
VendorName "Monitor Vendor"
ModelName "Monitor Model"
EndSection

Section "Device"
Identifier "Card0"
Driver "intel"
VendorName "Intel Corporation"
BoardName "Mobile 945GME Express Integrated Graphics Controller"
BusID "PCI:0:2:0"
EndSection

Section "Screen"
Identifier "Screen0"
device "Card0"
Monitor "Monitor0"
SubSection "Display"
Viewport 0 0
Depth 24
EndSubSection
EndSection

由上面可以看出我把input的所有設定都移除了,這就是讓xorg不理會輸入裝置怎麼設定,而是直接交由hal來做自動設定,那麼我們剛剛上面所指定的hal policy只要正確的話,我們就可以正確的使用了。

* 個人化synaptics

先將policy中的input.x11_options.SHMConfig設為true這樣才可以透過share memory來溝通。

之後進入X下面之後開啟terminal輸入synclient來啟動設定程式,如果不知道如何使用的話,先去看一下man裡面對synclinet的設定說明。

以上搞定之後,建議把input.x11_options.SHMConfig再設為false這樣比較安全。

設定X的解析度

使用X的時候由於銀幕大小的不同,所以有的時候xserver沒有辦法正確的抓到銀幕的解析度,所以我們會看到怎麼字體那麼大又那麼難看,所以有必要自己手動設定。

* 使用startx

你可以在你的家目錄下面建立一個檔案叫.xserverrc加入一行
exec /usr/local/bin/X -dpi 85

之後直接使用startx就可以設定dpi為85*85了,這樣xserver就不會乩繪大小

* 使用登入管理器

如果你使用gdm, kdm, slim這些登入管理器的話,那你就需要在其登入管理器的設定檔裡面直接設定,像如果我使用的slim這套的話,它的設定檔在/usr/local/etc/slim.conf,直修改它要啟動xserver的設定值,也就是直接給予參數就行了
xserver_arguments   vt09 -dpi 85

之後直接登入在登入就搞定了

* 立即修改,不需重啟動X

如果你只是當下想要讓字型大一點的話,那可以透過xrandr這個指令來修改,xrandr是個非常強大的指令,除了可以改變解析度還可以輕易的就達到雙銀幕,但是必須要軀動程式和顯示卡支援才行
xrandr --dpi 85

之後重開視窗就行了,更高階的用法,可以參照一下man文件
在bsd上安裝firefox之後,我們常常會使用backspace來回到上一頁,不過剛剛安裝好的firefox它的backspace是沒有動作的,所以我們可以來設定一下讓backspace俱有回上一頁的功能。

開啟firefox之後在網址列直接輸入about:config之後會跳出一堆選項出來,我們可以使用搜尋的方式找出該設定。

尋找 browser.backspace_action 直接將它的值設為0

預設值是2,這表示不進行任何動作,如果是0,這表示反回上一頁的動作。