网络营销的企业有哪些,福州搜索引擎优化公司,wordpress主题如何升级,广州品牌网站设计建设之前根据B站教程《在linux上安装微软office》#xff1a;在linux上安装微软office_哔哩哔哩_bilibili
写过一篇使用KVM虚拟机安装Microsoft OfficeRDP远程控制的文章#xff0c;根据B站的教程安装后#xff0c;发现有远程控制延迟的问题#xff0c;比如拖动Office窗口时会…
之前根据B站教程《在linux上安装微软office》在linux上安装微软office_哔哩哔哩_bilibili
写过一篇使用KVM虚拟机安装Microsoft OfficeRDP远程控制的文章根据B站的教程安装后发现有远程控制延迟的问题比如拖动Office窗口时会延迟搜狗输入法扫一下就闪退插入形状后无法调整大小无法调整图片大小等问题。而且最大的问题是如果你不提前关闭KVM虚拟机就得等待Linux关机时杀掉KVM虚拟机的libvirt 进程导致关机需要很长时间。已知Linux开机时会同步开启KVM虚拟机的libvirt 进程这个libvirt 进程经常导致Linux系统崩溃开机时黑屏。停留在只有一条白色下杠的页面。
因此Winapps最新版本提供了解决方案推荐用户使用Docker或者Podman安装Microsoft Office RDP远程控制。降低了系统崩溃的概率。接下来我将带大家如何进行安装和设置。 系统Ubuntu24.04 前提已经安装了Docker 不会安装Docker的请查看《Ubuntu24.04安装Docker》的文章 一、从github下载winapps
在必应搜索“winapps github” 复制HTTPS的下载链接https://github.com/Fmstrat/winapps.git
进入/opt目录通过git clone把winapps下载到/opt目录下
yammiemy-pc /opt
$ git clone https://github.com/Fmstrat/winapps.git 为了后续执行不受权限的干扰给winapps中的所有文件授予777权限。
yammiemy-pc /opt
$ sudo chmod 777 -r ./winapps 此时winapps的所有者和权限如图 进入winapps/docs阅读docker.md的安装步骤。里面提示可以通过docker或者podman进行安装此处我们选择docker。 二、阅读并修改compose.yaml
1. compose.yaml的内容
打开compose.yaml阅读里面的设置要点。修改为以下内容复制粘贴即可
name: winapps
volumes: # Linux系统中通过建立_data目录来作为Docker镜像的数据卷# 此处默认注释执行compose.yaml时它也会默认安装到下面的目录# Located /var/lib/docker/volumes/winapps_data/_data (Docker).# Located /var/lib/containers/storage/volumes/winapps_data/_data or ~/.local/share/containers/storage/volumes/winapps_data/_data (Podman).data:
services: # 服务器windows: # Windows的镜像容器image: dockurr/windows # 指定从github中下载dockur/windows的Docker镜像container_name: WinApps # 创建Docker容器名称为WinAppsenvironment: # 要配置的Windows镜像版本环境。要选择Windows版本请访问VERSION: core11 # https://github.com/dockur/windows ; 下拉即可看到各种Windows版本。RAM_SIZE: 4G # 内存: 4GCPU_CORES: 4 # CPU核心数:4DISK_SIZE: 64G # 主硬盘存储空间: 64G#DISK2_SIZE: 32G # 第二块硬盘存储空间:32G。如果你要取消该注释需要保证提供了该硬盘给虚拟机运行LANGUAGE: Chinese # 此处必须要指定安装语言为Chinese不然默认安装EnglishREGION: zh-CN # 此处必须要指定地区为:zh-CN不然默认安装EnglishKEYBOARD: zh-CN # 此处必须要指定键盘为zh-CN不然默认安装EnglishUSERNAME: Docker # Windows虚拟机的用户名默认是Docker,你可以取消注释重命名为其他名字。建议默认PASSWORD: 123456me # Windows虚拟机登录密码自定义即可。不能为空。HOME: ${HOME} # 设置Linux用户主文件夹的路径privileged: true # 授予Windows 虚拟机扩展权限ports:- 8006:8006 # 将Linux主机上的“8006”映射到Windows 虚拟机上的“8006”→用于VNC Web界面http://127.0.0.1:8006.- 3389:3389/tcp # 将Linux主机上的“3389”映射到Windows 虚拟机上的“3389”→用于远程桌面协议RDP- 3389:3389/udp # 将Linux主机上的“3389”映射到Windows 虚拟机上的“3389”→用于远程桌面协议RDPstop_grace_period: 120s # 停止宽限期 ;当你去关闭Windows虚拟机时,等待120秒后才会发送SIGTERM信号去终止Windows的镜像容器进程。SIGTERM 信号提供了一种优雅的方式来终止程序。restart: on-failure # 如果退出代码指示错误将重新启动Windows VMvolumes: # Windows虚拟机的数据卷- data:/storage # 挂载上面Linux系统中的_data数据卷作为Windows虚拟机的C盘- ${HOME}:/shared # 挂载Linux用户的home目录,作为Windows虚拟机的远程网络共享目录,名称为: \\host.lan\Data.#- /path/to/second/hard/disk:/storage2 # 确保上面指定了第二块硬盘,取消注释,就会为Windows虚拟机加载第二块硬盘- ./oem:/oem # 自动触发“oem/install.bat”的安装应用含有oem/RDPApps.reg的Windows注册表修改。- /opt/winapps/iso/tiny11_core11.iso:/custom.iso #取消注释使用自己下载的Windows.iso文件。一旦使用自己的iso文件上面environment设定的 VERSION: core11 将会被忽略。devices: # 设备- /dev/kvm # 启动 KVM.#- /dev/sdX:/disk1 # 取消注释直接在Windows VM中挂载磁盘注意“disk1”将作为主驱动器挂载#- /dev/sdY:/disk2 # 取消注释直接在Windows VM中装载磁盘注意“disk2”及更高版本将作为辅助驱动器装载有关文档、常见问题解答、其他配置选项和技术帮助请访问GitHub的dockurr/windows的Docker镜像容器https://github.com/dockur/windows (1) 注意请不要使用Tab来调整注释位置yaml文件不能识别Tab不然执行会报错 yaml: line 19: found character that cannot start any token
(2) 原来的compose.yaml中 - ./oem:/oem 和 - /opt/winapps/iso/tiny11_core11.iso:/custom.iso 默认是注释掉的。意味着我们默认从environment设定的 VERSION: core11 来下载Tiny 11 Core版本的Win11网速不够快的情况下用时超长。
因此我们建议取消对- ./oem:/oem 和 - /opt/winapps/iso/tiny11_core11.iso:/custom.iso的注释。直接从指定的网站下载我们需要的iso文件。iso文件放在/opt/winapps/iso/目录下。iso目录需要我们自行创建。
指定本地的iso文件后直接忽略了environment设定的 VERSION: core11 的下载 加快了加载win11的速度。
(3) image: dockurr/windows是 ‘‘rr’’结尾但是github里面该项目是dockur/windows少了1个r可能是创作者过往遗留的路径名称问题compose.yaml使用的是rr结尾的dockurr/windows不要写错了。 2、疑难解答
(1) 什么是数据卷(Volumes)
Docker镜像被存储在一系列的只读层中。当我们创建一个容器时Docker会读取镜像只读并在其顶部添加一层读写层。如果正在运行中的容器修改了现有文件该文件将会被拷贝出底层的只读层放到最顶层的读写层中。读写层中原来的旧版本文件未被更改过的文件仍然存在于镜像中。
所以当Docker容器被删除后再基于原来的镜像创建容器时将创建一个没有任何数据更改的容器在之前那个容器中的数据更改会丢失掉。只读层和读写层的组合被Docker称为联合文件系统Union File System。
为了能够持久化这些更改过的数据并且能够很容易实现容器间共享数据Docker提出了Volume的概念。Volume是外部默认的联合文件系统或者是存在于宿主文件系统中正常的文件或文件夹。 (2) 为什么需要数据卷
这得从Docker容器的文件系统说起。出于效率等一系列原因Docker容器的文件系统在宿主机上存在的方式很复杂这会带来下面几个问题
不能在宿主机上很方便地访问容器中的文件。 无法在多个容器之间共享数据。 当容器删除时容器中产生的数据将会丢失。 为了解决这些问题Docker引入了数据卷(Volume) 机制。数据卷以独立于Docker文件系统的形式存在于宿主机中。数据卷的最大特点是其生存周期独立于容器的生存周期。
数据卷的设计目的就是数据的持久化因为其生存周期独立于容器的生存周期因此Docker不会在容器删除时删除其挂载的数据卷。所以数据卷可以带来以下好处
数据卷可在容器之间共享或重用数据。 数据卷的更改可以直接生效。 数据卷的生命周期一直持续到没有容器使用它为止。 对数据卷操作不会影响到镜像本身。 数据卷可以完成容器到宿主机、宿主机到容器以及容器到容器之间的数据共享。 (3) 什么是 SIGTERM信号 15
SIGTERM信号 15在基于 Unix 的操作系统如 Linux中用于终止进程。SIGTERM 信号提供了一种优雅的方式来终止程序使其有机会准备关闭并执行清理任务或者在某些情况下拒绝关闭。Unix/Linux 进程可以以多种方式处理 SIGTERM包括阻塞和忽略。
SIGTERM 是 Unix/Linux kill 命令的默认行为当用户执行 kill 时操作系统会在后台向进程发送 SIGTERM。如果过程不在 Docker 容器中通过 SIGTERM 信号终止的容器在其日志中显示退出码 143。如果您是 Kubernetes 用户本文将帮助您了解 Kubernetes 终止容器时幕后发生的情况以及如何在 Kubernetes 中使用 SIGTERM 信号。 (4) KVM是什么 KVM是Keyboard Video Mouse的缩写KVM 通过直接连接键盘、视频或鼠标 (KVM) 端口能够访问和控制计算机。KVM 技术无需目标服务器修改软件。这就意味着可以在BIOS环境下随时访问目标计算机。KVM 提供真正的主板级别访问并支持多平台服务器和串行设备。 三、下载指定的Windows系统的iso
因为上面compose.yaml默认从下面的网站下载iso文件所以我们就从这里进去选定要安装的Windows版本。
dockurr/windows指定的Windows系统下载区https://file.cnxiaobai.com/Windows/%E7%B3%BB%E7%BB%9F%E5%AE%89%E8%A3%85%E5%8C%85/ 此处我选择tiny11 core x64 beta 1.iso下载。下载位置为/opt/winapps/iso/ 一定要跟compose.yaml指定的iso文件路径对应上 四、通过docker compose启动compose.yaml安装Windows系统到dockurr/windows的镜像容器
yammiemy-pc /opt
$ cd ./winappsyammiemy-pc /opt/winapps
$ docker compose --file ./compose.yaml up接着终端提示进入http://127.0.0.1:8006的端口在浏览器中进行Windows系统的安装。
安装过程略。 五、把修改后的compose.yaml复制到~/.config/winapps
安装完毕后修改 /opt/winapps/compose.yaml把以下内容注释掉 # - ./oem:/oem #- /opt/winapps/iso/tiny11_core11.iso:/custom.iso
接着把修改后的compose.yaml复制到~/.config/winapps
yammiemy-pc /opt
$ sudo mkdir ~/.config/winappsyammiemy-pc /opt
$ sudo cp ./compose.yaml ~/.config/winapps六、停掉并删除 /opt/compose.yaml启动的容器然后通过~/.config/winapps/compose.yaml启动新的容器
yammiemy-pc /opt
$ docker compose --file ./compose.yaml downyammiemy-pc /opt
$ docker compose --file ~/.config/winapps/compose.yaml up打开http://localhost:8006/看到Windows系统能够运行即可。记住用户名为:Docker以及你自定义的密码123456me。等会用来写WinApps的配置文件。 七、进入Windows系统后进行各种安装和设置
1、设置系统名称为RDPWindows
开始→设置→主页点击重命名→命名为RDPWindows 2、在微软商店下载浏览器
我下载的是火狐浏览器 3、在浏览器中下载搜狗输入法并安装 4、下载Microsoft Office安装器
office-toolshttps://otp.landian.vip/zh-cn/
安装步骤
注意注意以前安装过office要先卸载旧的才能安装 若是没有安装过的 跳过这一步 直接看下面。 安装过的 点击 工具箱---office工具---移除office后即可 ① 打开tool plus 按照以下步骤依次执行 ② 点击 设置---部署---启用显示内部产品和通道 ③ 点击 部署---更新通道---选择最后一个 beta channel 同时安装模块选择office tool plus ④ 点击 添加产品---搜索框中输入 2024 ---选择office LTSC 专业增强版 2024 批量许可 即可 其他2024 还有专业版同理同时语言设置中文 ⑤ 点击部署即可
5、激活系统和Microsoft Office 6、重点注销Docker用户等会进行WinApps的安装时必须要先注销不然报错。 八、安装WinApps的依赖并书写配置文件
1、安装WinApps的依赖
yammiemy-pc /opt
$ sudo apt-get install dialog yammiemy-pc /opt
$ sudo apt-get install freerdp3-x11 2、书写配置文件
(1) 创建设置文件夹
yammiemy-pc /opt
$ sudo mkdir ~/.config/winapps
(2) 编辑设置文件
yammiemy-pc /opt
$ sudo touch ~/.config/winapps/winapps.conf
(3) 授予777权限方便日后我们修改里面的用户名和密码
yammiemy-pc /opt
$ sudo chmod 777 ~/.config/winapps/winapps.conf
(4) 写入我们在Win11设置好的用户名和密码
yammiemy-pc /opt
$ sudo gedit ~/.config/winapps/winapps.conf 九、在用户层级安装WinApps
1、修改/opt/installer.sh
定位到/opt/installer.sh的第76、77行MyWindowsUser修改为DockerMyWindowsPassword修改为123456me 2、进入/opt目录执行./installer.sh安装WinApps
如果是sudo ./installer.sh安装安装界面会识别成root用户。 如果是./installer.sh安装安装界面会识别成当前用户。
我们在执行./installer.sh时建议不要使用sudo ./installer.sh在root层级安装WinApps会涉及权限问题。最好是直接执行./installer.sh在用户层级安装WinApps。方便日后无需权限去修改WinApps相关的内容。
执行以下命令
yammiemy-pc /opt
$ ./installer
按图选择 安装成功此时双击Word可以成功开启。
请注意Windows虚拟机请保持Docker用户在注销状态Linux用户才能通过WinApps远程遥控Windows虚拟机的Microsoft Office。 十、如果~/.config/winapps/compose.yaml发生了修改需要执行以下命令
如果~/.config/winapps/compose.yaml发生了修改Windows镜像容器需要被移除和重新创建这并不会影响磁盘里面的数据。注意通过查看~/.config文件夹的属性这是用户层级下创建的文件夹无需sudo去操作。 1、停止并删除存在的Windows镜像容器
yammiemy-pc /opt/winapps
$ docker compose --file ~/.config/winapps/compose.yaml down 2、删除存在的FreeRDP证书移除证书后WinApps不再起作用
yammiemy-pc /opt/winapps
$ rm ~/.config/freerdp/server/127.0.0.1_3389.pem 3、删除WinApps的远程控制以及图标但是不删除/home/yammie/.config/winapps因为里面的配置文件我们等会还要用
yammiemy-pc /opt/winapps
$ ./installer.sh --user --uninstall 4、重建并启动Windows的镜像容器此时WinApps并无对该系统进行远程控制
yammiemy-pc /home/yammie
$ docker compose --file ~/.config/winapps/compose.yaml up
5、进入http://localhost:8006确保你已经注销Docker用户接着 缩小或者关闭浏览器都行 6、重新执行WinApps的安装程序才能生成新的pem证书和远程软件图标快捷方式
yammiemy-pc /opt/winapps
$ ./installer.sh
按《八、在用户层级安装WinApps》的教程即可 十一、当Windows镜像容器卡死如何解决
注意有时候RDP Windows 相关的进程会卡死通过 docker compose --file ~/.config/winapps/compose.yaml kill 也无法kill掉docker容器的情况下。
需要通过搜索ps -aux|grep RDP 找到RDP的PID第二个16677就是了
yammiemy-pc /home/yammie $ ps -aux|grep RDP yammie 16677 0.0 0.0 9304 2304 pts/0 S 02:27 0:00 grep --colorauto RDP 然后kill -9 PID即可。一定要添加-9选项不然不能强制kill掉RDP进程
yammiemy-pc /home/yammie
$ kill -9 16677
然后通过容器重启
yammiemy-pc /home/yammie
$ docker compose --file ~/.config/winapps/compose.yaml start 十二、docker的其它命令
docker compose --file ~/.config/winapps/compose.yaml start # 启动Windows镜像容器
docker compose --file ~/.config/winapps/compose.yaml pause # 暂停Windows镜像容器
docker compose --file ~/.config/winapps/compose.yaml unpause # 唤醒Windows镜像容器
docker compose --file ~/.config/winapps/compose.yaml restart # 重启Windows镜像容器
docker compose --file ~/.config/winapps/compose.yaml stop #优雅关闭Windows镜像容器用时很长
docker compose --file ~/.config/winapps/compose.yaml kill #暴力关闭Windows镜像容器用时很短
docker compose --file ~/.config/winapps/compose.yaml down #停止并删除Windows镜像容器 十三、创建启动和暴力关闭Windows镜像容器的桌面快捷方式
1、创建图标
(1) 进入 /opt/winapps/icons复制windows.svg 2次创建两个副本分别命名为close_Winapps.svg 和 open_Winapps.svg (2) 分别编辑close_Winapps.svg 和 open_Winapps.svg的颜色代码设置如下 ① close_Winapps.svg stop offset0 stop-colororange/stop offset.4 stop-colororange/stop offset1 stop-colororange/② open_Winapps.svg stop offset0 stop-color#CCFF66/stop offset.4 stop-color#CCFF66/stop offset1 stop-color#CCFF66/ (3) 在~/桌面创建两个desktop文件
yammiemy-pc /home/yammie/桌面
$ touch close_Winapps.desktopyammiemy-pc /home/yammie/桌面
$ touch open_Winapps.desktop close_Winapps.desktop [Desktop Entry]
EncodingUTF-8
TypeApplication
Name关闭WinApps
#图标路径
Icon/opt/winapps/icons/close_Winapps.svg
Terminaltrue
Execbash /opt/winapps/Winapps_close_open/close_Winapps.sh open_Winapps.desktop [Desktop Entry]
EncodingUTF-8
TypeApplication
Name打开WinApps
#图标路径
Icon/opt/winapps/icons/open_Winapps.svg
Terminaltrue
Exec/opt/winapps/Winapps_close_open/open_Winapps.sh 此处设置Terminaltrue弹出终端框是为了让用户看到该程序执行状态。 2、创建脚本
(1) 在/opt/winapps下创建Winapps_close_open目录
yammiemy-pc /opt/winapps
$ mkdir Winapps_close_open (2) 创建脚本
yammiemy-pc /opt/winapps/Winapps_close_open
$ touch close_Winapps.shyammiemy-pc /opt/winapps/Winapps_close_open
$ touch open_Winapps.sh close_Winapps.desktop #!/bin/bash
docker compose --file ~/.config/winapps/compose.yaml kill # 暴力关闭WinApps open_Winapps.desktop #!/bin/bash
docker compose --file ~/.config/winapps/compose.yaml start # 开启WinApps 3、右键图标→允许运行
双击黄色图标关闭WinApps。 双击绿色图标开启WinApps。 建议关闭Linux前先关闭WinApps。不然杀后台进程需要挺长时间导致关机时间也会延长。