分类 办公软件 下的文章

目前Linux下中文输入法的折腾记录

2019-10-10:创建此文

2019-11-11:补充fcitx5-rime的部署问题、fcitx在KDE plasma下无法设置WIN+空格切换输入法的问题

2019-12-21:补充服务器-客户端模式下Emacs使用ibus的办法

正文:吐槽

最近更新了一下系统,然后发现ibusEmacs中无法输入了。仔细分析了一下,如果直接启动/usr/bin/emacs,是可以正常输入的,
但是若以systemctl --user enable emacs的方式启动Emacs服务,然后用/usr/bin/emacsclient -n -c来启动,则无法完成
输入,即使在.xprofile中添加了语言相关的环境变量也一样。

在这种情况下,我先尝试了一下启用pyim这一运行于Emacs之中的输入法。这是一年之后,我再次安装和配置这种输入法,看上去一切都很顺利,
但是使用双拼时发现如果需要选字,目前该输入法会出现断字错误,于是暂时搁置了这一想法。

然后我尝试卸载了ibus,转而安装了fcitx,使用的时候发现在mendeley中无法输入中文,另外,fcitx的自然码并不好用,规则不全,
词库偏小,而且fcitx并不兼容wayland下运行的gnome,无法兼顾部分需求,于是也放弃了。

听闻fcitx5支持wayland,也改善了软件兼容性,于是又尝试了下这个版本。然而很遗憾,不知什么原因,这个版本在我的机器上用自然码完全
无法输入,使用fcitx5-rime又发现修改文件后重新部署根本无法完成,在删除build文件夹再点击部署按钮后,新产生的文件夹完全是空的,
fcitx5-rime只能启用明月拼音,无法启用其它输入法。无奈之下,也只有卸载了。

最后还是回到了ibus上,关于Emacs的输入,采用了pyim+liberime+rime的模式,配置文件结合了manateelazycattumashu两位的办法。目前的配置文件如下:

(setq load-path (cons (file-truename "~/.emacs.d/") load-path))

(require 'pyim)
(require 'posframe)
(require 'liberime)

(setq default-input-method "pyim")
(setq pyim-page-tooltip 'posframe)
(setq pyim-page-length 7)

(liberime-start "/usr/share/rime-data/" (file-truename "~/.emacs.d/pyim/rime/"))
(liberime-select-schema "zrm2000")
(setq pyim-default-scheme 'rime)

其中~/.emacs.d/pyim/rime文件夹拷贝自~/.config/ibus/rime,编译之后的liberime.so文件放置位置在~/.emacs.d中。
目前唯一不习惯的地方是无法实现shift键切换中英文。

fcitx5-rime的部署问题

最近又试了一下fcitx5,虽然最后卸载了,但是注意到了rime要能部署,需要满足的条件:把rime的配置文件夹换个位置。
fcitx 4.x时代,rime的配置文件放置路径是:
${HOME}/.config/fcitx/rime
然而,fcitx5的rime配置路径发生了更改:
${HOME}/.local/share/fcitx5/rime
所以问题很简单了,把配置文件换个地方就好了。
我到现在也没看到fcitx5的文档,也没在网上搜到提到这一变更的说明,能够找到,纯属偶然,怨念中......

KDE plasma下用fcitx时无法设置“WIN+空格”切换激活/非激活输入法的解决

最近有人告诉我在KDE plasma桌面的systemsettings下的kcm-fcitx/kcm-fcitx5中无法设置WIN+空格或称之为SUPER_SPACE切换激活/非激活输入法状态,我试了试,确实不行,但这并不意味着不能用这个热键来切换,只是需要手工修改配置文件而已。
解决办法是:
先用pkill -9 fcitx结束掉fcitx进程,然后进入fcitx配置文件的目录,再修改config文件,在其中加入:
TriggerKey=SUPER_SPACE
保存之后重新登录桌面即可。

Emacs中使用ibus的方法

服务器-客户端模式使用Emacs时,ibus的使用方法如下:

  1. 环境变量设置文件为/etc/profile.d/ibus.sh,内容如下:
    #!/bin/bash
    export GTK_IM_MODULE=ibus
    export QT_IM_MODULE=ibus
    export XMODIFIERS=@im=ibus

    2.还需要在Emacssystemd的服务文件中修改
    需要将文件/usr/lib/systemd/user/emacs.service内容修改为:
    [Unit]
    Description=Emacs text editor
    Documentation=info:emacs man:emacs(1) https://gnu.org/software/emacs/
    #
    [Service]
    Type=simple
    ExecStart=/usr/bin/emacs --fg-daemon
    ExecStop=/usr/bin/emacsclient --eval "(kill-emacs)"
    Environment=SSH_AUTH_SOCK=%t/keyring/ssh
    Environment=XMODIFIERS=@im=ibus
    Environment=GTK_IM_MODULE=ibus
    Restart=on-failure
    #
    [Install]
    WantedBy=default.target

    然后重启此服务。
    此方法来源于nykma

【原创】Emacs在Manjaro Linux KDE版上启动服务导致关机卡住的解决办法

个人原创,如有转载,请注明出处。
——by realasking

问题:在Manjaro Linux上,使用KDE桌面的情况下,将Emacs服务启动会导致关机卡住

表现:

  1. 若用systemd设置服务:
    systemctl enable --user emacs
    systemctl start --user emacs

    则重启后关机时长时间无法关机,按Esc能看到关机过程卡在:

    A stop job is running for User Manager for UID 1000
  2. 若不用systemd设置服务,而是在.xprofile中添加:
    /usr/bin/emacs --daemon&

    则重启后关机时也长时间无法关机,关机过程卡在:

    A stop job is running for Session2 of user ...

    诊断:


    日志都正常,关机时导出dmesg信息也未见异常,但是执行以下语句后关机卡住的问题消失:

    pkill -9 emacs
    shutdown -r now

    解决方法:


    第一种方法是安装使用lucid而不使用gtkEmacs版本


    yaourt -S emacs-lucid

    然后可以用在.xprofile中启动Emacs服务。


    第二种方法是仍然使用普通Emacs版本,但系统中需要安装几个包:


    yaourt -S xorg-sessreg gnome-session gnome-keyring

    然后无论用systemd启动服务,还是在.xprofile中设置均可正常工作。


    补充第三种办法:


    第三种方法是仍然使用普通Emacs版本,但配置文件中关闭desktop-save-modesessionauto-save,然后用systemd启动服务即可。

【原创】通过Zerotier进行远程桌面访问速度太慢的解决方法

个人笔记,如有转载,请注明出处。

——by realasking

微软Windows10自带的远程桌面mstsc是一种非常方便的远程桌面连接方式,在Linux上则有xrdp这一使用相同协议的服务器端实现,可以使mstsc顺利访问。相比于teamviewer向日葵等第三方的远程桌面,使用rdp协议mstsc访问远程桌面不影响显示器驱动,对支持多用户、多登录的远程系统(如Linux)可以不在远程电脑上显示正在进行的操作,对于不支持多个登录的远程系统(如Windows)则在远程登录时会退出本地登录,这种设计大大增强了用户操作的安全性,防止远程设备在无人看管的情况下发生的泄密,或者受到他人误操作影响。

然而,这一远程桌面工具却只能在局域网内使用,殊为可惜,对于这一问题的一个解决办法是搭建虚拟局域网Zerotier就是一个很好的工具。用Zerotier建立虚拟局域网的方法是:

  1. Zerotier的官网注册,并建立private的网络

  2. 在两台不同网络环境的电脑上分别安装其客户端,并在客户端join network

  3. 打开两台设备上的9993端口

  4. Zerotier官网上Auth两个连接的设备

  5. 在操作端打开微软远程桌面连接

在不同网络环境下,Zerotier表现很不相同,有些地方网速能达到3-4MB/s,有些地方只能达到0-10KB/s,这对于笔记本电脑用户来说,无疑是难以接受的。对此,一般的解决方法是建立Moon服务器。然而,对于具有ipv6地址的公网vps服务器Zerotier在建立虚拟局域网映射时往往会使用Moon服务器ipv6地址,这对于国内很多宽带wifi用户来说,非但起不到加速作用,相反还会让连接速度更慢。对于此问题,本文找到一个解决办法,就是使用代理服务器。

具体做法是:

  1. vps上,建立socks5代理服务器,软件任意
  2. 除了Moon服务器外,同时也join network
  3. 在操作设备上,将代理服务器映射到127.0.0.1:1080,使用本地PAC
  4. 华军软件园下载SocksCap64并解压
  5. 打开SocksCap64,点击程序旁的向下按钮,添加微软的mstsc
  6. 点击代理,添加127.0.0.1:1080
  7. SocksCap64使用mstsc

除了可以用代理访问mstsc之外,操作设备上如果安装了WSL,也可以在其中以代理方式使用sshrsync,方法是:

#ssh的使用
ssh -o ProxyCommand=\"nc -X 5 -x 127.0.0.1:1080 %h %p\" RemoteSSH

#rsync的使用
export RSYNC_PROXY="127.0.0.1:1080"
rsync 参数.....

这样,只要vps能正常连接,远程连接就更加方便了。

Windows10中文家庭版环境下Emacs中词典的选择

若干年前,曾经在Linux下使用过Emacs,当时配置词典功能是轻松加愉快,直接在网上搜索了一下,找了个sdcv的配置文件扔到目录里,配置了几句话,然后就一切都好了。 然而,这两天在Win10下想使用词典,却费了牛劲了。首先,使用sdcv的Emacs扩展不止一个了,而变成了一大堆,一个一个试过去,对windows支持都不好。

最大的困难其实出在sdcv上:编译windows原生的sdcv需要先编译readline,glib2,zlib三个库,一顿鸡飞狗跳之后,得到的版本在系统中设置词典的环境变量后可以查词,但在Emacs 中死活找不到词典——无论用哪个扩展都如此;用Cygwin编译,遇到了编码问题,按水木清华上一个网友的方法设置CMAKE变量后,能顺利完成,在Cygwin中能顺利查词, 但是在Emacs中同样找不到词典,在Emacs中打开shell,于其中运行sdcv -l,会发现所有词典名都是乱码,直接输入单词,查询结果也全是乱码;用msys2编译失败,是CMAKE 找不到一些东西,但安装的时候告诉我和已有的库有冲突,可我是新装的msys2啊……最后也没有能解决,只好将msys2删除了。

sydict倒是顺利的用visual studio 2019编译出来了,可惜查词的时候需要等待18分钟才能打开查询结果,期间Emacs没有任何响应。

后来找到一个办法,yasdcv.el可以使用,而其它工具不行:建立sdcv.bat,并放置在Emacs可以搜索的PATH中,其中内容为:

@echo off "C:\windows\system32\bash.exe" -ilc "/usr/bin/sdcv %*"

然后在WSL中安装sdcv并拷贝词典,最后设置一下yasdcv中的sdcv命令到sdcv.bat即可。 这个办法可以使用,但是查词速度仍是龟速,检查了一下,查词最快5分钟,最慢8分钟,在我的RYZEN 2500U的机器上CPU占用27%,内存占用三百多兆,CPU占用最多的是命令解释 占53%,然后是行号占42%,也就是说,即使不显示行号,查一个词最快也要两分半。显然这个方案也不能接受。

然后又试了Github上两个有道词典方案,试了试,也都需要数分钟,遂放弃。

然后又尝试了几个dictd.org的方案,没有找到怎么配置英汉词典的方法,放弃。

还找到了两个词典服务器的方案,一个是用ruby,一个是用python,觉得似乎太重型了,没有尝试。

最后在Github上逛,看到了一个使用bing方案的办法:https://github.com/cute-jumper/bing-dict.el 按这个方案配置,单词只显示在最下方,对于快速阅读来说,已经足够了,该方案还可以保存本地缓存,以及查询历史,非常不错。

【笔记】Emacs 26.2在Windows 10上卡顿及Markdown-mode无法正常工作的解决

个人笔记,如有转载,请注明出处。

——by realasking

昨天自己的Emacs环境能正常工作了,今天干活的时候想做一些笔记,不想老是切换到Typora,也不用同步到joplin,就保存在本地,于是就安装了markdown-mode。但是markdown-mode安装后,按官方说明在init.el中添加了相关的命令后,发现报找不到markdown命令,错误代码1,于是先尝试安装了perl(strawberry),然后在msys2里安装markdown,并将该脚本拷贝到perlsite/bin下,将markdown命令指向用perl来解释的markdown,这倒是能用,但是功能实在太弱了,遂放弃此方案。于是决定使用pandoc

pandoc非常强大,安装.msi后,自动添加了环境变量,找了两个复杂一点的md文件,用它解析一切正常,但是设置markdown命令时发现,pandoc的路径不能有空格,不然找不到。

于是卸载重装到D:\Tools\Pandoc下。但是重启Emacs服务器和客户端后,预览时报错,错误代码92,网上查询无果,灵机一动,删除掉其中的中文内容后再预览,结果一切正常,遂怀疑是编码问题。

找了一个utf-8编码中文.md文件,用emacs打开,自动进入md模式,文件中的中文全部显示为了问号,预览仍然报错92,而utf-8编码中文.txt文件emacs打开一切正常,确认属于编码问题。

于是按网上所传,添加如下内容到init.el中:

(set-language-environment 'UTF-8)

(set-locale-environment UTF-8) 

(set-default-coding-systems 'utf-8)

重新打开emacs,发生了严重的卡顿,又按https://www.cnblogs.com/eat-and-die/p/10309681.html 所述,安装相应字体并添加如下语句:

(defun set-font (english chinese english-size chinese-size)

 (set-face-attribute 'default nil :font (format %s:pixelsize=%d english english-size)) 

(dolist (charset '(kana han symbol cjk-misc bopomofo))

 (set-fontset-font (frame-parameter nil 'font) charset (font-spec :family chinese :size chinese-size)))) 

(set-font Dejavu Sans Mono WenQuanYi Zen Hei Mono 14 14)

重启emacsmarkdown-mode确实正常了,但是原来设置的屏幕最大化失效,屏幕背景色设置失效,字体也没有显示为设置的,而是提示了tty字体缺失

经过搜索,根据aqing1987的解决方案,

将前述诸行全部去除,转而在以下几行

(require  unicad)
(add-to-list  default-frame-alist  ;(fullscreen . maximized)) 

之后添加了如下内容:

(defun s-font()
  (interactive)
  ;; font config for org table showing.
  (set-default-font Consolas-16)
  (dolist (charset '(kana han symbol cjk-misc bopomofo))
    (set-fontset-font (frame-parameter nil 'font)
                      charset
                      (font-spec :family 微软雅黑 :size 16)))
    (setq face-font-rescale-alist '((Consolas . 1.0) (微软雅黑 . 1.23)))
                      )

(add-to-list 'after-make-frame-functions
             (lambda (new-frame)
               (select-frame new-frame)
               (if window-system
                   (s-font))))
(if window-system
    (s-font))

这么修改后编码和emacsclientw都还是不正常,然后还要在

(custom-set-variables

后另起一行添加:

(current-language-environment UTF-8)

并在

(custom-set-faces

后另起一行添加:

(default ((t (:family #(微软雅黑 0 4 (charset utf-8)) :foundry outline :slant normal :weight normal :height 143 :width normal))))

保存之后重启Emacs,Markdown预览无法使用和卡顿的问题就都解决了。

但是按照这种方法配置的Emacs也有问题,在中文版的Windows 10系统下,这么配置后,此软件将无法再打开含有中文的目录名下的文件,因而也不是理想的解决办法。经过一番折腾,目前得到的自觉最为合理的方法如下: ### 安装iconv 1. 安装msys2 我将其安装在D:\\msys64下 2. 安装iconv 启动msys2的控制台,然后执行: bash pacman -S mingw-w64-x86_64-iconv ` 3. 创建pandoc.bat文件 在msys2/usr/bin目录下创建pandoc.bat文件,其内容为: `bash @echo off iconv.exe -t utf-8 %1 |pandoc.exe |iconv.exe -f utf-8 ` 这行脚本修改自[pandoc手册](https://pandoc.org/MANUAL.html#character-encoding) ### 配置Emacs 将init.el中刚才除在(custom-set-faces之后的内容外,额外添加的语句全部删除掉,然后在如下内容: `bash (require \'unicad) (add-to-list \'default-frame-alist \'(fullscreen . maximized)) ` 之前添加: `bash (setenv PATH (concat D:\\\\msys64\\\\mingw64\\\\bin; (getenv PATH))) ` Markdown的命令设置为: `bash (setq markdown-command D:/msys64/mingw64/bin/pandoc.bat) 好了,现在一切都完美了。

最新文章

最近回复

  • chill: 感谢,解决问题
  • realasking: 哪里的话,还要非常感...
  • cnfczn: 发送留言报错:in_...
  • cnfczn: 大狮兄666,以前经...
  • realasking: 最近还行啊,就是上网...
  • cnfczn: 大狮兄,好久不见啊....
  • realasking: 您好。有什么问题就在...
  • Eric Chen: 作者你好!最近折腾中...

分类

归档

其它