问题提出:图形界面英文怎么配成中文?
FreeBSD启动后发现有时候进入xfce是中文系统,有时候是英文系统。其实是有两套图形登录系统,因此尝试在那套英文系统里设置环境变量,目标是1 显示中文 2 能输入中文。在解决问题中,尝试设置环境变量。
问题解决:设置启动环境变量
首先看两套图形登录界面,怀疑一个是Wayland等图形界面管理系统,因为登录前能选择GNOME、GNOME on Wayland、 GNOME on Xorg、 Plasma(Wayland) Plasma(X11)、User session、Xfce Session等。
查看/usr/local/etc/X11/xinit/ 相关文件
在xinitrc文件中看到twm
查看/usr/local/etc/X11/xinit/xinitrc文件,里面有这段
twm &
xclock -geometry 50x50-1+1 &
xterm -geometry 80x50+494+51 &
xterm -geometry 80x20+494-0 &
exec xterm -geometry 80x66+0+0 -name login
因此应该是启动了twm窗口管理系统。 后来弄明白了,twm并不是管理GNOME、Xfce等的窗口管理器,而是一个小型的图形界面,可以理解为简化版的Xfce,在直接发startx命令的时候,默认就是进入twm窗口,也就是有两个xterm+一个xclock时钟的那个界面。
而一般安装好其它xwindows管理器后,我们一般会用类似startxfce4 或者startkde来启动相应窗口管理器。
详细文件内容/usr/local/etc/X11/xinit/xinitrc
#!/bin/sh
userresources=$HOME/.Xresources
usermodmap=$HOME/.Xmodmap
sysresources=/usr/local/etc/X11/xinit/.Xresources
sysmodmap=/usr/local/etc/X11/xinit/.Xmodmap
# merge in defaults and keymaps
if [ -f $sysresources ]; then
xrdb -merge $sysresources
fi
if [ -f $sysmodmap ]; then
xmodmap $sysmodmap
fi
if [ -f "$userresources" ]; then
xrdb -merge "$userresources"
fi
if [ -f "$usermodmap" ]; then
xmodmap "$usermodmap"
fi
# start some nice programs
if [ -d /usr/local/etc/X11/xinit/xinitrc.d ] ; then
for f in /usr/local/etc/X11/xinit/xinitrc.d/?*.sh ; do
[ -x "$f" ] && . "$f"
done
unset f
fi
twm &
xclock -geometry 50x50-1+1 &
xterm -geometry 80x50+494+51 &
xterm -geometry 80x20+494-0 &
exec xterm -geometry 80x66+0+0 -name login
为什么文件内容里面有空行呢? 是谁编辑的吗? 反正对强迫症来说这个文本是不太规范。
查看90-consolekit文件发现是ck-launch-session启动管理器
/usr/local/etc/X11/xinit/xinitrc.d/90-consolekit 文件
/usr/local/etc/X11/xinit/xinitrc.d # cat 90-consolekit
# -*- sh -*-
# Xsession.d script for ck-launch-session.
#
#
# This file is sourced by Xsession(5), not executed.
CK_LAUNCH_SESSION=/usr/local/bin/ck-launch-session
is_on_console() {
session=$(dbus-send --system --dest=org.freedesktop.ConsoleKit \
--type=method_call --print-reply --reply-timeout=2000 \
/org/freedesktop/ConsoleKit/Manager \
org.freedesktop.ConsoleKit.Manager.GetCurrentSession \
| grep path | awk '{print $3}' | sed s/\"//g)
x11_display=$(dbus-send --system --dest=org.freedesktop.ConsoleKit \
--type=method_call --print-reply --reply-timeout=2000 \
$session org.freedesktop.ConsoleKit.Session.GetX11Display \
| grep string | awk '{print $2}' | sed s/\"//g)
if [ -z "$x11_display" ] ; then
return 0
else
return 1
fi
}
也就是应该用了ck-launch-session ck启动管理器
ck-launch-session启动管理器
文心的回答介绍:
ck-launch-session
是一个在 Linux 系统中与 ConsoleKit 和 systemd-logind(或早期版本的 systemd 的 logind 组件)相关的工具,它用于启动一个新的会话,并处理与该会话相关的权限和认证。具体来说,ck-launch-session
可以帮助用户安全地启动图形界面会话,确保会话有正确的权限和访问控制。以下是关于
ck-launch-session
的一些关键点:
- 用途:
- 启动图形界面会话,如 GNOME、KDE、XFCE 等。
- 确保会话有正确的用户权限和访问控制。
- 使用方法:
- 通常,
ck-launch-session
会在用户的~/.xinitrc
文件中被调用,该文件是当从命令行启动图形界面时(如使用startx
命令)所执行的脚本。- 例如,在 XFCE 的配置中,可能会在
~/.xinitrc
文件的末尾看到类似于exec ck-launch-session dbus-launch --exit-with-session startxfce4
的行。- 与其他组件的交互:
- ConsoleKit:一个用于管理控制台会话的库和守护进程。它已被 systemd-logind 替代,但在一些较旧的系统中可能仍然使用 ConsoleKit。
- systemd-logind:一个 systemd 的组件,用于管理用户登录会话。它提供了对用户会话的细粒度控制,包括会话的创建、认证和注销。
- 注意事项:
- 随着 systemd 的普及,许多系统现在使用 systemd-logind 而不是 ConsoleKit。因此,在较新的系统中,
ck-launch-session
可能已被systemd-run --user
或其他相关工具替代。- 在配置图形界面会话时,确保了解您所使用的系统和桌面环境的具体要求,以便正确设置
~/.xinitrc
文件和其他相关配置。总之,
ck-launch-session
是一个用于安全启动图形界面会话的工具,它与其他系统组件(如 ConsoleKit 或 systemd-logind)协同工作,以确保会话的正确性和安全性。
手动修改启动时系统变量
这样问题就定位为:使用ck-launch-session启动管理器启动的xfce4没有设定为中文,这样就修改系统变量就行了。
另一个窗口是中文的,而且用户登录后控制台也是中文的(控制台能看到中文的乱码),证明csh这边设置应该没问题,查看用户下的.cshrc文件,发现:
setenv LANG zh_CN.UTF-8
setenv LANGUAGE zh_CN.UTF-8
setenv LC_CTYPE zh_CN.UTF-8
setenv LC_ALL zh_CN.UTF-8
setenv MM_CHARSET zh_CN.UTF-8
把~/.xinitrc文件加入中文支持:
setenv LANG zh_CN.UTF-8
setenv LANGUAGE zh_CN.UTF-8
setenv LC_CTYPE zh_CN.UTF-8
setenv LC_ALL zh_CN.UTF-8
setenv MM_CHARSET zh_CN.UTF-8
好像没效果。
查看用户目录下的隐含文件:
ls -la
drwxr-xr-x 8 skywalk skywalk 8 5月 21 13:21 .local
-rw-r--r-- 1 skywalk skywalk 323 8月 24 2023 .login
-rw-r--r-- 1 skywalk skywalk 91 8月 24 2023 .login_conf
drwxr-xr-x 5 skywalk skywalk 6 1月 11 19:53 .logseq
-rw------- 1 skywalk skywalk 301 8月 24 2023 .mail_aliases
-rw-r--r-- 1 skywalk skywalk 267 8月 24 2023 .mailrc
drwx------ 4 skywalk skywalk 4 10月 31 2023 .mozilla
drwxr-xr-x 5 skywalk skywalk 6 3月 22 12:24 .npm
-rw------- 1 skywalk skywalk 57 1月 22 23:08 .npmrc
drwxr-xr-x 3 skywalk skywalk 3 10月 31 2023 .openoffice.org
-rw-r--r-- 1 skywalk skywalk 34 2月 29 08:15 .padminrc
drwx------ 3 skywalk skywalk 3 8月 24 2023 .pki
-rw-r--r-- 1 skywalk skywalk 978 8月 24 2023 .profile
drwx------ 5 skywalk skywalk 9 3月 13 10:57 .purple
-rw------- 1 skywalk skywalk 17822 6月 21 16:26 .python_history
-rw-r--r-- 1 skywalk skywalk 1015 8月 24 2023 .shrc
针对.login .login_conf .shrc等文件,一个一个进入查看、尝试写入中文支持文件,后来发现在.login_conf文件中设置最为合适。
最终使用方法,修改.login_conf文件,添加中文支持
最简单的方法是.login_conf文件中加入如下三句:
me:\
:lang=zh_CN.UTF-8:\
:charset=zh_CN.UTF-8:\
但是没有中文输入法,无法输入中文。
修改.login_conf
#me:\
# :charset=iso-8859-1:\
# :lang=de_DE.ISO8859-1:
学习德文的修改方法,修改中文就是乱码。
me:\
:charset=iso-8859-1:\
:lang=zh_CN.ISO8859-1:
学习繁体中文的修改方法 me:\ :lang=zh_TW.Big5:\ :setenv=LC_ALL=zh_TW.Big5,LC_COLLATE=zh_TW.Big5,LC_CTYPE=zh_TW.Big5,LC_MESSAGES=zh_TW.Big5,LC_MONETARY=zh_TW.Big5,LC_NUMERIC=zh_TW.Big5,LC_TIME=zh_TW.Big5:\ :charset=big5:\ :xmodifiers="@im=gcin": #Set gcin as the XIM Input Server
参考繁体设置简体:
me:\
:lang=zh_CN.UTF-8:\
:charset=zh_CN.UTF-8:\
:setenv=LANG zh_CN.UTF-8,LANGUAGE zh_CN.UTF-8, LC_CTYPE zh_CN.UTF-8, LC_ALL zh_CN.UTF-8,MM_CHARSET zh_CN.UTF-8,XMODIFIERS @im=fcitx:\
:mm_charset=zh_CN.UTF-8:
:lang=zh_CN.UTF-8:\
:charset=zh_CN.UTF-8:\
:xmodifiers="@im=gcin":
XMODIFIERS @im=fcitx
发现加入这句还是不行:
:xmodifiers="@im=fcitx":
最终在.login_conf文件中加入中文支持如下:
me:\
:lang=zh_CN.UTF-8:\
:charset=zh_CN.UTF-8:\
:setenv=LANG zh_CN.UTF-8,LANGUAGE zh_CN.UTF-8, LC_CTYPE zh_CN.UTF-8, LC_ALL zh_CN.UTF-8,MM_CHARSET zh_CN.UTF-8,XMODIFIERS @im=fcitx:\
:mm_charset=zh_CN.UTF-8:
现在xfce4里面已经中文化,fcitx输入法登录之后右上角有,但是无法用快捷键切换,也没法输入中文。都已经忘记上次fcitx怎么配好的了,关键发现竟然没有留文档.....
尝试配置fcitx
第 5.1 节 Fcitx 输入法框架 | FreeBSD 从入门到跑路
后来发现,是有两套窗口管理系统,一套在alt f9,一套在alt f10 ,f9那套为原来英文的,f10那套为中文的,且输入法也是调好的。所以最终这套设好中文显示就行,输入法倒不那么着急去配了。
总结
本次实践解决了两个问题
发现系统有两套xwindows登录系统
一套Alt F9,一套在Alt F10 ,F9那套为原来英文的,F10那套为中文的,且输入法也是调好的。当然在图形界面下切换需要Ctrl-Alt+F9 或者Ctrl-Alt+F10。
这样终于解决了前期的一个疑惑,就是系统登录之后,有时候是英文系统,有时候是中文系统。其实每次重启默认登上去的都是英文系统,每回都是手工切换的。只是因为系统很长时间才重启一次,所以没有深入研究这个事。
环境变量设置问题
系统环境变量,X窗口的在/usr/local/etc/X11/xinit目录
全局登录在/etc/login.conf
用户登录配置在~/.login_conf文件,另外cshell在.cshrc 。理论上sh或bash在.shrc,但是试验下来没有调用该文件配置,需要手工执行source .shrc才行。
本次就是在~/.login_conf文件中加入了中文支持。
标签:zh,CN,cshrc,FreeBSD,--,skywalk,session,conf,UTF From: https://blog.csdn.net/skywalk8163/article/details/140087356