2013年12月22日 星期日

SONY DUALSHOCK©4 Wireless Controller & Debian Wheezy

已經有很多消息指出 PS4 的手把相容於 PC,不論是走 USB 線還是藍牙都可以正常工作。雖然說部份的功能可能還沒辦法透過 HID 支援啦。

在 Debian Wheezy 上要使用 DS4 手把流程如下:

  1. DS4 按下【PS】+【SHARE】,手把會閃白燈。
  2. Gnome 會提示你要不要授權配對,點 always 以後成功配對。
  3. 執行 sudo hidd --connect btaddr 手動啟用 HID 裝置。(需要裝 bluez-compat,DS4 走 Bluetooth 2.1 + EDR)
    hidd search 會找不到手把,所以要自己啟用。啟用前請確定藍牙已經確實連線,DS4 燈號會持續亮著。

2013年11月6日 星期三

Xlib 防止 gnome-screensaver 啟用

一般來說看影片或者像是用搖桿、手把玩遊戲的時候鍵盤滑鼠都不會有輸入,所以應用程式通常會自動停用螢幕保護程式,以防影片看到一半、電動打到一半被中斷。

在 X window 環境下要實作這個功能,可以每隔一段時間執行以下的 code:
DPMSForceLevel(display, DPMSModeOn);
XResetScreenSaver(display);
XFlush(display);

間隔時間可以取 DPMS 設定或者 xscreensaver、gnome-screensaver 的 timeout:
DPMSGetTimeouts(display, &standby, &suspend, &offtime);
XGetScreenSaver(display, &timeout, &interval, &prefer_blanking, &allow_exposures);

2013年10月24日 星期四

gcc 控制符號的可見性

在某些情況下我們會想要把一些函數或變數隱藏起來,不要讓它們出現在 symbol table 裡。


static

將全域變數或函數宣告成 local,只有該 object file 內的 function 看得到它。有 static 的話會無視 visibility 屬性宣告。


__attribute__((visibility ("hidden")))

全域變數或函數宣告預設是宣告成 global,加上 visibility 屬性後可見性設定為隱藏。編譯期間會標示成 global,但名稱會變成 .hidden function。最後連結產生 shared object 的時候該 symbol 不會出現在 dynamic symbol table,但是會在 symbol table 中出現且標示為 local。如果要做到完全隱藏,產生 shared object 以後要 strip 拔掉 symbol table。


-fvisibility=hidden

同 __attribute__((visibility ("hidden"))),不過這是從編譯器的命令列參數,等於是設定預設的 visibility。

2013年10月17日 星期四

DEB 套件 control 檔 template

Package: 
Version: 
Architecture: 
Maintainer: 
Installed-Size: 
Depends:
Pre-Depends: 
Recommends: 
Suggests: 
Breaks: 
Replaces: 
Provides: 
Section: 
Priority: 
Multi-Arch: 
Homepage: 
Description: 

2013年10月15日 星期二

hplip plugin 備用 mirror

hplip 安裝、設定印表機的時候會到 www.openprinting.org 去抓 hplip-x.xx.x-plugin.run。萬一這個網站掛了,可以到 http://hplipopensource.com/hplip-web/plugin/ 抓一樣的檔案來用。

Debian Wheezy 收錄的是 3.12.6

2013年10月4日 星期五

xboxdrv 模擬 XBOX360 手把

為了對付某些只吃 XBOX360 手把的遊戲(Runner2),我們需要 xboxdrv 將我們的 xpad 相容手把偽裝成正牌 XBOX360 手把。

$ sudo xboxdrv --silent --type xbox360 --device-by-id 046d:c21f --mimic-xpad --detach-kernel-driver

046d:c21f 是 Logitech F710 Wireless Gamepad,請自行代換其 USB device ID(用 lsusb 查)。

2013年10月1日 星期二

tsocks 掛 SOCKS proxy

雖然不是所有的網路程式都有內建 SOCKS proxy 支援,但我們可以透過 tsocks 讓任何程式走 SOCKS proxy 進行連線。

一般 distro 應該都有附,設定也只需要改 /etc/tsocks.conf、指定 SOCKS server 而已。

執行程式的時候只要在前面加個 LD_PRELOAD=/usr/lib/libtsocks.so 讓連結器優先載入 tsocks 的 shared object,就可以讓目標程式使用指定的 SOCKS proxy 連線。