感謝 ubuntu-tw 論壇的 peterho Ident 在此文 10.10 中文輸入問題
提到的解決方法

修改 /usr/share/ibus-table/engine/table.py
在 96-106 行可以看到透過 get_chinese_mode() 決定預設語系
做法是從 LC_CTYPE 或 LANG 來判斷

 96         # self._chinese_mode: the candidate filter mode,
 97         #   0 is simplify Chinese
 98         #   1 is traditional Chinese
 99         #   2 is Big charset mode, but simplify Chinese first
100         #   3 is Big charset mode, but traditional Chinese first
101         #   4 is Big charset mode.
102         # we use LC_CTYPE or LANG to determine which one to use
103         self._chinese_mode = self._config.get_value (
104                 self._config_section,
105                 "ChineseMode",
106                 self.get_chinese_mode())

108     def get_chinese_mode (self):
109         '''Use LC_CTYPE in your box to determine the _chinese_mode'''
110         try:
111             if os.environ.has_key('LC_CTYPE'):
112                 __lc = os.environ['LC_CTYPE'].split('.')[0].lower()
113             else:
114                 __lc = os.environ['LANG'].split('.')[0].lower()
115
116             if __lc.find('zh_') == 0:
117                 # this is a zh_XX
118                 __place =__lc.split('_')[1]
119                 if __place == 'cn':
120                     return 0
121                 else:
122                     return 1
123             else:
124                 if self.db._is_chinese:
125                     # if IME declare as Chinese IME
126                    
# return 0
127                     # change for traditional chinese
128                     return 1
129                 else:
130                     return -1
131         except:
132             return -1

get_chinese_mode() 定義可看出當 __lc 不是 zh_ 開頭時,
會執行第 126 行 return 0
在第 97 行寫到 0 代表是簡體,故預設語系就會是簡體
要改成繁體就把 0 改成 1,如第 128 行是小弟修改後的程式
接著重開輸入法就 OK
若覺得輸入法怪怪的,像小弟會有輸入法工具列不見的問題就只好重開機

smalldd 發表在 痞客邦 留言(1) 人氣()

一直以來覺得奇怪,為什麼vmware player上裝的OS其3D acceleration功能都不會動
直到最近才知道原因
原來vmware player支援3D acceleration的前題是顯示晶片必須支援OpenGL的S3TC (S3 Texture compression)功能
相關資訊: VMware and 3D acceleration on Intel graphics

這功能在intel driver預設是關閉的(包含linux & windows)
相關資訊: intel OpenGL* Settings Guide

在ubuntu打開OpenGL的S3TC需要一套件driconf
>sudo apt-get install driconf

接著開敫「System->Preferences->3D Acceleration」
在「Image Quality」頁面找「Enable S3TC texture compression even if software support is not available」
選「Yes」打開此功能

再來執行vmware player內的windows guest OS
看「Help->Message Log」是否還有,
「3D graphics acceleration will be disabled. This computer does not have a 3D graphics system supported by VMware Player.」
正常情況下應該是沒有這段訊息

smalldd 發表在 痞客邦 留言(0) 人氣()

原來windows上好用的免空下載器JDownloader也有PPA repository可用

JDownloader 官網

PPA repository
可用下列命令增加此套件庫
>sudo add-apt-repository ppa:jd-team/jdownloader

smalldd 發表在 痞客邦 留言(0) 人氣()

使用fopen開啟檔案時
有時會發生無法開啟的錯誤

此時可以在程式碼中加入
extern int errno;
取得開檔之錯誤代碼

之後可用strerror()取得錯誤代碼之錯誤訊息
char *err_str = strerror(errno);
印出錯誤訊息就可以知道問題在哪

smalldd 發表在 痞客邦 留言(1) 人氣()

通常在 Open Source 的原始碼資料夾下會看到 AAAA.5 BBBB.8

副檔名1~8代表的意義可查詢 man 的說明檔得到
>man man

若要直接讀取說明檔檔案
>man -l <file>
例:
>man -l AAAA.5

smalldd 發表在 痞客邦 留言(1) 人氣()


PSI = lb/in2


1 kg = 2.204622622 lb
0.45359237 kg = 1 lb
1 in = 2.54 cm
0.3937 in = 1 cm


1 kg/cm2 = 2.204622622 lb/cm2 = 14.223400202 lb/in2
2 kg/cm2 = 28.446800403 lb/in2
1.9 kg/cm2 = 27.024460384 lb/in2

smalldd 發表在 痞客邦 留言(0) 人氣()

1 噸 = 3024 kcal =12000 BTU = 3.517 kW

1 kW = 860 kcal

smalldd 發表在 痞客邦 留言(1) 人氣()

1.
引用標頭檔 linux/ioctl.h
#include <linux/ioctl.h>
若 kernel 內有定義 CONFIG_COMPAT 這 defined constant
表示 ioctl 在 相容模式 (compatibility mode)
要多引用 linux/compat.h
#include <linux/compat.h>

 

2.
建立 defined constants

2.1.
建立等會建立 ioctl command 要用的 type,類似 prefix
#define TYPE 's'

#define TYPE '<char>'
<char>: 任何字元用以當 command 的 type

2.2.
建立 ioctl command
例:
#define SM_GET     _IOR(TYPE, 1, int)
#define SM_SET     _IOW(TYPE, 2, int)

定義 command 可用的 macro
_IO(<cmd type>, <number>);
_IOR(<cmd type>, <number>, <arg type>);
_IOW(<cmd type>, <number>, <arg type>);
_IOWR(<cmd type>, <number>, <arg type>);

_IO         讀寫:寫到 proc 用 arg,回傳值是要讀取的資料
_IOR      讀:把 arg 當指標從 kernel 取得資料,配合 copy_to_user() 和 put_user()
_IOW     寫:把 arg 當指標傳資料至 kernel,配合 copy_from_user() 和 get_user()
_IOWR  讀寫:把arg 當指標進行讀取與寫入,copy_from_user() 和 get_user()
                           copy_to_user() 和 put_user()

<cmd type>: 被 shift 至 <number> 前端,類似 prefix
<number>: 第幾個 command
<arg type>: 參數的型態,像是 int, long,...

2.3.
撰寫 ioctl
例:
int smalldd_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
{
    int ret = 0;
    int value = 1;
    struct data data;

    switch(cmd)
    {
        case SM_GET:
            put_user(value, arg);

            OR
            copy_to_user((void *)arg, &data, sizeof(struct data));
            break;
        case SM_SET:
            get_user(value, arg);

            OR
            copy_from_user((void *)arg, &data, sizeof(struct data));
            break;
        default:
            break;
    }

    return ret;
}

若有定義 CONFIG_COMPAT 這 defined constant
要多撰寫相容模式的 compat_ioctl
例:
#ifdef CONFIG_COMPAT
long smalldd_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
    return smalldd_ioctl(NULL, file, cmd, arg);
}
#endif

2.4.
建立 file_operations
順道加入 compat_ioctl
例:
struct file_operations smalldd_fops
{
    .owner = THIS_MODULE,
    .ioctl = smalldd_ioctl,
#ifdef CONFIT_COMPAT
    .compat_ioctl = smalldd_compat_ioctl,
#endif
}

 

3.
user space 的程式透過 ioctl 與 kernel space 交換資料
例:
int fd = 0;
int ret = 0;
int data = 0;  // 參數

fd = open(<file>, O_RDWR);
if(fd >= 0)
{
    ret = ioctl(fd, SM_SET, &data);  // 傳資料到 kernel space
    ret = ioctl(fd, SM_GET, &data);  //
從 kernel 取得資料
 
}

smalldd 發表在 痞客邦 留言(0) 人氣()

1.
修改 /etc/gdm/gdm.conf
>sudo vi /etc/gdm/gdm.conf

找到 AllowRoot=false
false 改成 true

 

2.
重啟 gdm
>sudo serivce gdm restart

smalldd 發表在 痞客邦 留言(0) 人氣()

假設寫了一支 smalldd 的程式是一支以網路核心功能開發的程式

1.
把 smalldd.h 檔放到 include/net/

 

2.
把 smalldd.c 檔放到 net/core/
smalldd.c 檔內引用 smalldd.h 的寫法 #include <net/smalldd.h>

 

3.
編輯 net/Kconfig
>vim net/Kconfig

endif   # if NET 前加入

config SMALLDD
    bool "smalldd network function"
    default y
    help
        If you say Y, smallddd can help you.

說明
config <tag>
    bool "<title>"
    default <default>
    help
        <description>

<tag>: 一個專用的標籤,在 gcc 編譯時就會有一個定義 CONFIG_<tag>
<title>: 程式的標題
<default>: 預設設定要不要一起編譯
<description>: 程式的說明

 

4.
編輯 Makefile
>vim net/core/Makefile

加入
obj-$(CONFIG_SMALLDD) += smalldd.o

 

5.
設定 kernel 編譯設定檔
>make menuconfig

因為預設是要加入編譯
所以進入直接存檔就好

 

6.
編譯 kernel 吧!!!!

smalldd 發表在 痞客邦 留言(0) 人氣()