中文账户名

在Linux系统里,默认不能创建中文用户名,大写字母都不行,现在不是用utf-8吗?怎么只允许英文?

既然大写字母不行,那就不是utf-8的问题了吧?

历史包袱。

大写字母不行也是因为以前的打字机只能打大写,看不出来大小写,所以就只允许一种了。

1 个赞

修改自己的用户名为中文,好像可以。我试了试,没有输入root密码确认。
中文用户名,在tty不能输入就不能修复了。

要把lcw0268改中文。

From User/Group Name Syntax (systemd.io)

The precise set of allowed user and group names on Linux systems is weakly defined. Depending on the distribution a different set of requirements and restrictions on the syntax of user/group names are enforced — on some distributions the accepted syntax is even configurable by the administrator.

  • On POSIX the set of valid user names is defined as lower and upper case ASCII letters, digits, period, underscore, and hyphen, with the restriction that hyphen is not allowed as first character of the user name. Interestingly no size limit is declared, i.e. in neither direction, meaning that strictly speaking according to POSIX both the empty string is a valid user name as well as a string of gigabytes in length.
  • Debian/Ubuntu based systems enforce the regular expression ^[a-z][-a-z0-9]*$, i.e. only lower case ASCII letters, digits and hyphens. As first character only lowercase ASCII letters are allowed. This regular expression is configurable by the administrator at runtime though. This rule enforces a minimum length of one character but no maximum length.
  • Upstream shadow-utils enforces the regular expression ^[a-z_][a-z0-9_-]*[$]$, i.e. is similar to the Debian/Ubuntu rule, but allows underscores and hyphens, but the latter not as first character. Also, an optional trailing dollar character is permitted.
  • Fedora/Red Hat based systems enforce the regular expression of ^[a-zA-Z0-9_.][a-zA-Z0-9_.-]{0,30}[a-zA-Z0-9_.$-]?$, i.e. a size limit of 32 characters, with upper and lower case letters, digits, underscores, hyphens and periods. No hyphen as first character though, and the last character may be a dollar character. On top of that, . and .. are not allowed as user/group names.
  • sssd is known to generate user names with embedded @ and white-space characters, as well as non-ASCII (i.e. UTF-8) user/group names.
  • winbindd is known to generate user/group names with embedded \ and white-space characters, as well as non-ASCII (i.e. UTF-8) user/group names.

现在甚至会有程序生成非 ASCII 的用户名/组名。分发的默认设置的目的应该是为了最大程度地保证互操作性。尽管现代系统上的大部分程序都应当支持 UTF-8 ,但如果用户遇到了进行错误假设的反例就会很麻烦(甚至不需要你使用非 ASCII 的用户名/组名也能触发问题):

https://rt.cpan.org/Public/Bug/Display.html?id=33492

规则根据需要来的,当满足不了需要,规则也可以改。听说可以改为中文用户名,只是会出现乱码。

我的意思是,规则完全可以配置为支持 UTF-8 用户名,大部分程序也能工作,但是如果用户遇到不支持的程序就会遭遇麻烦。为了减少这种麻烦,分发把用户名限制在一个相当有限的范围内,这样对于几乎所有程序都不会出现问题。我认为乱码问题实际上是程序对 UTF-8 的支持效果不良好或程序没有被正确配置的结果。

所以,这种麻烦较于改wayland支持,是不是要小一点。

我不清楚哪一个会更麻烦(而且对于某些应用程序而言,有些问题是不存在的),但是正如某些程序明确不支持 UTF-8 一样,也有程序明确不支持 wayland。这些不支持的反例将会造成麻烦。

不怎么懂这些,utf-8不是兼容ascii吗?

如果谈论用户名的话,不同程序的规则不尽相同,并不一定仅仅是 ASCII 字符就会被允许;并且在谈论 UTF-8 支持的时候,难道通常不是希望使用非 ASCII 字符吗?

在debian强制使用ascii字符,如果兼容了,用utf-8应该没问题。

我觉得我就是这个意思……Debian 的这种规则对于 UTF-8 支持状况不同的各种程序都能工作,所以能为用户最大程度地减少麻烦。

我前两天刚见过一例因为在用户名中使用了大写字母而无法登录的案例。

规则是可以改,问题是改不动。你看浏览器版本号升到 100,都早多个版本就开始测试,来把不支持的网站揪出来,让网站修正或者自己 shim 一下。你改个用户名规则这么大的事儿,肯定会有一大堆软件出问题。还在维护中的你还能花个几年时间让对方都改一改,已经没人维护但是又有不少用户的,你怎么办呢?

wayland 的麻烦要小。因为大部分软件只需要它使用的 toolkit 支持 wayland 就好了(比如 gtk、qt、glfw 它们)。然后实在改不动的绝大部分还能用 xwayland 凑合一下。你用户名规则改了,怎么向旧兼容呢?学 Windows 的文件名那样,提供一个兼容版本的名字么?