fcitx与禁用触摸板

1.1 起因

ubuntu自带 打字时禁用触摸板 对fcitx输入法并不起作用, 不带鼠标时很容易误触.

1.2 解决方法

wiki.archlinux.org找到了相应解决办法:

# -i 2 打字时禁用触摸板2s
# -d 以后台daemon方式执行
syndaemon -i 2 -d

但是总不能每次登陆后,都在shell中敲命令吧,所以需要登陆后自动执行
有一下几种方式可以实现自启动:

#!/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改为可执行后, 在~/.bashrc 执行即可.

#假设该脚本为 ~/.config/autostart/mystart.sh
. ~/.config/autostart/mystart.sh

不足之处:
.bashrc不是开机生效的,需要你打开shell才生效

1.3 守护进程(还没成功...找工作中,挖坑待填)

1.3.1 将下面的 syndaemon.cpp 编译成可执行文件复制到/etc/init.d/下面
1.3.2 执行 update-rc.d命令, 可以参数设置可以参考这里这里

//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 本身就是一个守护进程所以不需要 
     * 调用daemonize函数了
     * 写着里主要是方便回顾知识
     * */
    //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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容