再谈桌面虚拟化环境中的默认配置文件与输入法

今天给大家分享一下在做虚拟桌面时的默认输入法的方法以及用户配置文件。

在做虚拟桌面或者虚拟应用时,我们希望基于标准用户创建出来的用户的输入法都是一样的,但是有时候或多或少会出现新用户缺少输入法,或者还依然有微软拼音输入法和微软智能ABC输入法的情况。下面我们分析一下微软定义的默认配置文件和如何手工设置输入法。

制作标准配置文件

方法1:首先我们在标准模板中将所有软件安装调试好,系统优化设置都设置完毕,然后使用此用户采用sysprep加copyprofile参数的方式将默认用户的配置文件替换为此用户的配置文件。默认配置文件制作完成后,将此配置文件进行精简,尽量精简到3M以内

方法2:使用一个本地管理员用户在标准模板中将所有软件安装调试好,系统优化设置完毕,然后使用另外一个管理员用户登录到此系统中,使用windows enabler工具将原来安装调试软件的用户的配置文件导出,导出时赋予everyone完全控制权限。导出后将C:\USERS\Default重命名,然后将导出的配置文件复制到C:\USERS,重命名为Default,将配置文件精简到3M以内。

采用以上第一种方法,可能会出现用户基于制作的配置文件生成出来的配置文件,输入法不对的情况,这个时候我们就需要考虑修改此配置文件下的ntuser.dat文件,在下文中我们会对ntuser.dat的作用进行阐述

采用第二种方法,基于制作的配置文件生成的新用户的配置文件,输入法不会有问题,但是在XenDesktop结合UPM的情况下可能会出现用户配置文件无法上传至漫游路径的问题。具体表象为在UPM的LOG中会报出Logon/Logoff process failed的错误。

因此如果是在虚拟桌面+Citrix UPM的情况下或者XenApp+UPM的情况下,我们还是建议采用第一种方法生成默认配置文件。如果是桌面环境或者XenApp环境使用的是微软漫游配置文件方法或者是微软强制配置文件方法,我们推荐采用第二种方法。

第二种方法之所以会无法使用UPM,原因是在使用Windows Enabler的过程中,自动筛选掉了AppData\Local\和AppData\LocalLow,而UPM有时会用到AppData\Local\Microsoft\usrclass.dat文件,在下文中我们会详细阐述usrclass.dat文件

注册表文件

我们知道Windows将用户大部分的设置都存放在了注册表中,而当前登录的注册表为HKEY_CURRENTUSER这个大的注册表项。

我们所设定的用户的DLL文件注册,系统配置,个性化以及用户的输入法设置都存放在这个里面。每个用户的HKCU注册表配置项都存放在各自的用户目录下面,Windows NT5.0及之前存放在“C:\Documents and Settings\%username%”下面,Windows NT 5.0存放在C:\Users下面。存放的文件名称为ntuser.dat和usrclass.dat。ntuset.dat用来放置用户的HKCU注册表项,usrclass.dat主要用来放置用户的COM注册表配置项。在做漫游配置文件的时候,默认情况下usrclass.dat不会被漫游到共享路径,只有ntuser.dat会漫游到共享路径。

经过多次尝试与分析,我发现Citrix UPM会有一些注册表项写入到usrclass.dat文件中,我们使用第二种方法制作默认配置文件的时候,由于会直接清除掉整个AppData\Local目录,因此usrclass.dat文件也会被清除掉。因此做漫游配置文件时,如果非要使用第二种方法,在制作出来配置文件后,可手工将AppData\Local目录重建,并将usrclass.dat放入其中,即可正常使用UPM。针对第一种方法,如果出现新用户输入法没有按照我们预定义的输入法创建出来,我们可以来分析ntuser.dat文件来手工将输入法项写入进去。

关于输入法

Windwos定义用户的输入法设置存放在HKCU\Keyboard Layout中,当前使用的输入法存放在HKCU\Keyboard Layout\Preload中,在Windows PE或者Windows预启动时的输入法设置则存放在HKCU\Software\Microsoft\CTF\SortOrder\AssemblyItem中。

打开HKCU\Keyboard Layout\Preload后,我们会看到如下所示

我们会看到有1、2、3三个注册表键值,并且键值的定义数据是一串数字与字母的组合键值。

此时这三个键值就代表了我们当前用户有3个输入法、1就代表第一个输入法,以此类推,每个输入法后面的键值就代表了该输入法(每个输入法在系统中都有唯一的键值,微软键盘默认为E00000804),输入法键值的定义在如下位置

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts

使用第一种方法将默认配置文件创建出来后,如新用户输入法创建没有按照预期,则将默认配置文件中的ntuser.dat文件挂载到注册表编辑器中。

挂载方法如下:

1、 打开注册表编辑器,定位到HKEY_USERS,点击文件>加载配置单元

2、 选择我们要修改的ntuser.dat文件,点击打开

3、 随便输入一个配置项的名称,点击确定

4、 如下图,我们可以看到我们的文件已经正确挂载

5、 打开Keyboard Layout\Preload检查输入法的注册表项是否正确

6、 如不正确,打开HKLM\System\CurrentControlSet\Control\Keyboard Layouts找到要添加的注册表项的项名称,并记录下来

7、 如上图,百度输入法的键值是E0200804,只需要将此键值加入到如上的Keyboard Layout\Preload里面即可

8、 注册表修改完成后,定位到我们挂载的项的位置

9、 点击文件>卸载配置单元

10、 卸载后,在ntuser.dat所在的目录,我们会看到一些临时的log文件,此时将除了ntuser.dat之外的所有文件全部删除即可

如此,默认配置文件的输入法即配置完毕,使用此配置文件创建一个新用户进行测试即可。

题外话(关于XenApp强制)

如果在XenApp环境中使用微软TS强制配置文件,在优化配置文件的时候,如果没有应用程序将配置文件写入到AppData文件夹(一般的B/S系统插件都不会写入,如果有应用程序写入到AppData\Romaing,可以将Romaing目录做重定向)可以将除了Ntuser.dat之外的所有目录与文件全部删除,此时可以打打加快XenApp应用程序的启动速度。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券