热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

体验EmacsSystemdDaemonUnit

原文地址:https:www.lujun9972.winblog20180530体验emacs-systemd-daemon-unitindex.htmlEmacs26.1开始提供

原文地址:https://www.lujun9972.win/blog/2018/05/30/体验emacs-systemd-daemon-unit/index.html

Emacs26.1开始提供了一个systemd user unit file来让我们可以使用sytemd管理Emacs Daemon。

安装好Emacs26.1后,你会发现在 /usr/lib/systemd/user 目录下多了一个 emacs.service 文件,你只需要执行

systemctl --user start emacs.service

就能启动emacs daemon了,或者通过

systemctl --user enable emacs.service

来自动启动emacs daemon。

然而默认的 emacs.service 中没有对 LANG 进行设置,导致在Emacs中无法输入中文。

所以我们还需要对 emacs.service 文件做一些修改,在 Environment 中设置 LANG 的值。

具体的步骤为:

mkdir -p ~/.config/systemd/user/
cp /usr/lib/systemd/user/emacs.service ~/.config/systemd/user
sed -i '/Environment/ s/$/ LANG=zh_CN.UTF-8/' ~/.config/systemd/user/emacs.service

重载修改后的unit file,然后再重启 emacs daemon

systemctl --user daemon-reload
systemctl --user restart emacs.service

然后运行 emacsclient -n -c 连接上emacs daemon,运行 (getenv "LANG") 会发现LANG变量已经变成 zh_CN.UTF-8screenshot-13.png

不过,当我按下 Ctrl-SPACE 确依然使用不了中文,这是怎么回事呢()? 我用的是 fcitx, 为了排查问题,在在eshell下运行 fcitx-diagnose 结果为

Welcome to the Emacs shell~ λ fcitx-diagnose
# 系统信息:
1. `uname -a`:Linux T520 4.16.11-1-ARCH #1 SMP PREEMPT Tue May 22 21:40:27 UTC 2018 x86_64 GNU/Linux2. `lsb_release`:`lsb_release` 未找到.3. `/etc/lsb-release`:`/etc/lsb-release` 未找到.4. `/etc/os-release`:NAME="Arch Linux"PRETTY_NAME="Arch Linux"ID=archID_LIKE=archlinuxANSI_COLOR="0;36"HOME_URL="https://www.archlinux.org/"SUPPORT_URL="https://bbs.archlinux.org/"BUG_REPORT_URL="https://bugs.archlinux.org/"5. 桌面环境:无法确定桌面环境。6. Bash 版本:BASH_VERSION='4.4.19(1)-release'# 环境:
1. DISPLAY:DISPLAY=':0'2. 键盘布局:1. `setxkbmap`:xkb_keymap {xkb_keycodes { include "evdev+aliases(qwerty)" };xkb_types { include "complete" };xkb_compat { include "complete" };xkb_symbols { include "pc+us+inet(evdev)" };xkb_geometry { include "pc(pc105)" };};2. `xprop`:_XKB_RULES_NAMES(STRING) = "evdev", "pc105", "us", "", ""3. Locale:1. 全部可用 locale:Cen_US.utf8POSIXzh_CN.utf8zh_TW.utf82. 当前 locale:LANG=zh_CN.UTF-8LC_CTYPE="zh_CN.UTF-8"LC_NUMERIC="zh_CN.UTF-8"LC_TIME="zh_CN.UTF-8"LC_COLLATE="zh_CN.UTF-8"LC_MONETARY="zh_CN.UTF-8"LC_MESSAGES="zh_CN.UTF-8"LC_PAPER="zh_CN.UTF-8"LC_NAME="zh_CN.UTF-8"LC_ADDRESS="zh_CN.UTF-8"LC_TELEPHONE="zh_CN.UTF-8"LC_MEASUREMENT="zh_CN.UTF-8"LC_IDENTIFICATION="zh_CN.UTF-8"LC_ALL=4. 目录:1. 主目录:/home/lujun99722. `${XDG_CONFIG_HOME}`:环境变量 `XDG_CONFIG_HOME` 没有设定。`XDG_CONFIG_HOME` 的当前值是 `~/.config` (`/home/lujun9972/.config`)。3. Fcitx 设置目录:当前 fcitx 设置目录是 `~/.config/fcitx` (`/home/lujun9972/.config/fcitx`)。5. 当前用户:脚本作为 lujun9972 (1000) 运行。# Fcitx 状态:
1. 可执行文件:在 `/usr/bin/fcitx` 找到了 fcitx.2. 版本:Fcitx 版本: `4.2.9.5`3. 进程:找到了 2 个 fcitx 进程:4972 fcitx5014 fcitx-dbus-watc4. `fcitx-remote`:`fcitx-remote` 工作正常.5. DBus 界面:使用 `dbus-send` 来检查 dbus。DBus 名称 `org.fcitx.Fcitx` 的所有者是 `:1.0`。DBus 名称 `org.fcitx.Fcitx` 的 PID 所有者是 `4972`。# Fcitx 配置界面:
1. 配置工具封装:在 `/usr/bin/fcitx-configtool` 找到了 fcitx-configtool。2. 用于 GTK+-2.0 的配置界面:**未找到 gtk2 的配置界面.**3. 用于 GTK+-3.0 的配置界面:在 `/usr/bin/fcitx-config-gtk3` 找到了 `fcitx-config-gtk3`。4. KDE 的配置界面:# 前端设置:
## Xim:
1. `${XMODIFIERS}`:**XMODIFIERS 没有设置****请使用您发行版提供的工具将环境变量 XMODIFIERS 设为 "@im=fcitx" 或者将 `export XMODIFIERS=@im=fcitx` 添加到您的 `~/.xprofile` 中. 参见 [输入法相关的环境变量: XMODIFIERS](http://fcitx-im.org/wiki/Input_method_related_environment_variables/zh-cn#XMODIFIERS).**从环境变量中获取的 Xim 服务名称为 fcitx.2. 根窗口上的 XIM_SERVERS:Xim 服务的名称与环境变量中设置的相同.## Qt:
1. qt4 - `${QT4_IM_MODULE}`:**请使用您发行版提供的工具将环境变量 QT_IM_MODULE 设为 "fcitx" 或者将 `export QT_IM_MODULE=fcitx` 添加到您的 `~/.xprofile` 中. 参见 [输入法相关的环境变量: QT_IM_MODULE](http://fcitx-im.org/wiki/Input_method_related_environment_variables/zh-cn#QT_IM_MODULE).**2. qt5 - `${QT_IM_MODULE}`:**请使用您发行版提供的工具将环境变量 QT_IM_MODULE 设为 "fcitx" 或者将 `export QT_IM_MODULE=fcitx` 添加到您的 `~/.xprofile` 中. 参见 [输入法相关的环境变量: QT_IM_MODULE](http://fcitx-im.org/wiki/Input_method_related_environment_variables/zh-cn#QT_IM_MODULE).**3. Qt 输入法模块文件:找到了 Qt4 的输入法模块: `/usr/lib/qt4/plugins/inputmethods/qtim-fcitx.so`.找到了 fcitx 的 qt 模块: `/usr/lib/fcitx/qt/libfcitx-quickphrase-editor5.so`.找到了 Qt5 的输入法模块: `/usr/lib/qt/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so`.## Gtk:
1. gtk - `${GTK_IM_MODULE}`:**请使用您发行版提供的工具将环境变量 GTK_IM_MODULE 设为 "fcitx" 或者将 `export GTK_IM_MODULE=fcitx` 添加到您的 `~/.xprofile` 中. 参见 [输入法相关的环境变量: GTK_IM_MODULE](http://fcitx-im.org/wiki/Input_method_related_environment_variables/zh-cn#GTK_IM_MODULE).**2. `gtk-query-immodules`:1. gtk 2:在 `/usr/bin/gtk-query-immodules-2.0` 找到了 gtk `2.24.32` 的 `gtk-query-immodules`.版本行:# Created by /usr/bin/gtk-query-immodules-2.0 from gtk+-2.24.32已找到 gtk `2.24.32` 的 fcitx 输入法模块."/usr/lib/gtk-2.0/2.10.0/immodules/im-fcitx.so" "fcitx" "Fcitx (Flexible Input Method Framework)" "fcitx" "/usr/share/locale" "ja:ko:zh:*" 2. gtk 3:在 `/usr/bin/gtk-query-immodules-3.0` 找到了 gtk `3.22.30` 的 `gtk-query-immodules`.版本行:# Created by /usr/bin/gtk-query-immodules-3.0 from gtk+-3.22.30已找到 gtk `3.22.30` 的 fcitx 输入法模块."/usr/lib/gtk-3.0/3.0.0/immodules/im-fcitx.so" "fcitx" "Fcitx (Flexible Input Method Framework)" "fcitx" "/usr/share/locale" "ja:ko:zh:*" 3. Gtk 输入法模块缓存:1. gtk 2:在 `/usr/lib/gtk-2.0/2.10.0/immodules.cache` 找到了 gtk `2.24.32` 的输入法模块缓存.版本行:# Created by /usr/bin/gtk-query-immodules-2.0 from gtk+-2.24.32已找到 gtk `2.24.32` 的 fcitx 输入法模块."/usr/lib/gtk-2.0/2.10.0/immodules/im-fcitx.so" "fcitx" "Fcitx (Flexible Input Method Framework)" "fcitx" "/usr/share/locale" "ja:ko:zh:*" 2. gtk 3:在 `/usr/lib/gtk-3.0/3.0.0/immodules.cache` 找到了 gtk `3.22.30` 的输入法模块缓存.版本行:# Created by /usr/bin/gtk-query-immodules-3.0 from gtk+-3.22.30已找到 gtk `3.22.30` 的 fcitx 输入法模块."/usr/lib/gtk-3.0/3.0.0/immodules/im-fcitx.so" "fcitx" "Fcitx (Flexible Input Method Framework)" "fcitx" "/usr/share/locale" "ja:ko:zh:*" 4. Gtk 输入法模块文件:1. gtk 2:找到的全部 Gtk 2 输入法模块文件均存在.2. gtk 3:找到的全部 Gtk 3 输入法模块文件均存在.# 配置:
## Fcitx 插件:
1. 插件配置文件目录:找到了 fcitx 插件配置目录: `/usr/share/fcitx/addon`.2. 插件列表:1. 找到了 27 个已启用的插件:fcitx-autoengfcitx-chttransfcitx-classic-uifcitx-clipboardfcitx-dbusfcitx-freedesktop-notifyfcitx-fullwidth-charfcitx-imselectorfcitx-ipcfcitx-ipcportalfcitx-keyboardfcitx-kimpanel-uifcitx-notificationitemfcitx-pinyinfcitx-pinyin-enhancefcitx-puncfcitx-quickphrasefcitx-remotefcitx-spellfcitx-sunpinyinfcitx-tablefcitx-unicodefcitx-vkfcitx-x11fcitx-ximfcitx-xkbfcitx-xkbdbus2. 找到了 1 个被禁用的插件:fcitx-qw3. 插件库: 所有插件所需的库都被找到。4. 用户界面:找到了 2 个已启用的用户界面插件:fcitx-classic-uifcitx-kimpanel-ui## 输入法:
1. 找到了 2 个启用的输入法:fcitx-keyboard-ussunpinyin2. 默认输入法:您已经正确的将一个键盘输入法 "fcitx-keyboard-us" 设为默认.# 日志:
1. `date`:2018年 05月 30日 星期三 13:18:42 CST2. `~/.config/fcitx/log/`:总用量 03. `~/.config/fcitx/log/crash.log`:`~/.config/fcitx/log/crash.log` 未找到.
~ λ

从诊断信息中可以发现,原来是 GTK_IM_MODULE, QT_IM_MODULEXMODIFIERS 这三个环境变量没有设置。

sed -i '/Environment/ s/$/ GTK_IM_MODULE=fcitx QT_IM_MODULE=fctix XMODIFIERS="@im=fcitx"/' ~/.config/systemd/user/emacs.service

再次重载修改后的unit file,然后再重启 emacs daemon

systemctl --user daemon-reload
systemctl --user restart emacs.service

运行 emacsclient -n -c 连接上emacs daemon, 按下 Ctrl-SPC, 这次能用中文了.

screenshot-14.png 最后的service unit file是这样的

[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 LANG=zh_CN.UTF-8 GTK_IM_MODULE=fcitx QT_IM_MODULE=fctix XMODIFIERS="@im=fcitx"
Restart=on-failure[Install]
WantedBy=default.target


推荐阅读
  • 本文详细介绍了如何在Linux系统中搭建51单片机的开发与编程环境,重点讲解了使用Makefile进行项目管理的方法。首先,文章指导读者安装SDCC(Small Device C Compiler),这是一个专为小型设备设计的C语言编译器,适合用于51单片机的开发。随后,通过具体的实例演示了如何配置Makefile文件,以实现代码的自动化编译与链接过程,从而提高开发效率。此外,还提供了常见问题的解决方案及优化建议,帮助开发者快速上手并解决实际开发中可能遇到的技术难题。 ... [详细]
  • BZOJ4240 Gym 102082G:贪心算法与树状数组的综合应用
    BZOJ4240 Gym 102082G 题目 "有趣的家庭菜园" 结合了贪心算法和树状数组的应用,旨在解决在有限时间和内存限制下高效处理复杂数据结构的问题。通过巧妙地运用贪心策略和树状数组,该题目能够在 10 秒的时间限制和 256MB 的内存限制内,有效处理大量输入数据,实现高性能的解决方案。提交次数为 756 次,成功解决次数为 349 次,体现了该题目的挑战性和实际应用价值。 ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
  • 本文详细介绍了使用响应文件在静默模式下安装和配置Oracle 11g的方法。硬件要求包括:内存至少1GB,具体可通过命令`grep -i memtotal /proc/meminfo`进行检查。此外,还提供了详细的步骤和注意事项,确保安装过程顺利进行。 ... [详细]
  • 本文提供了 MySQL 数据源配置的优化指南,详细介绍了如何通过正确的命令安装 MySQL 源码分发版。首先,需要创建一个名为 `mysql` 的用户组,然后添加一个同名的用户到该组中,以确保系统权限设置正确。这些步骤是确保 MySQL 稳定运行的基础。 ... [详细]
  • 本文介绍了使用 Python 编程语言高效抓取微博文本和动态网页图像数据的方法。通过详细的示例代码,展示了如何利用爬虫技术获取微博内容和动态图片,为数据采集和分析提供了实用的技术支持。对于对网络数据抓取感兴趣的读者,本文具有较高的参考价值。 ... [详细]
  • Spring框架入门指南:专为新手打造的详细学习笔记
    Spring框架是Java Web开发中广泛应用的轻量级应用框架,以其卓越的功能和出色的性能赢得了广大开发者的青睐。本文为初学者提供了详尽的学习指南,涵盖基础概念、核心组件及实际应用案例,帮助新手快速掌握Spring框架的核心技术与实践技巧。 ... [详细]
  • Python网络爬虫入门:利用urllib库进行数据抓取
    Python网络爬虫入门:利用urllib库进行数据抓取在数据科学和Web开发领域,Python凭借其简洁高效的特性成为首选语言。本文主要介绍了如何在Windows环境下使用Python的urllib库进行基本的网络数据抓取。考虑到命令行操作的不便,作者选择了Jupyter Notebook作为开发环境,不仅简化了配置过程,还提供了直观的数据处理和可视化功能。通过实例演示,读者可以轻松掌握urllib的基本用法,为深入学习网络爬虫技术打下坚实基础。 ... [详细]
  • 本文深入探讨了数据库性能优化与管理策略,通过实例分析和理论研究,详细阐述了如何有效提升数据库系统的响应速度和处理能力。文章首先介绍了数据库性能优化的基本原则和常用技术,包括索引优化、查询优化和存储管理等。接着,结合实际应用场景,讨论了如何利用容器化技术(如Docker)来部署和管理数据库,以提高系统的可扩展性和稳定性。最后,文章还提供了具体的配置示例和最佳实践,帮助读者在实际工作中更好地应用这些策略。 ... [详细]
  • 深入解析Gradle中的Project核心组件
    在Gradle构建系统中,`Project` 是一个核心组件,扮演着至关重要的角色。通过使用 `./gradlew projects` 命令,可以清晰地列出当前项目结构中包含的所有子项目,这有助于开发者更好地理解和管理复杂的多模块项目。此外,`Project` 对象还提供了丰富的配置选项和生命周期管理功能,使得构建过程更加灵活高效。 ... [详细]
  • 深入解析Tomcat:开发者的实用指南
    深入解析Tomcat:开发者的实用指南 ... [详细]
  • 如何在Java中高效构建WebService
    本文介绍了如何利用XFire框架在Java中高效构建WebService。XFire是一个轻量级、高性能的Java SOAP框架,能够简化WebService的开发流程。通过结合MyEclipse集成开发环境,开发者可以更便捷地进行项目配置和代码编写,从而提高开发效率。此外,文章还详细探讨了XFire的关键特性和最佳实践,为读者提供了实用的参考。 ... [详细]
  • 题目描述:小K不幸被LL邪教洗脑,洗脑程度之深使他决定彻底脱离这个邪教。在最终离开前,他计划再进行一次亚瑟王游戏。作为最后一战,他希望这次游戏能够尽善尽美。众所周知,亚瑟王游戏的结果很大程度上取决于运气,但通过合理的策略和算法优化,可以提高获胜的概率。本文将详细解析洛谷P3239 [HNOI2015] 亚瑟王问题,并提供具体的算法实现方法,帮助读者更好地理解和应用相关技术。 ... [详细]
  • 在处理大规模并发请求时,传统的多线程或多进程模型往往无法有效解决性能瓶颈问题。尽管它们在处理小规模任务时能提升效率,但在高并发场景下,系统资源的过度消耗和上下文切换的开销会显著降低整体性能。相比之下,Python 的 `asyncio` 模块通过协程提供了一种轻量级且高效的并发解决方案。本文将深入解析 `asyncio` 模块的原理及其在实际应用中的优化技巧,帮助开发者更好地利用协程技术提升程序性能。 ... [详细]
  • 如何选择并安装合适的Python环境和工具以解决常见的下载问题
    选择并安装合适的Python环境和工具对于解决常见的下载问题至关重要。用户可以直接访问Python官方网站进行下载,无需额外安装其他软件。Python作为一种跨平台的编程语言,支持多种操作系统,并具备面向对象和动态类型的特性,能够有效提升开发效率和代码可维护性。此外,推荐使用虚拟环境管理工具如venv或conda,以便更好地隔离项目依赖,确保开发环境的稳定性和安全性。 ... [详细]
author-avatar
dancejust25679
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有