FreeBSD系统设置启动环境变量文件涉及.cshrc、.login_conf等

问题提出:图形界面英文怎么配成中文?

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 的一些关键点:

  1. 用途
    • 启动图形界面会话,如 GNOME、KDE、XFCE 等。
    • 确保会话有正确的用户权限和访问控制。
  2. 使用方法
    • 通常,ck-launch-session 会在用户的 ~/.xinitrc 文件中被调用,该文件是当从命令行启动图形界面时(如使用 startx 命令)所执行的脚本。
    • 例如,在 XFCE 的配置中,可能会在 ~/.xinitrc 文件的末尾看到类似于 exec ck-launch-session dbus-launch --exit-with-session startxfce4 的行。
  3. 与其他组件的交互
    • ConsoleKit:一个用于管理控制台会话的库和守护进程。它已被 systemd-logind 替代,但在一些较旧的系统中可能仍然使用 ConsoleKit。
    • systemd-logind:一个 systemd 的组件,用于管理用户登录会话。它提供了对用户会话的细粒度控制,包括会话的创建、认证和注销。
  4. 注意事项
    • 随着 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文件中加入了中文支持。

  • 43
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值