解決方式:安裝一個假的 FB Messenger來騙過檢查機制
1. 下載假的Messenger.apk 檔案在此,下載後記得解壓縮
2. 請在手機上進入 設定 ->安全性 -> 不明的來源 打勾
3. 如果你已經裝了 FB Messenger,請先解除安裝,避免不必要的意外
4. 如果你可以用或會用 adb 指令的就不解釋了
不會用的,可以透過電腦把 Messenger.apk 丟進手機
再透過手機上的任何一種檔案管理程式找到檔案,
點點它,手機會自動幫你執行安裝
2014年12月2日 星期二
2014年7月24日 星期四
AOSP repo init error part2: The requested URL returned error: 406
當 repo init -u repo init -u https://android.googlesource.com/plform/manifest
或 某天在 repo sync 時發現 似乎是可以work
但中間就是會夾雜一些 request fatal error
甚至是看到 The requested URL returned error: 406 這一串明顯就是有鬼的錯誤訊息
請試試下面方式
1. 連至 https://www.googlesource.com/new-password
並使用你的google account登入,如果本來就有登入,那就可以省去登入的步驟
2. 會得到一組 Login for Git 的 username 和 password
3. 新增或在原本就有的 ~/.netrc 裡加入網頁提供給你的類似下面兩行文字
machine android.googlesource.com login <YOUR_USERNAME> password <YOUR_PASSWORD>
machine android-review.googlesource.com login <YOUR_USERNAME> password <YOUR_PASSWORD>
4. 更改 repo init 的 url
repo init -u https://android.googlesource.com/a/platform/manifest
5. repo sync
結束~
或 某天在 repo sync 時發現 似乎是可以work
但中間就是會夾雜一些 request fatal error
甚至是看到 The requested URL returned error: 406 這一串明顯就是有鬼的錯誤訊息
請試試下面方式
1. 連至 https://www.googlesource.com/new-password
並使用你的google account登入,如果本來就有登入,那就可以省去登入的步驟
2. 會得到一組 Login for Git 的 username 和 password
3. 新增或在原本就有的 ~/.netrc 裡加入網頁提供給你的類似下面兩行文字
machine android.googlesource.com login <YOUR_USERNAME> password <YOUR_PASSWORD>
machine android-review.googlesource.com login <YOUR_USERNAME> password <YOUR_PASSWORD>
4. 更改 repo init 的 url
repo init -u https://android.googlesource.com/a/platform/manifest
5. repo sync
結束~
2014年5月26日 星期一
Android kernel startup entry point
source code path:
/kernel/arch/arm/kernel/head.S
1. Just called from the decompressor code.
2. Precondition:
If we link kernel @ 0xC0008000, we call this at __pa(0xc008000)
/kernel/arch/arm/kernel/head.S
1. Just called from the decompressor code.
2. Precondition:
- MMU = off
- D-cache = off
- I-cache = don't care.
- r0 = 0
- r1 = machine nr,
- r2 = atags or dtb pointer
If we link kernel @ 0xC0008000, we call this at __pa(0xc008000)
2014年4月28日 星期一
到底什麼是 Android軟體研發工程師
繼上次 什麼是 Android BSP Engineer? 一文後
我最近又經常要解釋我的工作內容……
而我經常解釋了老半天,對方還是不懂……
其實我當初面試時,我只問了幾個問題,來猜測我現在的工作
1、要寫AP嗎?
2、只會用到Java? 還是也會用到C++?
3、JNI是不是歸我們這邊負責?
4、是不是BSP那邊以外的都歸我們管?
我當初面試的職缺,在104上頭寫的是:Android軟體研發工程師
工作內容
1. Android Framework維護與客製化開發研究:
i. Multimedia、DRM、HLS、Streaming、Wifi Display、DLNA、Graphics/OpenGL
ii. Core/System Service、System UI、Debugging Mechanism、Auto Run Mechanism
iii. Network/Connectivity、NFC、Operator Requirement、SS/DSDS、STK
2. Qualcomm, MTK Android Linux平台效能與穩定度調校。
3. Google Android Phone(GMS/CTS/GTS)、DLNA、通訊方面的認證整合。
4. Android AP與Widget程式設計開發。
5. Android前瞻新技術研究開發。
6. 3rd party軟體整合。
這職稱當然是比 Android BSP Engineer 直覺許多,
因為一看就知道 搞 Android 的 軟體工程師
但沒有看到工作內容的人通常都是同樣的問題:「所以你會寫APP囉?」
我搖頭表示不會。
「蛤? 不會? 那你的工作到底在做什麼?」
「我們這裡大致區分為BSP和ASD,以前我是BSP,現在我是ASD。
AP使用途中出了問題,當然就由我們來負責,但那些AP不見得是我們寫的。
當然我們內部還會區分幾個Function team,我待的team負責Stability
所以有時候會對大部份的Issue進行初步分析,
只要你手機用到一半,它裝死當掉、自動重開機等任何非你預期之行為。
亦或是它頓頓的、突然關掉你正在看的FB,告訴你:對不起,Facebook已停止。
或是想開啟某支程式,點一下後,等了又等,最後冒出,對不起,XX程式無反應。
這一類你可能會想問候它母親的"疑難雜症",全部都會跑來我們team……」
「哦……然後要解掉?」
「通常進行完分析,有些可能是底層問題,要轉到BSP Team 去;
有些像是多媒體相關,則們部裡有負責的function team,他們會更熟這一塊,
再去做進一步分析。剩下在我們自己身上的,能解掉的不多…,
我們可能會上AOSP找solution,找到的機會不多就是了…」
同是軟體工程師的朋友,還問我一天要寫多少code?
我回答:幾乎沒在寫code……
「那你們到底在幹嘛?」
「在……吹口琴、玩玉簫、泡泡妞、看小書、占卜星相、觀人眉宇…」(被毆)
本來 ASD 在公司內部中文翻做應用軟體設計=> Application Software Design
但我覺得實際上比較像是 Analysis Supply/Submit Debug …XD
Analysis:看log來猜測案發當時的行兇過程…
Supply/Submit: 整合第三方程式之類的,或是從AOSP找patch,放進codebase裡,然後上code
Debug:就是找出問題發生的根本原因/程式碼所在…
套一句我Leader說的話:我們 Team需要的人其實寫code能力不用很強,我們比較需要debug能力。
我們真的大部份的時間都在"看code" 而不是"寫code" XD
我最近又經常要解釋我的工作內容……
而我經常解釋了老半天,對方還是不懂……
其實我當初面試時,我只問了幾個問題,來猜測我現在的工作
1、要寫AP嗎?
2、只會用到Java? 還是也會用到C++?
3、JNI是不是歸我們這邊負責?
4、是不是BSP那邊以外的都歸我們管?
我當初面試的職缺,在104上頭寫的是:Android軟體研發工程師
工作內容
1. Android Framework維護與客製化開發研究:
i. Multimedia、DRM、HLS、Streaming、Wifi Display、DLNA、Graphics/OpenGL
ii. Core/System Service、System UI、Debugging Mechanism、Auto Run Mechanism
iii. Network/Connectivity、NFC、Operator Requirement、SS/DSDS、STK
2. Qualcomm, MTK Android Linux平台效能與穩定度調校。
3. Google Android Phone(GMS/CTS/GTS)、DLNA、通訊方面的認證整合。
4. Android AP與Widget程式設計開發。
5. Android前瞻新技術研究開發。
6. 3rd party軟體整合。
這職稱當然是比 Android BSP Engineer 直覺許多,
因為一看就知道 搞 Android 的 軟體工程師
但沒有看到工作內容的人通常都是同樣的問題:「所以你會寫APP囉?」
我搖頭表示不會。
「蛤? 不會? 那你的工作到底在做什麼?」
「我們這裡大致區分為BSP和ASD,以前我是BSP,現在我是ASD。
AP使用途中出了問題,當然就由我們來負責,但那些AP不見得是我們寫的。
當然我們內部還會區分幾個Function team,我待的team負責Stability
所以有時候會對大部份的Issue進行初步分析,
只要你手機用到一半,它裝死當掉、自動重開機等任何非你預期之行為。
亦或是它頓頓的、突然關掉你正在看的FB,告訴你:對不起,Facebook已停止。
或是想開啟某支程式,點一下後,等了又等,最後冒出,對不起,XX程式無反應。
這一類你可能會想問候它母親的"疑難雜症",全部都會跑來我們team……」
「哦……然後要解掉?」
「通常進行完分析,有些可能是底層問題,要轉到BSP Team 去;
有些像是多媒體相關,則們部裡有負責的function team,他們會更熟這一塊,
再去做進一步分析。剩下在我們自己身上的,能解掉的不多…,
我們可能會上AOSP找solution,找到的機會不多就是了…」
同是軟體工程師的朋友,還問我一天要寫多少code?
我回答:幾乎沒在寫code……
「那你們到底在幹嘛?」
「在……吹口琴、玩玉簫、泡泡妞、看小書、占卜星相、觀人眉宇…」(被毆)
本來 ASD 在公司內部中文翻做應用軟體設計=> Application Software Design
但我覺得實際上比較像是 Analysis Supply/Submit Debug …XD
Analysis:看log來猜測案發當時的行兇過程…
Supply/Submit: 整合第三方程式之類的,或是從AOSP找patch,放進codebase裡,然後上code
Debug:就是找出問題發生的根本原因/程式碼所在…
套一句我Leader說的話:我們 Team需要的人其實寫code能力不用很強,我們比較需要debug能力。
我們真的大部份的時間都在"看code" 而不是"寫code" XD
2014年4月17日 星期四
正確的的郵局局號 / 帳號檢查方式
網路上有些流傳的郵局局號/帳號檢查方式是錯的......
網路上流傳的是:
不論局號/帳號
N1 N2 N3 N4 N5 N6 :流水號。 N7:檢碼。
運算規則: (N1×2 + N2×3 + N3×4 + N4×5 + N5×6 + N6×7) ÷ 11餘A.
若A為10, 則N7=0; 若否, N7=A.
但我拿我及幾個手上有的郵局局號帳號做驗證發現根本就不對……
假設我的郵局局號 及 帳號 共 14 碼 為
ABCDEFG HIJKLMN
則
前 7 碼為郵局局號,其中 G 為檢查碼;
後 7 碼為郵局帳號,其中 N 為檢查碼。
檢查公式應該是
( 2*A + 3*B + 4*C + 5*D + 6*E + 7*F + G ) mod 11 = 0
( 2*H + 3*I + 4*J + 5*K + 6*L + 7*M + N ) mod 10 = 0
拿個局號驗證
竹北郵局(新竹三十三支)(舊局號)006133-9(新局號)087000-3
( 2*0 + 3*0 + 4*6 + 5*1 + 6*3 + 7*3 + G ) mod 11 = 0
( 68 + G ) 要可以被 11 整除 => G = 9
( 2*0 + 3*8 + 4*7 + 5*0 + 6*0 + 7*0 + G ) mod 11 = 0
( 52 + G ) 要可以被 11 整除 => G = 3
帳號部份也拿幾個驗證
我的: 013384-4
( 2*0 + 3*1 + 4*3 + 5*3 + 6*8 + 7*4 + N ) mod 10 = 0
( 106 + N ) 要可以被 11 整除 => N = 4
家人剛好跟我是一起辦的: 013383-1
( 2*0 + 3*1 + 4*3 + 5*3 + 6*8 + 7*3 + N ) mod 10 = 0
( 99 + N ) 要可以被 11 整除 => N = 1
為什麼錯誤的版本一直在流傳?
網路上流傳的是:
不論局號/帳號
N1 N2 N3 N4 N5 N6 :流水號。 N7:檢碼。
運算規則: (N1×2 + N2×3 + N3×4 + N4×5 + N5×6 + N6×7) ÷ 11餘A.
若A為10, 則N7=0; 若否, N7=A.
但我拿我及幾個手上有的郵局局號帳號做驗證發現根本就不對……
假設我的郵局局號 及 帳號 共 14 碼 為
ABCDEFG HIJKLMN
則
前 7 碼為郵局局號,其中 G 為檢查碼;
後 7 碼為郵局帳號,其中 N 為檢查碼。
檢查公式應該是
( 2*A + 3*B + 4*C + 5*D + 6*E + 7*F + G ) mod 11 = 0
( 2*H + 3*I + 4*J + 5*K + 6*L + 7*M + N ) mod 10 = 0
拿個局號驗證
竹北郵局(新竹三十三支)(舊局號)006133-9(新局號)087000-3
( 2*0 + 3*0 + 4*6 + 5*1 + 6*3 + 7*3 + G ) mod 11 = 0
( 68 + G ) 要可以被 11 整除 => G = 9
( 2*0 + 3*8 + 4*7 + 5*0 + 6*0 + 7*0 + G ) mod 11 = 0
( 52 + G ) 要可以被 11 整除 => G = 3
帳號部份也拿幾個驗證
我的: 013384-4
( 2*0 + 3*1 + 4*3 + 5*3 + 6*8 + 7*4 + N ) mod 10 = 0
( 106 + N ) 要可以被 11 整除 => N = 4
家人剛好跟我是一起辦的: 013383-1
( 2*0 + 3*1 + 4*3 + 5*3 + 6*8 + 7*3 + N ) mod 10 = 0
( 99 + N ) 要可以被 11 整除 => N = 1
為什麼錯誤的版本一直在流傳?
2014年3月19日 星期三
Shell script Auto factory reset and adb logcat
這個Script 用來重覆紀錄 factory reset 的 log
Script 存成 .sh 檔 之後,記得 chmod +x 給予執行權限
例如我把檔名叫做 factory_reset.sh
$ chmod +x factory_reset.sh
要用的時候的也很簡單~
$ ./factory_reset.sh | tee log.txt
會把所有輸出在螢幕上的文字同時存成log.txt
#!/bin/bash
# for loop 1~10000, i++
for (( i=0; i<100000; i=i+1 ))
do
echo "Run $i times"
adb root
# sleep 一下 (單位是秒)
sleep 5
# 清除 /data 下所有資料
adb shell wipe data
# 沒有東西的話,清除時間不會太久,反正也是要睡一下
sleep 10
# 清完後reboot, 就是factory reset了
adb reboot
# sleep 一下隨意
sleep 20
adb wait-for-device
# 後面加個 & ,等等才可以中止adb logcat
adb logcat &
# 這邊sleep比較久是因為factory reset後的第一次開機時間都比較長
# 當然也是每家手機時間長短不一,請自行調整
sleep 300
# Kill 剛才的 adb logcat (就是模擬按 Ctrl+C )
kill $!
done
--
P.S. 這個供開發使用,一般使用者手機若不能 adb root 不在此文解決範圍
Script 存成 .sh 檔 之後,記得 chmod +x 給予執行權限
例如我把檔名叫做 factory_reset.sh
$ chmod +x factory_reset.sh
要用的時候的也很簡單~
$ ./factory_reset.sh | tee log.txt
會把所有輸出在螢幕上的文字同時存成log.txt
#!/bin/bash
# for loop 1~10000, i++
for (( i=0; i<100000; i=i+1 ))
do
echo "Run $i times"
adb root
# sleep 一下 (單位是秒)
sleep 5
# 清除 /data 下所有資料
adb shell wipe data
# 沒有東西的話,清除時間不會太久,反正也是要睡一下
sleep 10
# 清完後reboot, 就是factory reset了
adb reboot
# sleep 一下隨意
sleep 20
adb wait-for-device
# 後面加個 & ,等等才可以中止adb logcat
adb logcat &
# 這邊sleep比較久是因為factory reset後的第一次開機時間都比較長
# 當然也是每家手機時間長短不一,請自行調整
sleep 300
# Kill 剛才的 adb logcat (就是模擬按 Ctrl+C )
kill $!
done
--
P.S. 這個供開發使用,一般使用者手機若不能 adb root 不在此文解決範圍
2014年3月12日 星期三
dvm_lock_sample @ Android event log
關於 Android event log 裡各個 log 格式定義在
android_codebase/system/core/logcat/event.logtags
那現在要來講的是 dvm_lock_sample
dvm_lock_sample 用來表示某process的某thread為了等另一個人釋放lock,而耗了多少ms
For example:
dvm_lock_sample: [system_server,1,ActivityManager,18285,ActivityStack.java,288,ActivityManagerService.java,13056,100]
dvm_lock_sample: [system_server,1,main,16710,ActivityManagerService.java,5760,-,13056,100]
dvm_lock_sample: [system_server,1,Binder_7,15333,ActivityManagerService.java,12911,-,13056,100]
dvm_lock_sample: [system_server,0,android.bg,108,ActivityManagerService.java,1731,-,13056,21]
在 system/core/logcat/event.logtags 裡可以看到
dvm_lock_sample (process|3),(main|1|5),(thread|3),(time|1|3),(file|3),(line|1|5),(ownerfile|3),(ownerline|1|5),(sample_percent|1|6)
這後面一長串是啥鬼? 請見該檔案上方…
# Tag numbers are decimal integers, from 0 to 2^31. (Let's leave the
# negative values alone for now.)
#
# Tag names are one or more ASCII letters and numbers or underscores, i.e.
# "[A-Z][a-z][0-9]_". Do not include spaces or punctuation (the former
# impacts log readability, the latter makes regex searches more annoying).
#
# Optionally, after the tag names can be put a description for the value(s)
# of the tag. Description are in the format
# (<name>|data type[|data unit])
# Multiple values are separated by commas.
#
# The data type is a number from the following values:
# 1: int
# 2: long
# 3: string
# 4: list
#
# The data unit is a number taken from the following list:
# 1: Number of objects
# 2: Number of bytes
# 3: Number of milliseconds
# 4: Number of allocations
# 5: Id
# 6: Percent
# Default value for data of type int/long is 2 (bytes).
對照一下 dvm_lock_sample…
(process|string),(main|int|id),(thread|string),(time|int|ms),(file|string),(line|int|id),(ownerfile|string),(ownerline|int|id),(sample_percent|int|%)
好吧,我知道還是有些亂…對照一下例子好了…
dvm_lock_sample: [system_server,1,ActivityManager,108,ActivityStack.java,288,-,13056,100]
(process|string) system_server (process name)
(main|int|id) 1 (yes)
(thread|string) ActivityManager (thread name)
(time|int|ms) 108 (lock time 單位:ms)
(file|string) ActivityStack.java (file name)
(line|int|id) 288 (對應 file 的行數)
(ownerfile|string) - (owner file name,- 表示和 file name 一樣)
(ownerline|int|id) 13056 (對應 owner file 的行數)
(sample_percent|int|%) 21 (lock time/500的百分比,佔用500ms以上皆為100%)
android_codebase/system/core/logcat/event.logtags
那現在要來講的是 dvm_lock_sample
dvm_lock_sample 用來表示某process的某thread為了等另一個人釋放lock,而耗了多少ms
For example:
dvm_lock_sample: [system_server,1,ActivityManager,18285,ActivityStack.java,288,ActivityManagerService.java,13056,100]
dvm_lock_sample: [system_server,1,main,16710,ActivityManagerService.java,5760,-,13056,100]
dvm_lock_sample: [system_server,1,Binder_7,15333,ActivityManagerService.java,12911,-,13056,100]
dvm_lock_sample: [system_server,0,android.bg,108,ActivityManagerService.java,1731,-,13056,21]
在 system/core/logcat/event.logtags 裡可以看到
dvm_lock_sample (process|3),(main|1|5),(thread|3),(time|1|3),(file|3),(line|1|5),(ownerfile|3),(ownerline|1|5),(sample_percent|1|6)
這後面一長串是啥鬼? 請見該檔案上方…
# Tag numbers are decimal integers, from 0 to 2^31. (Let's leave the
# negative values alone for now.)
#
# Tag names are one or more ASCII letters and numbers or underscores, i.e.
# "[A-Z][a-z][0-9]_". Do not include spaces or punctuation (the former
# impacts log readability, the latter makes regex searches more annoying).
#
# Optionally, after the tag names can be put a description for the value(s)
# of the tag. Description are in the format
# (<name>|data type[|data unit])
# Multiple values are separated by commas.
#
# The data type is a number from the following values:
# 1: int
# 2: long
# 3: string
# 4: list
#
# The data unit is a number taken from the following list:
# 1: Number of objects
# 2: Number of bytes
# 3: Number of milliseconds
# 4: Number of allocations
# 5: Id
# 6: Percent
# Default value for data of type int/long is 2 (bytes).
對照一下 dvm_lock_sample…
(process|string),(main|int|id),(thread|string),(time|int|ms),(file|string),(line|int|id),(ownerfile|string),(ownerline|int|id),(sample_percent|int|%)
好吧,我知道還是有些亂…對照一下例子好了…
dvm_lock_sample: [system_server,1,ActivityManager,108,ActivityStack.java,288,-,13056,100]
(process|string) system_server (process name)
(main|int|id) 1 (yes)
(thread|string) ActivityManager (thread name)
(time|int|ms) 108 (lock time 單位:ms)
(file|string) ActivityStack.java (file name)
(line|int|id) 288 (對應 file 的行數)
(ownerfile|string) - (owner file name,- 表示和 file name 一樣)
(ownerline|int|id) 13056 (對應 owner file 的行數)
(sample_percent|int|%) 21 (lock time/500的百分比,佔用500ms以上皆為100%)
2014年3月3日 星期一
快速設定fcitx內建的嘸蝦米輸入法,適用於 Ubuntu12.04 / Debian 7 以上版本
前陣子在套件庫裡發現了有個套件名稱叫 fcitx-table-boshiamy
裝來試試後,有些問題讓我用得不太方便,所以一直沒有分享給大家。
原以為是字碼表的問題,檢查了一下它內建的字碼表是正確的,
才懷疑是我自己在設定上的問題,總之好不容易解決了,
依照慣例,寫個簡單上手又容易成功的文章。
最近工作忙,就不勤勞的擷取操作畫面放上來,
若有問題可直接留言,我會收到E-mail通知的。
如果你很急,我又剛好都不去收信(有時我會這樣…Orz)
Google一下應該是找得到我個人FB,用FB傳訊息給我也是個方法。
但FB非朋友的訊息會被歸在另一個收件匣,也是有可能造成我沒即時看到…XD
(而且我曾發生因工作太累,連FB都可以一整週不去看...XD)
OK, 正文開始 。
Step 1. 請先安裝該套件 。
$sudo aptitude install fcitx-table-boshiamy (也可以使用apt-get)
相依性關係下,系統會告訴你它還會安裝fcitx fcitx-bin ......
反正就是給它裝下去
Step 2. 執行 im-config (一個選擇/設定輸入法的套件 ,剛剛應該有順帶幫你裝進去了)
$im-config
會跳出視窗,請把預設輸入法改成fcitx
Step 3. 嘸蝦米設定及輸入法全域設定
你可以使用圖形化介面,從Dash主目錄搜尋fcitx 或是在終端機下指令叫它出來
$ fcitx-configtool
但我好懶得貼圖~加上圖形化介面可以會一直改來改去,
之前也有發生過在GUI上更改的結果並沒有被寫入Configure file裡
所以,我們要修改下面2個檔案
$ vim ~/.config/fcitx/table/boshiamy.conf
$ vim ~/.config/fcitx/config
若不喜歡 vim,也可以使用gedit
$gedit ~/.config/fcitx/table/boshiamy.conf
$ gedit ~/.config/fcitx/table/boshimay.conf
一定要更改的有:拼音鍵,可能有預設是Z,一定要取消,
否則你會發覺Z怎麼跟失效沒啥兩樣
其他改了更方便的有輸入順序、碼表順序 (輸入法順序 )、快速鍵等
首先來取消拼音鍵,但不能取消使用拼音 (我就是這樣搞丟中文鍵盤配置的)
在 boshiamy.conf底下,你可能會需要關心以下參數
# 輸入順序 (幫你調整同字碼的排列順序,我不想要它幫忙變更)
# Available Value:
# AdjustNo
# AdjustFast
# AdjustFreq
AdjustOrder=AdjustFreq
# 碼表順序 (設為1即為預設第一個,設為0等於不使用)
Priority=1
# 使用拼音 (一定要使用拼音哦 )
# Available Value:
# True False
UsePY=True
# 拼音鍵 (但不要拼音鍵)
#PYKey=(開頭有#就等於沒有設定)
在 config file 底下,你可能會想要關心以下參數
[Hotkey]
# 切換啟用或非啟用輸入法
#TriggerKey=CTRL_SPACE(開頭有#就等於沒有設定)
# 只在用額外切換鍵取消啟動後才使用它進行切換
# Available Value:
# True False
#UseExtraTriggerKeyOnlyWhenUseItToInactivate=True(開頭有#就等於沒有設定)
# 額外的啟用輸入法快捷鍵
# Available Value:
# R_CTRL
# R_SHIFT
# L_SHIFT
# L_CTRL
# ALT_L_SHIFT
# ALT_R_SHIFT
# CTRL Both
# SHIFT Both
# L_ALT
# R_ALT
# ALT Both
# Left Super
# Right Super
# Super Both
# Ctrl+Left Super
# Ctrl+Right Super
# Super+Left Ctrl
# Super+Right Ctrl
# Disabled
# Custom
SwitchKey=R_CTRL
[Program]
# 在視窗間共享狀態 (我設成相同程式間共享)
# Available Value:
# No
# All
# PerProgram
ShareStateAmongWindow=PerProgram
# 預設輸入法狀態 (我設成預設啟動)
# Available Value:
# Inactive
# Active
DefaultInputMethodState=Active
[Appearance]
# 切換輸入法時顯示輸入法提示
# Available Value:
# True False
#ShowInputWindowAfterTriggering=True(開頭有#就等於沒有設定)
# 獲得輸入焦點並且輸入法變化時顯示輸入法提示
# Available Value:
# True False
ShowInputWindowWhenFocusIn=True
# 輸入法提示只在啟用狀態顯示
# Available Value:
# True False
#ShowInputWindowOnlyWhenActive=True(開頭有#就等於沒有設定)
Step 4. 執行/啟動輸入法 (如果你剛剛是啟動的,要重新啟動輸入法)
$fcitx
裝來試試後,有些問題讓我用得不太方便,所以一直沒有分享給大家。
原以為是字碼表的問題,檢查了一下它內建的字碼表是正確的,
才懷疑是我自己在設定上的問題,總之好不容易解決了,
依照慣例,寫個簡單上手又容易成功的文章。
最近工作忙,就不勤勞的擷取操作畫面放上來,
若有問題可直接留言,我會收到E-mail通知的。
如果你很急,我又剛好都不去收信(有時我會這樣…Orz)
Google一下應該是找得到我個人FB,用FB傳訊息給我也是個方法。
但FB非朋友的訊息會被歸在另一個收件匣,也是有可能造成我沒即時看到…XD
(而且我曾發生因工作太累,連FB都可以一整週不去看...XD)
OK, 正文開始 。
Step 1. 請先安裝該套件 。
$sudo aptitude install fcitx-table-boshiamy (也可以使用apt-get)
相依性關係下,系統會告訴你它還會安裝fcitx fcitx-bin ......
反正就是給它裝下去
Step 2. 執行 im-config (一個選擇/設定輸入法的套件 ,剛剛應該有順帶幫你裝進去了)
$im-config
會跳出視窗,請把預設輸入法改成fcitx
Step 3. 嘸蝦米設定及輸入法全域設定
你可以使用圖形化介面,從Dash主目錄搜尋fcitx 或是在終端機下指令叫它出來
$ fcitx-configtool
但我好懶得貼圖~加上圖形化介面可以會一直改來改去,
之前也有發生過在GUI上更改的結果並沒有被寫入Configure file裡
所以,我們要修改下面2個檔案
$ vim ~/.config/fcitx/table/boshiamy.conf
$ vim ~/.config/fcitx/config
若不喜歡 vim,也可以使用gedit
$gedit ~/.config/fcitx/table/boshiamy.conf
$ gedit ~/.config/fcitx/table/boshimay.conf
一定要更改的有:拼音鍵,可能有預設是Z,一定要取消,
否則你會發覺Z怎麼跟失效沒啥兩樣
其他改了更方便的有輸入順序、碼表順序 (輸入法順序 )、快速鍵等
首先來取消拼音鍵,但不能取消使用拼音 (我就是這樣搞丟中文鍵盤配置的)
在 boshiamy.conf底下,你可能會需要關心以下參數
# 輸入順序 (幫你調整同字碼的排列順序,我不想要它幫忙變更)
# Available Value:
# AdjustNo
# AdjustFast
# AdjustFreq
AdjustOrder=AdjustFreq
# 碼表順序 (設為1即為預設第一個,設為0等於不使用)
Priority=1
# 使用拼音 (一定要使用拼音哦 )
# Available Value:
# True False
UsePY=True
# 拼音鍵 (但不要拼音鍵)
#PYKey=(開頭有#就等於沒有設定)
在 config file 底下,你可能會想要關心以下參數
[Hotkey]
# 切換啟用或非啟用輸入法
#TriggerKey=CTRL_SPACE(開頭有#就等於沒有設定)
# 只在用額外切換鍵取消啟動後才使用它進行切換
# Available Value:
# True False
#UseExtraTriggerKeyOnlyWhenUseItToInactivate=True(開頭有#就等於沒有設定)
# 額外的啟用輸入法快捷鍵
# Available Value:
# R_CTRL
# R_SHIFT
# L_SHIFT
# L_CTRL
# ALT_L_SHIFT
# ALT_R_SHIFT
# CTRL Both
# SHIFT Both
# L_ALT
# R_ALT
# ALT Both
# Left Super
# Right Super
# Super Both
# Ctrl+Left Super
# Ctrl+Right Super
# Super+Left Ctrl
# Super+Right Ctrl
# Disabled
# Custom
SwitchKey=R_CTRL
[Program]
# 在視窗間共享狀態 (我設成相同程式間共享)
# Available Value:
# No
# All
# PerProgram
ShareStateAmongWindow=PerProgram
# 預設輸入法狀態 (我設成預設啟動)
# Available Value:
# Inactive
# Active
DefaultInputMethodState=Active
[Appearance]
# 切換輸入法時顯示輸入法提示
# Available Value:
# True False
#ShowInputWindowAfterTriggering=True(開頭有#就等於沒有設定)
# 獲得輸入焦點並且輸入法變化時顯示輸入法提示
# Available Value:
# True False
ShowInputWindowWhenFocusIn=True
# 輸入法提示只在啟用狀態顯示
# Available Value:
# True False
#ShowInputWindowOnlyWhenActive=True(開頭有#就等於沒有設定)
Step 4. 執行/啟動輸入法 (如果你剛剛是啟動的,要重新啟動輸入法)
$fcitx
訂閱:
文章 (Atom)