分类 办公软件 下的文章

【原创】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) 好了,现在一切都完美了。

【原创】Windows10下Emacs安装与配置中遇到问题的解决

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

——by realasking

最近需要使用python做一个规模较大的脚本,之前那种采用某种编辑器写完脚本后再执行看结果的做法已经不再合适,我需要一个自由度较高的python的ide。在考察了若干ide后,最后我选择了Emacs,不过,Linux下的配置比较成功,而Windows下则遇到了一些问题,这里对解决过程做了一点记录。

如何右键打开文件

GNU组织提供了一个官方解决方案: MsWindowsGlobalContextMenu

操作如下:

  1. 根据实际情况,我建立了注册表文件rightclick.reg,内容如下:
Windows Registry Editor Version 5.00
;; Be sure to set the correct path to Emacs on your system!
[HKEY_CURRENT_USER\Software\Classes\*\shell]

;; Open file in existing frame
[HKEY_CURRENT_USER\Software\Classes\*\shell\emacsopencurrentframe]
@=&Emacs: Open File
icon=D:\\Program Files\\Emacs\\emacs-26.2-x86_64\\bin\\emacsclientw.exe
[HKEY_CURRENT_USER\Software\Classes\*\shell\emacsopencurrentframe\command]
@=D:\\Program Files\\Emacs\\emacs-26.2-x86_64\\bin\\emacsclientw.exe -n --alternate-editor=\D:\\Program Files\\Emacs\\emacs-26.2-x86_64\\bin\\runemacs.exe\ \%1\

;; Open file in new frame
[HKEY_CURRENT_USER\Software\Classes\*\shell\emacsopennewframe]
@=&Emacs: Open in new Window
icon=D:\\Program Files\\Emacs\\emacs-26.2-x86_64\\bin\\emacsclientw.exe
[HKEY_CURRENT_USER\Software\Classes\*\shell\emacsopennewframe\command]
@=D:\\Program Files\\Emacs\\emacs-26.2-x86_64\\bin\\emacsclientw.exe -n --alternate-editor=\D:\\Program Files\\Emacs\\emacs-26.2-x86_64\\bin\\runemacs.exe\ -c \%1\
  1. D:\Program Files\Emacs\emacs-26.2-x86_64\bin下建立runemacs.exe的快捷方式,然后拷贝到shell:startup
  2. 重启电脑

显示字体太小

解决方法:

Options->Set Default font,选择微软雅黑,字号设置为14,然后Save Options

Emacs启动窗口太小

如果直接运行runemacs.exe启动Emacs,有很多方法设置启动窗口大小和位置,但是在Windows下通过emacsclientw.exe来启动,这些方法基本都无效,唯一有效的方法是将Emacs启动窗口设为最大化,做法是将如下语句添加到init.el中:

(add-hook 'window-setup-hook 'toggle-frame-fullscreen t)
(add-to-list 'default-frame-alist '(fullscreen . maximized))

之所以一定要使用服务器-客户端的模式启动Emacs,是因为Windows下Emacs启动实在太慢了。

打开英文和希腊字母混合的文档乱码

解决办法:

1.下载unicad

2.拷贝到.emacs.d/lisp文件夹下

3.将如下语句添加到init.el中:

(push (expand-file-name ~/.emacs.d/lisp) load-path)
(require 'unicad)

最新文章

最近回复

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

分类

归档

其它