How to install Kontakt 8 on Ubuntu Studio, and my attempt at installing VOCALOID 6 on Ubuntu Studio

Recently, I completely moved my creative and work environment to Ubuntu Studio (which means I totally gave up Windows), and along with that came the issue of porting audio plugins that run on Windows. I spent about 70 hours solving some of the problems, and now I’m recording and sharing this process, hoping it can be helpful to everyone using Ubuntu Studio.

Also, in order to avoid translation errors from using machine translation, the process records I’ll post next are in Simplified Chinese. If needed, please use translation software to translate them.

You can check here too; the article in this link is the same as the one posted here.

https://www.bilibili.com/opus/1223708217827131394

这里是记述者奈野千魔,最近决定将我的创作环境完全迁移至Ubuntu Studio(也就是完全放弃使用Windows的意思)。
其实迁移过程很简单:备份需要备份的文件,然后将Windows所在的硬盘于Ubuntu Studio之中进行格式化(现在已经当成存储Kontakt音色库的硬盘使用了),然后没了——
看起来是如此,其实还有在Windows下的音源与相关软件移植至Ubuntu Studio的问题,于是便有了这篇教程…说是教程,不如说是移植过程的记录。

主要需要移植的有两种音源——驱动未来猫(初音未来)帮忙演唱的VOCALOID,以及Native Instrument(大概这么叫的)出品的Kontakt。其他零碎的音源也很好移植。
于是耗费了大概70多个小时,有了如下的整理过的过程记录,当然这70多个小时大部分时间都是在碰钉子,而且VOCALOID6迁移失败了(幸运的是我还有VOCALOID4,非常容易迁移)。
希望这些迁移过程的记录能够为准备(以及正在)将音乐制作工作站迁移至Ubuntu Studio的大家带来一些启发或灵感之类的。

1.首先卸载Ubuntu Studio中通过apt安装的Wine(如果之前有安装的话,因为Ubuntu Studio通过apt安装的wine版本太旧),执行:
sudo apt remove wine
随后将Wine官方仓库添加进来,在此之前需要导入WineHQ的GPG密钥:
curl -fsSL https://dl.winehq.org/wine-builds/winehq.key | sudo gpg --dearmor -o /usr/share/keyrings/winehq.gpg
创建仓库配置文件:

cat <<EOF | sudo tee /etc/apt/sources.list.d/winehq.sources
Types: deb
URIs: https://dl.winehq.org/wine-builds/ubuntu
Suites: $(lsb_release -cs)
Components: main
Architectures: amd64
Signed-By: /usr/share/keyrings/winehq.gpg
EOF

应该是在Wine11.7…大概之后,Wine对VOCALOID6编辑器的兼容度有了大幅度的改善。截至撰写这部教程的时候,winehq-stable还是11.0,所以这次安装的是winehq-staging(现版本为11.12),验证APT包管理器是否成功识别了WineHQ仓库:
apt-cache policy winehq-staging
一切无误之后进行安装:
sudo apt install winehq-staging

2.安装完毕之后输入winecfg进行初始配置,可能会弹出需要依赖Mono等额外组建,务必安装。自动配置完毕之后,将Windows版本更为Windows11。
默认Wine文件夹安装位置为:/home/(用户名)/.wine。
这时候的Wine文件夹中只包含了最基本的与Windows兼容的模块,DLL等,需要使用winetricks进行配置。如果使用的是Ubuntu Studio通过apt获得的winetricks,可能需要在终端中运行;我使用的winetricks是在Github中下载的官方版本,不过即便如此,也需要在终端中运行。
首先安装这些字体以解决往后模块安装中的中文/日文/韩文文字乱码问题:
winetricks cjkfonts corefonts
随后安装这些DLL与模块,以实现VOCALOID6编辑器的部分功能…应该是。我得出这些模块列表耗费了10个小时多一些…
首先安装需要的媒体文件解码器:
winetricks allcodecs
如果安装过程中出现错误的话,改为这个命令:
winetricks dirac ffdshow cinepak l3codecx
这些媒体文件解码器还不完成,需要打开这两个网站下载名为mf-install与名为mf-installcab-steamdeck的库:

(运行时将mf-install.sh中的所有wine64的行注释掉,然后运行:WINEPREFIX=/home/(用户名)/.wine ./mf-install.sh)

(运行时将install-mf-64.sh中的所有python改为python3,py源文件中将wine64改为wine,然后运行:WINEPREFIX=/home/(用户名)/.wine ./install-mf-64.sh)
然后是一些库与DLL文件:
winetricks dotnet35 dotnet40 dotnet45
运行winecfg,将Windows版本调至Windows11,继续运行:

winetricks dotnet6 dotnet7 dotnet9 d3dcompiler_47 dotnetcore2 qedit quartz dxvk dxvk2071 vcrun2012 vcrun2022 msls31
winetricks dotnetdesktop6 dotnetdesktop7 dotnetdesktop8 dotnetdesktop9 ole32

将winecfg中的Windows版本再次改回Windows11。
最后下载并安装.Net Desktop Runtime 8.0.27,这是最新的VOCALOID6编辑器使用与依赖的库。
下载地址很好找,注意是微软官方的下载地址,下载完毕之后按照普通的程序安装流程安装即可。
如果之后无法运行VOCALOID6编辑器的话,或许8.0.13与8.0.21也需要下载并安装。
注意:x86(32位)与x64(64位)都需要安装。

3.现在开始安装VOCALOID6的编辑器与未来猫(初音未来)的声库。
直接在VOCALOID的官方网站下载试用版(之后如果运行一切没有问题的话,再使用正版密钥进行激活也可以)。
解压下载到的VOCALOID6_Update_6.13.0_Win.zip,安装解压好的VOCALOID6_Editor_Installer.exe。
再安装我预先通过正版下载码下载到的(没错,我买了正版的VOCALOID6编辑器+未来猫音源的软件包)未来猫音色库安装文件,此处不提供程序名称与下载地址。
将之前下载的mf-installcab_steamdeck文件夹中的mfplat.dll拷贝至VOCALOID6编辑器所在的目录之下(/home/(用户名)/.wine/drive_c/Program Files/VOCALOID6/Editor中)。

4.在其他网站之中下载wbemcomn.dll,framedynos.dll,cimwin32.dll,wmisvc.dll,wbemcore.dll,fastprox.dll,esscli.dll,wbemsvc.dll,32位与64位的都要下载。
【如果有在另外一台电脑之中安装Windows11的话,最好从那里直接拷贝这些dll文件。】
下载完毕之后,对于wbemcomn.dll,cimwin32.dll(这个只下载64位的),wmisvc.dll(只下载64位),wbemcore.dll,fastprox.dll,esscli.dll,wbemsvc.dll,32位的dll文件拷贝至.wine/drive_c/windows/syswow64/wbem中,64位的dll文件拷贝至.wine/drive_c/windows/system32/wbem中;
对于其他的dll,32位的dll文件拷贝至drive_c/windows/syswow64中,64位的dll拷贝至drive_c/windows/system32中。
如果文件夹中已有这些文件,记得对原文件进行备份。
打开syswow64/wbem与system32/wbem文件夹,运行:
wine regsvr32 fastprox.dll esscli.dll wbemcomn.dll cimwin32.dll wmisvc.dll wbemcore.dll wbemsvc.dll
(在打开syswow64/wbem注册时,请自行去除只下载了64位的文件)

5.运行wine regedit,进行以下注册表的录入:

[HKEY_CLASSES_ROOT\WOW6432Node\Interface\{9556DC99-828C-11CF-A37E-00AA003240C7}]
@="IWbemServices"
[HKEY_CLASSES_ROOT\WOW6432Node\Interface\{9556DC99-828C-11CF-A37E-00AA003240C7}\NumMethods]
@="40"
[HKEY_CLASSES_ROOT\WOW6432Node\Interface\{9556DC99-828C-11CF-A37E-00AA003240C7}\ProxyStubClsid32]
@="{D68AF00A-29CB-43FA-8504-CE99A996D9EA}"
[HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{D68AF00A-29CB-43FA-8504-CE99A996D9EA}]
@="Microsoft WBEM (non)Standard Marshaling for IWbemServices"
[HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{D68AF00A-29CB-43FA-8504-CE99A996D9EA}\InprocServer32]
@=hex(2):25,00,73,00,79,00,73,00,74,00,65,00,6d,00,72,00,6f,00,6f,00,74,00,25,\
  00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,77,00,62,00,\
  65,00,6d,00,5c,00,66,00,61,00,73,00,74,00,70,00,72,00,6f,00,78,00,2e,00,64,\
  00,6c,00,6c,00,00,00
"ThreadingModel"="Both"
[HKEY_CLASSES_ROOT\WOW6432Node\Interface\{F50A28CF-5C9C-4F7E-9D80-E25E16E18C59}]
@="Internal_IWbemServices"
[HKEY_CLASSES_ROOT\WOW6432Node\Interface\{F50A28CF-5C9C-4F7E-9D80-E25E16E18C59}\NumMethods]
@="26"
[HKEY_CLASSES_ROOT\WOW6432Node\Interface\{F50A28CF-5C9C-4F7E-9D80-E25E16E18C59}\ProxyStubClsid32]
@="{7C857801-7381-11CF-884D-00AA004B2E24}"
[HKEY_CLASSES_ROOT\Interface\{F50A28CF-5C9C-4F7E-9D80-E25E16E18C59}]
@="Internal_IWbemServices"
[HKEY_CLASSES_ROOT\Interface\{F50A28CF-5C9C-4F7E-9D80-E25E16E18C59}\NumMethods]
@="26"
[HKEY_CLASSES_ROOT\Interface\{F50A28CF-5C9C-4F7E-9D80-E25E16E18C59}\ProxyStubClsid32]
@="{7C857801-7381-11CF-884D-00AA004B2E24}"

6.下载mscoree.dll,拷贝至64位system32文件夹与32位syswow64文件夹中,分别重新注册:
wine regsvr32 mscoree.dll

7.打开这里,下载最新版本的dxvk:

备份好所有原文件之后,解压所有x32文件夹下的文件至syswow64,解压所有x64文件夹下的文件至system32。

8.我们首先解决Kontakt8安装至Ubuntu Studio,如果按照最正常的安装方法,安装Kontakt8时会卡在“正在计算系统需求”…大概是这样的提示——使用KDE系统监视器强行终止Kontakt8的安装程序(类似于Kontakt8 Setup的进程),这样的话不会自动删掉Kontakt8的离线安装程序。
解压Kontakt8的离线安装包(zip)文件,提取出exe文件,使用Ark压缩管理器打开,解压缩所有文件至一个目录之中。
在此之前,从Native Instrument官方网站中下载加载与管理Native系列产品的程序,并按照正常方式安装。
随后,在这里下载wine-cachyos的源文件:
https://github.com/CachyOS/wine-cachyos/archive/refs/tags/cachyos-11.0-20260702-proton-slr.tar.gz
另外在浏览器中持续打开这个项目:

在此之前先运行:

sudo dpkg --add-architecture i386
sudo apt update
sudo apt install libvkd3d1 libxfixes-dev libxt-dev g++-multilib gcc-multilib mingw-w64
sudo apt install libasound2-dev:i386 libpulse-dev:i386 libdbus-1-dev:i386 libgnutls28-dev:i386 libgl-dev:i386 libunwind-dev:i386 libx11-dev:i386 libxcomposite-dev:i386 libxcursor-dev:i386 libxfixes-dev:i386 libxi-dev:i386 libxrandr-dev:i386 libxext-dev:i386 libwayland-dev:i386 libegl-dev:i386 libxkbcommon-dev:i386 libxkbregistry-dev:i386 libgstreamer1.0-dev:i386 libosmesa6-dev:i386 libsdl2-dev:i386 libudev-dev:i386 libvulkan-dev:i386 libcapi20-dev:i386 libcups2-dev:i386 libgphoto2-dev:i386 libsane-dev:i386 libkrb5-dev:i386 samba-dev:i386 ocl-icd-opencl-dev:i386 libpcap-dev:i386 libv4l-dev:i386

运行:

./autogen.sh
./configure --without-freetype
make

在Ubuntu Studio中编译这个版本的wine源码包会有错误弹出,有一些是类似于需要将"wine/vulkan.h"更为<vulkan/vulkan.h>,然后将vkd3d_vk_includes.h按照这里改30行以内的不同的内容;另外一些是需要完全更换源文件的操作,…请自行操作。
类似于这样的问题还很多,请编译wine-cachyos-cachyos-11.0-… 这个文件夹,另外持续关注终端输出,将浏览器中打开项目中的文件替换掉这个文件夹中的文件。
编译至dll/win32u/opengl.c时会报错,此时需要手动将一些类与函数移至文件头。需要一些编程的能力,如果你不懂编程,最好将这个文件发给懂编程的同伴,请求帮忙修改。
下载Xfixes.h与XInput2.h拷贝至/usr/include/X11/extensions之中。
编译至dlls/winex11.drv/mouse.c时会报错,打开winex11.drv/xfixes.h,注释掉这两行:

#ifdef SONAME_LIBXFIXES
#endif /* defined(SONAME_LIBXFIXES) */

另外打开mouse.c,注释掉这两行:

pXFixesHideCursor( data->display, root_window );
pXFixesShowCursor( data->display, root_window );

参照这里修改winex11.drv/window.h:

注释掉window.c中的这一行:
if (!strcmp( name, “xwayland_glx_nvidia” ))
以及下面一行(return XQueryExtension…)。
编译完毕之后重新运行./configure --without-freetype --enable-win64,再编译一遍,这样的话就会同时生成32位与64位的文件。
第二次编译(无论第二次编译32位还是64位)需要删除tools/widl下的所有.o文件(同时,也需要随时关注终端输出,删除需要删除的.o文件)。

9.我们不需要安装这个版本的wine至Ubuntu Studio之中,而只是用来提取一些编译好的文件(msi.dll,msvcrt.dll,ucrtbase.dll,wmiutils.dll(拷贝至system32/wbem与syswow64/wbem),wbemdisp.dll(同左),wbemprox.dll(同左)与msiexec.exe)。
提前做好原文件备份之后,拷贝wine编译根目录下的dlls/msi/x86_64-windowsmsi.dll至system32/msi.dll,以及拷贝programs/msiexec/x86_64-windowsmsiexec.exe至system32/msiexec.exe,运行如下命令:

wine regsvr32 msi.dll
wine msiexec /unregister
wine msiexec /regserver

拷贝32位的msi.dll与msiexec.exe的方法,以及拷贝msvcrt.dll等文件也一样。
运行以下命令:
winetricks dotnet35 dotnet40 dotnet40_kb2468871 dotnet45 dotneotnet452 dotnet46 dotnet461 dotnet462 dotnet471 dotnet472 dotnet48

10.下载最新版本的Windows11SDK,准备使用Orca编辑Kontakt8的msi安装文件,下载地址可以自行查找。
安装Windows11SDK时,注意不要在有中文的文件路径下运行。
Ubuntu Studio不支持直接打开Windows11SDK的iso文件,所以需要另外下载7-zip安装至Wine中,再使用7-zip打开此iso文件。
或者直接下载ocra.msi,下载地址可以自行查找。
使用Orca打开Kontakt 8 Setup PC.msi,删去AdminUISequence表中的CostInitialize值,备份原文件完毕之后,覆盖保存这个文件,然后运行Kontakt 8 Setup PC.exe,安装程序正常运行——能够正常安装完毕Kontakt8了。
(注意:每次Kontakt8的更新,都需要首先通过Native Instrument的管理工具进行下载,然后提取Kontakt8安装文件,解压,提取msi文件,进行改动并安装…这些步骤。)

11.我的环境下就这样运行Kontakt8(Native Instrument之中),能够启动成功并顺利显示界面,但加载音源时会崩溃…解决方法是重新安装vcrun2022(如果没有效果的话,通过终端运行winetricks --force vcrun2022,并追踪至c:/windows/temp/_vcrun2022/,在这里拷贝msvcp140*.dll文件至system32与syswow64文件夹之中),问题解决。
打开winecfg,启用虚拟桌面(显示选项卡中),虚拟桌面的宽与高改成你的显示器的宽与高,这样的话Ardour之下也能够正常显示,加载音源了(如何在Ardour加载Kontakt8,这是本文末尾要提及的)。

12.在这里下载Yabridge:

下载之后,按照这里的指引进行配置:

此时我已经安装了VOCALOID6(无法运行),VOCALOID4(安装过程略,其实很简单)以及Native Instruments的音源系列至:
/home/(用户名)/.wine/drive_c/Program Files/Vstplugins
/home/(用户名)/.wine/drive_c/Program Files/Common Files/VST3
那么应该运行如下命令:

yabridgectl add "/home/(用户名)/.wine/drive_c/Program Files/Vstplugins"
yabridgectl add "/home/(用户名)/.wine/drive_c/Program Files/Common Files/VST3"
yabridgectl sync(这条命令在每次更新如上文件夹的音源,例如添加或移除音源之后,必须运行)

最后打开Ardour(或者其他工作站程式),将/home/(用户名)/.vst以及/home/(用户名)/.vst3添加至扫描音源列表之中,扫描音源,就可以在Ubuntu Studio原装的Ardour中使用VOCALOID4与Kontakt8了。

以上步骤或许有很多地方是多余的,毕竟是我一边进行配置,出错与碰钉子的时候一边整理出来的,如果发现有多余的地方,不需要执行就可以了。
根据以上步骤进行之后,试着运行VOCALOID6的时候,最好的结果是这样:

DOTNET_ROOT="C:\Program Files\dotnet" WINEDEBUG=+loaddll wine "/home/nanochima/.wine/drive_c/Program Files/VOCALOID6/Editor/VOCALOID6.exe"
The following results are output in the terminal:
System.Windows.Markup.XamlParseException: Set property 'System.Windows.Controls.Primitives.ButtonBase.Command' threw an exception.
 ---> System.TypeInitializationException: The type initializer for 'Yamaha.VOCALOID.App' threw an exception.
 ---> System.InvalidCastException: Specified cast is not valid.
   at System.Runtime.InteropServices.Marshal.ThrowExceptionForHR(Int32 errorCode, IntPtr errorInfo)
   at System.Management.ManagementObject.Initialize(Boolean getObject)
   at System.Management.ManagementBaseObject.get_wbemObject()
   at System.Management.ManagementBaseObject.get_ClassName()
   at System.Management.ManagementClass.GetInstances(EnumerationOptions options)
   at System.Management.ManagementClass.GetInstances()
   at Yamaha.VOCALOID.App.<>c.<.cctor>b__124_2()
   at Yamaha.VOCALOID.App.<>c.<.cctor>b__124_0()
   at Yamaha.VOCALOID.App..cctor()
   --- End of inner exception stack trace ---
   at Yamaha.VOCALOID.App.get_ContentRenderDone()
   at Yamaha.VOCALOID.DelegateCommand.CanExecute(Object parameter)
   at System.Windows.Controls.Primitives.ButtonBase.UpdateCanExecute()
   at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
   at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
   at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
   at System.Windows.DependencyObject.SetValue(DependencyProperty dp, Object value)
   at MS.Internal.Xaml.Runtime.ClrObjectRuntime.SetValue(Object inst, XamlMember property, Object value)
   --- End of inner exception stack trace ---
   at System.Windows.Markup.XamlReader.RewrapException(Exception e, IXamlLineInfo lineInfo, Uri baseUri)
   at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
   at System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri)
   at System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream)
   at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)
   at Yamaha.VOCALOID.MainWindow.InitializeComponent()
   at Yamaha.VOCALOID.MainWindow..ctor()
   at Yamaha.VOCALOID.App.OnStartup(StartupEventArgs e)
   at System.Windows.Application.<.ctor>b__1_0(Object unused)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
   at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
   at MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Windows.Threading.DispatcherOperation.Invoke()
   at System.Windows.Threading.Dispatcher.ProcessQueue()
   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
   at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
   at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
   at System.Windows.Application.RunDispatcher(Object ignore)
   at System.Windows.Application.RunInternal(Window window)
   at Yamaha.VOCALOID.App.Main()

…若是继续下去,可能涉及到.NET或是反编译的知识,这些我一窍不通,所以只能暂且作罢。
如果谁有看到这次的过程记录,欢迎留言,在此感激不尽…我还能够做的就是随时关注wine的动态,直至有一天wine对VOCALOID6的兼容性更好。
感谢您看到最后。

== 参考资料
https://www.sysgeek.cn/ubuntu-wine/
https://featherp.com/2024/12/14/迁移数字音频工作站到Linux-使用Ardour-yabridge-wine在Linux下打造完整的音频工作环境/

May I suggest a different approach? Your command of the English language seems to be rather good and it’s really hard for someone who doesn’t speak Chinese, or any other foreign language, for that matter, to judge if the automatic translation is any good; especially when idioms are involved, translations can sometimes be comically incorrect — imagine diplomats using it and it triggering some international incident. :wink:
So how about you filter your text through the auto-translation and correct it? That is actually the more productive/efficient use of such tools; help the (human) translator with the boring stuff. Plus, only one invocation of said auto-translation is required — the one for the author (you) — and not every recipient; two distinct readers of the same native language might even end up with different translations, each ever so slightly wrong in a different way. While LLM-based translations have become quite good, I have yet to see a flawless one.

1 Like

I have to agree with @peterwhite23 here. This is an English discourse, and any tutorials such as this, therefore, must be written in English. However, I’m going to try to find a place where you can post it. One of the volunteers with Ubuntu Studio runs ubuntustudio.cn and I think that would be a perfect place to contribute.

Actually, Peter, any command of the English language was likely done by a translation application. This person has admitted, in the past, that they don’t know any English at all. Therefore I think @nanochima’s energy would be best spent with a Chinese site like ubuntustudio.cn which is the unofficial Chinese Ubuntu Studio site.

5 Likes

Um… what you’re seeing now is the result of me translating Simplified Chinese into English using Bing Translate. My English is actually really bad, only good enough to understand some computer terms. I’m really sorry. :slightly_frowning_face:

1 Like

…I just want to share my experience using and exploring Ubuntu Studio here, to help more people. In order for everyone to accurately understand the content of this record and avoid mistakes, I need to paste the original content here first, and then have you translate it using your translation function. Also, I can’t find any way to contact the webmaster of ubuntustudio.cn. :slightly_frowning_face: :slightly_frowning_face: :slightly_frowning_face:

No, that’s not the way it works here. There is no translation function on this site, and you can’t expect everyone to translate from you language to another when this is an English site.

I did that for you. :slight_smile:

1 Like

Well… I use the built-in translation function of Firefox or Microsoft Edge. If you can’t use it, I will try to change the text to pure English later, but I can’t guarantee the quality of the translation… Because I’m using Bing’s translation. :slightly_frowning_face: :slightly_frowning_face: :slightly_frowning_face: :slightly_frowning_face: :slightly_frowning_face:

I am the owner of ubuntustudio.cn, just updated a page to reach me.
Mailing me the username and email and I will create an account for you.

Chinese:

我更新邮箱了,可以私信我邮箱,我给你注册账号。

https://ubuntustudio.cn/index.php?title=UbuntustudioCN:关于

4 Likes

It has been replied. Please check your email. I have written a lot of suggestions, hoping to be paid attention to.

1 Like