fcitx與禁用觸摸板

1.1 起因

ubuntu自帶 打字時禁用觸摸板 對fcitx輸入法并不起作用, 不帶鼠標(biāo)時很容易誤觸.

1.2 解決方法

wiki.archlinux.org找到了相應(yīng)解決辦法:

# -i 2 打字時禁用觸摸板2s
# -d 以后臺daemon方式執(zhí)行
syndaemon -i 2 -d

但是總不能每次登陸后,都在shell中敲命令吧,所以需要登陸后自動執(zhí)行
有一下幾種方式可以實現(xiàn)自啟動:

#!/bin/bash
# file: 自啟動腳本
_pgrep="/usr/bin/pgrep"
found="true"
$_pgrep syndaemon >/dev/null || { found="false" ;  echo "not found"; }

if [[ "$found" == "false" ]]; then
    /usr/bin/syndaemon -i 2 -d

接下來就簡單了,將上腳本保存,并利用chmod改為可執(zhí)行后, 在~/.bashrc 執(zhí)行即可.

#假設(shè)該腳本為 ~/.config/autostart/mystart.sh
. ~/.config/autostart/mystart.sh

不足之處:
.bashrc不是開機(jī)生效的,需要你打開shell才生效

1.3 守護(hù)進(jìn)程(還沒成功...找工作中,挖坑待填)

1.3.1 將下面的 syndaemon.cpp 編譯成可執(zhí)行文件復(fù)制到/etc/init.d/下面
1.3.2 執(zhí)行 update-rc.d命令, 可以參數(shù)設(shè)置可以參考這里這里

//file syndaemon.cpp
#include <unistd.h>  //execl
#include <fcntl.h>   //open, dup2
#include <signal.h>
#include <stdlib.h>  //exit
#include <stdio.h>   //perror
int daemonize();
const char syndaemon[]="/usr/bin/syndaemon";
int main(int argc, char* argv[])
{
    /*
     * 由于syndaemon 本身就是一個守護(hù)進(jìn)程所以不需要 
     * 調(diào)用daemonize函數(shù)了
     * 寫著里主要是方便回顧知識
     * */
    //daemonize();
    execl(syndaemon, "-i 2","-d");
    exit(1);
}
int daemonize()
{
    int fd;
    struct sigaction sa;
    switch (fork()) {
    case -1:
        return (-1);
    case 0:
        break;
    default:
        //close parent process;
        //let child process become orphan process;
        _exit(EXIT_SUCCESS);
    }
    //成為 leader of session and of process group
    setsid();
    /*
     * Ensure future opens won't allocate controlling TTYs.
     */
     
    sa.sa_handler = SIG_IGN;
    sigemptyset(&sa.sa_mask);
    sa.sa_flags = 0;
    if (sigaction(SIGHUP, &sa, NULL) < 0)
        exit(1);
    if (setsid() == -1) 
        return (-1);
    if ((fd = open("/dev/null", O_RDWR)) != -1) {
        close(STDIN_FILENO); //close stdin 0
        //將stdout 重定義到 fd
        if(dup2(fd, STDOUT_FILENO) < 0) {
            perror("dup2 stdout");
            return (-1);
        }
        //將 stderr 重定義到 fd
        //不會記錄error log
        if(dup2(fd, STDERR_FILENO) < 0) {
            perror("dup2 stderr");
            return (-1);
        }
    }
    return (0);
}
#!/bin/bash
syndaemon -i 2 -d
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容