commit 31ed393818872a618f47c51d9e073d51c23d11aa Author: 谢炜 Date: Thu Jun 2 16:31:41 2022 +0800 Import Upstream version 1.0.3.30hw1 diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..fc9958f --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,4 @@ +cmake_minimum_required(VERSION 3.0) +project(kylin-user-guide) +add_subdirectory(src) +add_subdirectory(icon) diff --git a/README.md b/README.md new file mode 100644 index 0000000..2edbbfd --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +## kylin user guide diff --git a/data/arrows_bottom.png b/data/arrows_bottom.png new file mode 100644 index 0000000..df7e26f Binary files /dev/null and b/data/arrows_bottom.png differ diff --git a/data/arrows_right.png b/data/arrows_right.png new file mode 100644 index 0000000..1ad73bf Binary files /dev/null and b/data/arrows_right.png differ diff --git a/data/gnome-help22.png b/data/gnome-help22.png new file mode 100644 index 0000000..ee1c8ed Binary files /dev/null and b/data/gnome-help22.png differ diff --git a/data/gnome-help32.png b/data/gnome-help32.png new file mode 100644 index 0000000..8937cc3 Binary files /dev/null and b/data/gnome-help32.png differ diff --git a/data/go-top-symbolic.png b/data/go-top-symbolic.png new file mode 100644 index 0000000..e41e34f Binary files /dev/null and b/data/go-top-symbolic.png differ diff --git a/data/guide/atril/atril.png b/data/guide/atril/atril.png new file mode 100644 index 0000000..53592d4 Binary files /dev/null and b/data/guide/atril/atril.png differ diff --git a/data/guide/atril/en_US/image/1.png b/data/guide/atril/en_US/image/1.png new file mode 100644 index 0000000..0585696 Binary files /dev/null and b/data/guide/atril/en_US/image/1.png differ diff --git a/data/guide/atril/en_US/image/10.png b/data/guide/atril/en_US/image/10.png new file mode 100644 index 0000000..a0cb5dc Binary files /dev/null and b/data/guide/atril/en_US/image/10.png differ diff --git a/data/guide/atril/en_US/image/11.png b/data/guide/atril/en_US/image/11.png new file mode 100644 index 0000000..8ae7f7b Binary files /dev/null and b/data/guide/atril/en_US/image/11.png differ diff --git a/data/guide/atril/en_US/image/12.png b/data/guide/atril/en_US/image/12.png new file mode 100644 index 0000000..dd174ed Binary files /dev/null and b/data/guide/atril/en_US/image/12.png differ diff --git a/data/guide/atril/en_US/image/13.png b/data/guide/atril/en_US/image/13.png new file mode 100644 index 0000000..332dac7 Binary files /dev/null and b/data/guide/atril/en_US/image/13.png differ diff --git a/data/guide/atril/en_US/image/14.png b/data/guide/atril/en_US/image/14.png new file mode 100644 index 0000000..12e5aff Binary files /dev/null and b/data/guide/atril/en_US/image/14.png differ diff --git a/data/guide/atril/en_US/image/15.png b/data/guide/atril/en_US/image/15.png new file mode 100644 index 0000000..0746f9b Binary files /dev/null and b/data/guide/atril/en_US/image/15.png differ diff --git a/data/guide/atril/en_US/image/16.png b/data/guide/atril/en_US/image/16.png new file mode 100644 index 0000000..aecc1c1 Binary files /dev/null and b/data/guide/atril/en_US/image/16.png differ diff --git a/data/guide/atril/en_US/image/17.png b/data/guide/atril/en_US/image/17.png new file mode 100644 index 0000000..b6be603 Binary files /dev/null and b/data/guide/atril/en_US/image/17.png differ diff --git a/data/guide/atril/en_US/image/18.png b/data/guide/atril/en_US/image/18.png new file mode 100644 index 0000000..60ca668 Binary files /dev/null and b/data/guide/atril/en_US/image/18.png differ diff --git a/data/guide/atril/en_US/image/19.png b/data/guide/atril/en_US/image/19.png new file mode 100644 index 0000000..f2aef2d Binary files /dev/null and b/data/guide/atril/en_US/image/19.png differ diff --git a/data/guide/atril/en_US/image/2.png b/data/guide/atril/en_US/image/2.png new file mode 100644 index 0000000..95129ec Binary files /dev/null and b/data/guide/atril/en_US/image/2.png differ diff --git a/data/guide/atril/en_US/image/20.png b/data/guide/atril/en_US/image/20.png new file mode 100644 index 0000000..8307831 Binary files /dev/null and b/data/guide/atril/en_US/image/20.png differ diff --git a/data/guide/atril/en_US/image/21.png b/data/guide/atril/en_US/image/21.png new file mode 100644 index 0000000..d6804c0 Binary files /dev/null and b/data/guide/atril/en_US/image/21.png differ diff --git a/data/guide/atril/en_US/image/3.png b/data/guide/atril/en_US/image/3.png new file mode 100644 index 0000000..d85a633 Binary files /dev/null and b/data/guide/atril/en_US/image/3.png differ diff --git a/data/guide/atril/en_US/image/4.png b/data/guide/atril/en_US/image/4.png new file mode 100644 index 0000000..89b32a9 Binary files /dev/null and b/data/guide/atril/en_US/image/4.png differ diff --git a/data/guide/atril/en_US/image/5.png b/data/guide/atril/en_US/image/5.png new file mode 100644 index 0000000..b760aba Binary files /dev/null and b/data/guide/atril/en_US/image/5.png differ diff --git a/data/guide/atril/en_US/image/6.png b/data/guide/atril/en_US/image/6.png new file mode 100644 index 0000000..1a7a93c Binary files /dev/null and b/data/guide/atril/en_US/image/6.png differ diff --git a/data/guide/atril/en_US/image/7.png b/data/guide/atril/en_US/image/7.png new file mode 100644 index 0000000..185f3f0 Binary files /dev/null and b/data/guide/atril/en_US/image/7.png differ diff --git a/data/guide/atril/en_US/image/8.png b/data/guide/atril/en_US/image/8.png new file mode 100644 index 0000000..5a62c6c Binary files /dev/null and b/data/guide/atril/en_US/image/8.png differ diff --git a/data/guide/atril/en_US/image/9.png b/data/guide/atril/en_US/image/9.png new file mode 100644 index 0000000..5eb07ee Binary files /dev/null and b/data/guide/atril/en_US/image/9.png differ diff --git a/data/guide/atril/en_US/image/icon1.png b/data/guide/atril/en_US/image/icon1.png new file mode 100644 index 0000000..8960bcd Binary files /dev/null and b/data/guide/atril/en_US/image/icon1.png differ diff --git a/data/guide/atril/en_US/image/icon10.png b/data/guide/atril/en_US/image/icon10.png new file mode 100644 index 0000000..e1bdde8 Binary files /dev/null and b/data/guide/atril/en_US/image/icon10.png differ diff --git a/data/guide/atril/en_US/image/icon11.png b/data/guide/atril/en_US/image/icon11.png new file mode 100644 index 0000000..ca7e0cd Binary files /dev/null and b/data/guide/atril/en_US/image/icon11.png differ diff --git a/data/guide/atril/en_US/image/icon12.png b/data/guide/atril/en_US/image/icon12.png new file mode 100644 index 0000000..af9c673 Binary files /dev/null and b/data/guide/atril/en_US/image/icon12.png differ diff --git a/data/guide/atril/en_US/image/icon13.png b/data/guide/atril/en_US/image/icon13.png new file mode 100644 index 0000000..fb84bd5 Binary files /dev/null and b/data/guide/atril/en_US/image/icon13.png differ diff --git a/data/guide/atril/en_US/image/icon14.png b/data/guide/atril/en_US/image/icon14.png new file mode 100644 index 0000000..ac92159 Binary files /dev/null and b/data/guide/atril/en_US/image/icon14.png differ diff --git a/data/guide/atril/en_US/image/icon15.png b/data/guide/atril/en_US/image/icon15.png new file mode 100644 index 0000000..b98db43 Binary files /dev/null and b/data/guide/atril/en_US/image/icon15.png differ diff --git a/data/guide/atril/en_US/image/icon16.png b/data/guide/atril/en_US/image/icon16.png new file mode 100644 index 0000000..231ce95 Binary files /dev/null and b/data/guide/atril/en_US/image/icon16.png differ diff --git a/data/guide/atril/en_US/image/icon17.png b/data/guide/atril/en_US/image/icon17.png new file mode 100644 index 0000000..0d1929e Binary files /dev/null and b/data/guide/atril/en_US/image/icon17.png differ diff --git a/data/guide/atril/en_US/image/icon18.png b/data/guide/atril/en_US/image/icon18.png new file mode 100644 index 0000000..0befb75 Binary files /dev/null and b/data/guide/atril/en_US/image/icon18.png differ diff --git a/data/guide/atril/en_US/image/icon19.png b/data/guide/atril/en_US/image/icon19.png new file mode 100644 index 0000000..8c7c6ac Binary files /dev/null and b/data/guide/atril/en_US/image/icon19.png differ diff --git a/data/guide/atril/en_US/image/icon2.png b/data/guide/atril/en_US/image/icon2.png new file mode 100644 index 0000000..f227488 Binary files /dev/null and b/data/guide/atril/en_US/image/icon2.png differ diff --git a/data/guide/atril/en_US/image/icon20.png b/data/guide/atril/en_US/image/icon20.png new file mode 100644 index 0000000..3333b9c Binary files /dev/null and b/data/guide/atril/en_US/image/icon20.png differ diff --git a/data/guide/atril/en_US/image/icon21.png b/data/guide/atril/en_US/image/icon21.png new file mode 100644 index 0000000..e5aad61 Binary files /dev/null and b/data/guide/atril/en_US/image/icon21.png differ diff --git a/data/guide/atril/en_US/image/icon22.png b/data/guide/atril/en_US/image/icon22.png new file mode 100644 index 0000000..47e495e Binary files /dev/null and b/data/guide/atril/en_US/image/icon22.png differ diff --git a/data/guide/atril/en_US/image/icon3.png b/data/guide/atril/en_US/image/icon3.png new file mode 100644 index 0000000..86c6ecc Binary files /dev/null and b/data/guide/atril/en_US/image/icon3.png differ diff --git a/data/guide/atril/en_US/image/icon4.png b/data/guide/atril/en_US/image/icon4.png new file mode 100644 index 0000000..12cc30c Binary files /dev/null and b/data/guide/atril/en_US/image/icon4.png differ diff --git a/data/guide/atril/en_US/image/icon5.png b/data/guide/atril/en_US/image/icon5.png new file mode 100644 index 0000000..0d0c87b Binary files /dev/null and b/data/guide/atril/en_US/image/icon5.png differ diff --git a/data/guide/atril/en_US/image/icon6.png b/data/guide/atril/en_US/image/icon6.png new file mode 100644 index 0000000..f475d3a Binary files /dev/null and b/data/guide/atril/en_US/image/icon6.png differ diff --git a/data/guide/atril/en_US/image/icon7.png b/data/guide/atril/en_US/image/icon7.png new file mode 100644 index 0000000..056c5d0 Binary files /dev/null and b/data/guide/atril/en_US/image/icon7.png differ diff --git a/data/guide/atril/en_US/image/icon8.png b/data/guide/atril/en_US/image/icon8.png new file mode 100644 index 0000000..415dc94 Binary files /dev/null and b/data/guide/atril/en_US/image/icon8.png differ diff --git a/data/guide/atril/en_US/image/icon9.png b/data/guide/atril/en_US/image/icon9.png new file mode 100644 index 0000000..28bb39a Binary files /dev/null and b/data/guide/atril/en_US/image/icon9.png differ diff --git a/data/guide/atril/en_US/index.md b/data/guide/atril/en_US/index.md new file mode 100644 index 0000000..e41665a --- /dev/null +++ b/data/guide/atril/en_US/index.md @@ -0,0 +1,12 @@ +# Atril Document Viewer +To view and read pdf files. + +![Fig 4 Atril-big](image/4.png) + +- Click "![](image/icon18.png)" and "![](image/icon19.png)" to page-up and page-down. + +- It provides page layout size options. + +- The "View" on the menu bar can set the layout of the whole interface, and through the "File" can see the pdf's property. + +![Fig 5 Property](image/5.png) diff --git a/data/guide/atril/zh_CN/image/1.png b/data/guide/atril/zh_CN/image/1.png new file mode 100644 index 0000000..c85a359 Binary files /dev/null and b/data/guide/atril/zh_CN/image/1.png differ diff --git a/data/guide/atril/zh_CN/image/2.png b/data/guide/atril/zh_CN/image/2.png new file mode 100644 index 0000000..92221d1 Binary files /dev/null and b/data/guide/atril/zh_CN/image/2.png differ diff --git a/data/guide/atril/zh_CN/image/3.png b/data/guide/atril/zh_CN/image/3.png new file mode 100644 index 0000000..e286eae Binary files /dev/null and b/data/guide/atril/zh_CN/image/3.png differ diff --git a/data/guide/atril/zh_CN/image/icon1.png b/data/guide/atril/zh_CN/image/icon1.png new file mode 100644 index 0000000..12588c1 Binary files /dev/null and b/data/guide/atril/zh_CN/image/icon1.png differ diff --git a/data/guide/atril/zh_CN/image/icon2.png b/data/guide/atril/zh_CN/image/icon2.png new file mode 100644 index 0000000..5e98f24 Binary files /dev/null and b/data/guide/atril/zh_CN/image/icon2.png differ diff --git a/data/guide/atril/zh_CN/index.md b/data/guide/atril/zh_CN/index.md new file mode 100644 index 0000000..8341bce --- /dev/null +++ b/data/guide/atril/zh_CN/index.md @@ -0,0 +1,230 @@ +# 文档查看器 +## 概述 + +文档查看器是系统自带的一款文档查看工具,主要用于浏览PDF格式文档。 + + +## 打开方式 +- “**开始菜单**” > “**文档查看器**”; +- 在文档图标上右键单击 > “**打开方式**”> “**文档查看器**”; +- “**任务栏**”>“**搜索**”>“**文档查看器**”。 + + +## 基本操作 +点击菜单栏中的“![](image/icon1.png)”、“![](image/icon2.png)”可进行上、下翻页操作,菜单栏显示文档当前所在的页数和文档总页数,支持选择不同的页面缩放比例。 + +![图 1 文档查看器](image/1.png) + +![图 2 选择页面缩放比例](image/2.png) + +使用文档查看器打开文件后,选择“**文件**”> “**属性**”或按下“**Alt+Enter**”键可打开文件属性窗口,查看当前打开文件的属性,包括文件所在位置、作者、创建时间、修改时间、页数等属性。 + +![图 3 查看文件属性](image/3.png) + + +## 菜单栏功能说明 +文档查看器菜单栏功能说明如下表所示。 +表 1 文档查看器菜单栏功能说明 + +| 一级菜单 | 二级菜单 | 说明 | +|------------|--------------|-----------| +| 文件 | 打开 | 打开文档 | +| | 打开副本 | 新窗口打开相同内容文档 | +| | 保存为 | 保存文档至指定路径 | +| | 打印 | 打印文档 | +| | 属性 | 显示文档通用选项 | +| | 关闭 | 关闭文档查看器 | +| 编辑 | 复制 | 复制 | +| | 全选 | 全部选择文档 | +| | 查找 | 检索关键字 | +| | 查找上一个 | 查找上一个关键字结果 | +| | 查找下一个 | 查找下一个关键字结果 | +| | 向左旋转 | 文档向左旋转90度 | +| | 向右旋转 | 文档向右旋转90度 | +| | 工具栏 | 显示工具栏编辑器 | +| | 将当前设置设为默认值 | 保存当前编辑器设置为默认 | +| 视图 | 工具栏 | 是否显示工具栏 | +| | 侧边栏 | 显示侧边栏 | +| | 全屏 | 全屏显示 | +| | 放映 | 放映模式查看文档 | +| | 连续 | 连续查看文档页 | +| | 双页 | 两列查看文档页 | +| | 反转色彩 | 转换为相对颜色 | +| | 光标浏览 | 放置光标浏览文档 | +| | 放大 | 放大文档 | +| | 缩小 | 缩小文档 | +| | 重置缩放 | 恢复正常比例 | +| | 合适页面 | 缩放至页面合适大小 | +| | 合适页宽 | 缩放至合适页面宽度 | +| | 伸展窗口以适应 | 扩展页面窗口 | +| | 重新载入 | 重新加载窗口 | +| 转到 | 上一页 | 切换至上一页 | +| | 下一页 | 切换至下一页 | +| | 第一页 | 切换至第一页 | +| | 最后一页 | 切换至最后一页 | +| 书签 | 添加书签 | 添加标识至当前文档 | +| 帮助 | 目录 | 打开用户手册 | +| | 关于 | 应用声明信息 | + + + \ No newline at end of file diff --git a/data/guide/engrampa/en_US/image/1.png b/data/guide/engrampa/en_US/image/1.png new file mode 100644 index 0000000..839482a Binary files /dev/null and b/data/guide/engrampa/en_US/image/1.png differ diff --git a/data/guide/engrampa/en_US/image/10.png b/data/guide/engrampa/en_US/image/10.png new file mode 100644 index 0000000..ac65cf8 Binary files /dev/null and b/data/guide/engrampa/en_US/image/10.png differ diff --git a/data/guide/engrampa/en_US/image/2.png b/data/guide/engrampa/en_US/image/2.png new file mode 100644 index 0000000..eaa7fb1 Binary files /dev/null and b/data/guide/engrampa/en_US/image/2.png differ diff --git a/data/guide/engrampa/en_US/image/3.png b/data/guide/engrampa/en_US/image/3.png new file mode 100644 index 0000000..4cda4d3 Binary files /dev/null and b/data/guide/engrampa/en_US/image/3.png differ diff --git a/data/guide/engrampa/en_US/image/4.png b/data/guide/engrampa/en_US/image/4.png new file mode 100644 index 0000000..4ed4a81 Binary files /dev/null and b/data/guide/engrampa/en_US/image/4.png differ diff --git a/data/guide/engrampa/en_US/image/5.png b/data/guide/engrampa/en_US/image/5.png new file mode 100644 index 0000000..4c70f05 Binary files /dev/null and b/data/guide/engrampa/en_US/image/5.png differ diff --git a/data/guide/engrampa/en_US/image/6.png b/data/guide/engrampa/en_US/image/6.png new file mode 100644 index 0000000..7f7a3f5 Binary files /dev/null and b/data/guide/engrampa/en_US/image/6.png differ diff --git a/data/guide/engrampa/en_US/image/7.png b/data/guide/engrampa/en_US/image/7.png new file mode 100644 index 0000000..fd58ddc Binary files /dev/null and b/data/guide/engrampa/en_US/image/7.png differ diff --git a/data/guide/engrampa/en_US/image/8.png b/data/guide/engrampa/en_US/image/8.png new file mode 100644 index 0000000..6dc612d Binary files /dev/null and b/data/guide/engrampa/en_US/image/8.png differ diff --git a/data/guide/engrampa/en_US/image/9.png b/data/guide/engrampa/en_US/image/9.png new file mode 100644 index 0000000..c20d274 Binary files /dev/null and b/data/guide/engrampa/en_US/image/9.png differ diff --git a/data/guide/engrampa/en_US/index.md b/data/guide/engrampa/en_US/index.md new file mode 100644 index 0000000..9ae7cae --- /dev/null +++ b/data/guide/engrampa/en_US/index.md @@ -0,0 +1,109 @@ +# Engrampa Archive Manager +## Overview +Compress and unzip files. The main interface as shown in Fig 1. + +![Fig 1 Engrampa Archive Manager](image/1.png) +
+ +## Basic Function +### Create New Archive +#### Create Directly +1) Right click the selected files or folders, choosing "Compress". + +2) Enter the name of archive file, and select the compress format, location. + +![Fig 2 Compress box](image/2.png) + +3) Click "Create". + +#### Through Engrampa +1) Click "Archive" > "New" at the main interface. + +2) Enter the name of archive file and select the location in the popup, as shown in Fig 3. + +![Fig 3 New-big](image/3.png) + +The default format is "tar.gz". Users can change it in the "File Format" fold box or "All Supported Files" combobox. + +3) Clicking "Create". The archive file won't be generated without any file added. + +### View Archive +* Way 1: Right click archive file > "Open With Engrampa Archive Manager" + +* Way 2: Double click archive file + +Name, size, type, date modified will be shown, as Fig 4. + +![Fig 4 View](image/4.png) + +Double click 1.png to see the picture; Double click "pic" folder to enter it and show the contents. + +### Edit Archive +#### Delete +1) Delete single file: + +* Way 1: Right click file > "Delete" + +* Way 2: Select file > Delete + +* Way 3: Delete > select "Files" and specify file name > "Delete" + +As shown in Fig 5: All the files named 1.png will be deleted. + +![Fig 5 "Delete" to remove specified files](image/5.png) + +2) Delete all files: + +* Way 1: Select all files and right click > Delete + +* Way 2: Delete > select "All Files" > "Delete" + +![Fig 6 "Delete" to remove all files](image/6.png) + +#### Rename +Right click file > "Rename" + +### Extract Archive +#### Unzip directly +1) Right click archive file. + +2) Select "uncompress to current path". + +#### Unzip through Engrampa +1) Click "Extract" on the tool bar after openning archive file; Or right click archive file > select "uncompress to specific path…". + +2) The popup as shown in Fig 7. After choosing location, click "Extract". + +![Fig 7 Extract box-big](image/7.png) + +3) If it's an encrypted archive, password will be required. + +![Fig 8 Password required](image/8.png) +
+ +## Advanced Function +### Create Encrypted Archive +When creating, "Other Options" provides function to set the password for this archive file. + +Tips: Currently, only zip, 7z, ear, and war compression formats support encryption. + +![Fig 9 Set password](image/9.png) + +### Extract Specified Files +Users can specify files to be extracted at the bottom of the extract window. + +![Fig 10 Extract specified files](image/10.png) + +All the file with this name in the archive will be extracted; If the file is under the sub directory, the extracted file will include this directory also. + +
+ +## Appdenix +### Shortcut Key + +| Shortcut | Function | +| :------------ | :------------ | +| Delete | Delete | +| Ctrl + A | Select all | +| F2 | Rename | + diff --git a/data/guide/engrampa/engrampa.png b/data/guide/engrampa/engrampa.png new file mode 100644 index 0000000..31e001c Binary files /dev/null and b/data/guide/engrampa/engrampa.png differ diff --git a/data/guide/engrampa/zh_CN/image/1.png b/data/guide/engrampa/zh_CN/image/1.png new file mode 100644 index 0000000..dcb9a4b Binary files /dev/null and b/data/guide/engrampa/zh_CN/image/1.png differ diff --git a/data/guide/engrampa/zh_CN/image/10.png b/data/guide/engrampa/zh_CN/image/10.png new file mode 100644 index 0000000..d16f5e5 Binary files /dev/null and b/data/guide/engrampa/zh_CN/image/10.png differ diff --git a/data/guide/engrampa/zh_CN/image/11.png b/data/guide/engrampa/zh_CN/image/11.png new file mode 100644 index 0000000..36dc071 Binary files /dev/null and b/data/guide/engrampa/zh_CN/image/11.png differ diff --git a/data/guide/engrampa/zh_CN/image/12.png b/data/guide/engrampa/zh_CN/image/12.png new file mode 100644 index 0000000..61a4873 Binary files /dev/null and b/data/guide/engrampa/zh_CN/image/12.png differ diff --git a/data/guide/engrampa/zh_CN/image/2.png b/data/guide/engrampa/zh_CN/image/2.png new file mode 100644 index 0000000..514b39a Binary files /dev/null and b/data/guide/engrampa/zh_CN/image/2.png differ diff --git a/data/guide/engrampa/zh_CN/image/3.png b/data/guide/engrampa/zh_CN/image/3.png new file mode 100644 index 0000000..76d5469 Binary files /dev/null and b/data/guide/engrampa/zh_CN/image/3.png differ diff --git a/data/guide/engrampa/zh_CN/image/4.png b/data/guide/engrampa/zh_CN/image/4.png new file mode 100644 index 0000000..3df31fd Binary files /dev/null and b/data/guide/engrampa/zh_CN/image/4.png differ diff --git a/data/guide/engrampa/zh_CN/image/5.png b/data/guide/engrampa/zh_CN/image/5.png new file mode 100644 index 0000000..075aa22 Binary files /dev/null and b/data/guide/engrampa/zh_CN/image/5.png differ diff --git a/data/guide/engrampa/zh_CN/image/6.png b/data/guide/engrampa/zh_CN/image/6.png new file mode 100644 index 0000000..f2b8cd6 Binary files /dev/null and b/data/guide/engrampa/zh_CN/image/6.png differ diff --git a/data/guide/engrampa/zh_CN/image/7.png b/data/guide/engrampa/zh_CN/image/7.png new file mode 100644 index 0000000..ddcde16 Binary files /dev/null and b/data/guide/engrampa/zh_CN/image/7.png differ diff --git a/data/guide/engrampa/zh_CN/image/8.png b/data/guide/engrampa/zh_CN/image/8.png new file mode 100644 index 0000000..c24110a Binary files /dev/null and b/data/guide/engrampa/zh_CN/image/8.png differ diff --git a/data/guide/engrampa/zh_CN/image/9.png b/data/guide/engrampa/zh_CN/image/9.png new file mode 100644 index 0000000..a8d4c9d Binary files /dev/null and b/data/guide/engrampa/zh_CN/image/9.png differ diff --git a/data/guide/engrampa/zh_CN/image/icon1.png b/data/guide/engrampa/zh_CN/image/icon1.png new file mode 100644 index 0000000..bb8f661 Binary files /dev/null and b/data/guide/engrampa/zh_CN/image/icon1.png differ diff --git a/data/guide/engrampa/zh_CN/image/icon2.png b/data/guide/engrampa/zh_CN/image/icon2.png new file mode 100644 index 0000000..36a119b Binary files /dev/null and b/data/guide/engrampa/zh_CN/image/icon2.png differ diff --git a/data/guide/engrampa/zh_CN/image/icon3.png b/data/guide/engrampa/zh_CN/image/icon3.png new file mode 100644 index 0000000..e09fa00 Binary files /dev/null and b/data/guide/engrampa/zh_CN/image/icon3.png differ diff --git a/data/guide/engrampa/zh_CN/image/icon4.png b/data/guide/engrampa/zh_CN/image/icon4.png new file mode 100644 index 0000000..68e27a6 Binary files /dev/null and b/data/guide/engrampa/zh_CN/image/icon4.png differ diff --git a/data/guide/engrampa/zh_CN/index.md b/data/guide/engrampa/zh_CN/index.md new file mode 100644 index 0000000..61b7c21 --- /dev/null +++ b/data/guide/engrampa/zh_CN/index.md @@ -0,0 +1,104 @@ +# 归档管理器 +## 概 述 +归档管理器主要提供压缩文件和解压文件功能。 + +## 打开方式 +- **“开始菜单”**![](image/icon1.png)>**“归档管理器”**![](image/icon2.png); +- **“任务栏”**>**“搜索”**![](image/icon3.png)>**“归档管理器”**; +- 选中任一压缩文件单击右键 > **“打开方式”** > **“归档管理器”**。 + +![图 1 归档管理器-日间模式](image/1.png) + +![图 2 归档管理器-夜间模式](image/2.png) + +
+ +## 基本操作 + +### 创建新归档 + +- 直接创建 + +1)右键单击要压缩的文件/文件夹,选择**“压缩”**。 + +在弹出的压缩对话框中,输入压缩后的文件名称,并选择压缩的格式和保存的位置,在其他选项中可设定归档文件的密码及文件拆分大小。注意,Tips:目前只有zip、7z、ear、war压缩格式支持加密。 + +![图 3 压缩对话框](image/3.png) + +2)点击**“创建”**后,即生成压缩文件。 + +- 通过归档管理器创建 + +1)在归档管理器主界面选择**“归档文件”**>**“新建”**,或直接点击“![](image/icon4.png)”图标。 + +2)在弹出的新建对话框中,输入归档文件名称并选择保存位置,在“**文件格式**”折叠框或“**全部支持的文件**”下拉框中选择压缩格式,在其他选项可设置密码及拆分大小。 + +![图 4 新建归档文件](image/4.png) + +3)点击“**创建**”后,即生成压缩文件。 + +
+ +### 查看归档文件 + +方法1:选中归档文件右键单击 > 打开方式 > 归档管理器; + +方法2:双击归档文件。 + +打开归档文件后,可以看到文件的名称,大小,类型,修改日期。 + +以下图为例,双击1.png,可以查看图片;双击“234”文件夹,会进入目录,显示该目录下的所有的文件。 + +![图 5 查看归档文件](image/5.png) + +### 编辑归档文件 + +- 删 除 + +1)删除单个文件: + +方式1:选中目标文件单击右键 > 选择“**删除**”> 点击“**删除**”; + +方式2:选中目标文件 > 按下“Delete”键 > 点击“**删除**” + +![图 6 删除已选定的文件](image/6.png) + +方式3:按下“Delete”键 > 选择“**文件**”> 指定文件名 > 点击“**删除**”。 + +![图 7 删除指定文件](image/7.png) + +2)删除全部文件: + +方式1:选中所有文件 > 单击右键 > 删除; + +方式2:按下“Delete”键 > 选择“**全部文件**” > 点击“**删除**”; + +![图 8 删除全部文件](image/8.png) + +- 重命名 + +选中目标文件 > 单击右键 > 选择“重命名”。 + +![图 9 重命名](image/9.png) + +### 提取归档文件 + +- 直接解压 + +方式1:选中目标归档文件 > 右键单击 > 选择“**解压到此处**”; + +方式2:选中目标归档文件 > 右键单击 > 选择“**解压到...**”> 选择路径 > 点击“**解压缩**”。 + +![图 10 解压文件](image/10.png) + +- 通过归档管理器解压 + +1)打开归档文件后,点击工具栏的“**解压缩**”,或右键单击归档文件,选择“**解压缩到...**” 。 + +2)在弹出的窗口中,指定解压文件的位置,选择“全部文件”/“已选定的文件”,或在“文件”框中输入文件名指定文件,点击“解压缩”。指定文件名提取后,归档文件中所有为该名字的文件都会被提取出来;若是在归档文件中的子目录里,提取的文件也会包含文件目录。 + +![图 11 选择路径](image/11.png) + +3)若归档文件受密码保护,则需要您输入目标归档文件设定的密码。 + +![图 12 输入密码提示](image/12.png) \ No newline at end of file diff --git a/data/guide/hardware-compatibility/硬件适配.png b/data/guide/hardware-compatibility/硬件适配.png new file mode 100644 index 0000000..7ac4b0b Binary files /dev/null and b/data/guide/hardware-compatibility/硬件适配.png differ diff --git a/data/guide/hot-key/en_US/index.md b/data/guide/hot-key/en_US/index.md new file mode 100644 index 0000000..28bc2ce --- /dev/null +++ b/data/guide/hot-key/en_US/index.md @@ -0,0 +1,65 @@ +# Shortcut Key +## 1 Overview +The way to quickly execute a command or launch a software through a combination of different keys is called Shortcut Key. + +**Windows Logo Key**: The key on keyboard with Windows flag or word "Win"/"Windows". The following use Win for short. + +Shortcuts are divided into two categories -- "System" and "Desktop". + +
+ +## 2 System + +The system-level shortcuts are shown below. "Undefined" means the function is available but the shortcut is not set yet. + +| Function | Shortcut Key | +|:-----|:-----| +| Switch application | Alt + Tab | +| Traverse window | Shift+ Alt + Tab | +| Switch to the left workspace | Ctrl + Alt + Left | +| Switch to the right workspace | Ctrl + Alt + Right | +| Window left | Win + Left | +| Window right | Win + Right | +| Window top | Win + Up | +| Window down | Win + Down | +| Switch to the upper window | Win + Alt + Up | +| Switch to the lower window | Win + Alt + Down | +| Switch to the left window | Win + Alt + Left | +| Switch to the right window | Win + Alt + Right | +| Show/hide all windows | Win + d | + +
+ +## 3 Desktop +The desktop-level shortcuts are provided by desktop environment, as shown below. + +XF86\* type shortcuts don't exist on common standard US 101 keyboards, and some keys are defined by the xfree 86 standard. They are deployed around the keyboard, commonly known as function keys. + +| Function | Shortcut Key | +|:-----|:-----| +| Screenshot | Print | +| Take a screenshot of an area | Shift + Print | +| Take a screenshot of the window | Ctrl + Print | +| Open the shutdown management interface | Ctrl + Alt + Delete | +| Lock screen | Ctrl + Alt + l
or
Win + l | +| Open terminal | Ctrl + Alt + t
or
Win + t | +| Open file manager | Win + e
or
Ctrl + Alt + e | +| Turn on display switching | Win + p | +| Open network connection | Win + k | +| Show global search | Win + s | +| Expand the sidebar | Win + a | +| Open workspace | Win + w
or
Ctrl + Alt + w | +| Open the control panel | Win + i
or
XF86Tools | +| Start the email client | XF86Mail | +| Start the calculator | XF86Calculator | +| Launch the browser | XF86WWW | +| Start the media player | XF86AudioMedia | +| Next track | XF86AudioNext | +| Pause playback | XF86AudioPause | +| Play (or play/pause) | XF86AudioPlay | +| Previous track | XF86AudioPrev | +| Stop playback | XF86AudioStop | +| Touchpad switch | XF86TouchpadToggle | +| Volume down | XF86AudioLowerVolume | +| Mute | XF86AudioMute | +| Volume up | XF86AudioRaiseVolume | diff --git a/data/guide/hot-key/hot-key.png b/data/guide/hot-key/hot-key.png new file mode 100644 index 0000000..09eefe5 Binary files /dev/null and b/data/guide/hot-key/hot-key.png differ diff --git a/data/guide/hot-key/zh_CN/index.md b/data/guide/hot-key/zh_CN/index.md new file mode 100644 index 0000000..e90cb4f --- /dev/null +++ b/data/guide/hot-key/zh_CN/index.md @@ -0,0 +1,65 @@ +# 快捷键 +## 1 概 述 +通过不同的按键组合,达到快速执行某个命令或者启动某个软件的方式称为快捷键。 + +**Windows徽标键**:键盘上显示为Windows旗帜,或标为文字Win或Windows的按键。后文简称Win。 + +系统快捷键分为两类 —— “系统” 和 “桌面”。 + +
+ +## 2 系 统 + +系统级快捷键如下所示。其中,“未设置” 代表快捷键功能可用,但是快捷键并未设置。 + +| 功能 | 快捷键 | +|:-----|:-----| +| 切换应用程序 | Alt + Tab | +| 遍历窗口 | Shift+ Alt + Tab | +| 切换到左侧工作区 | Ctrl + Alt + Left | +| 切换到右侧工作区 | Ctrl + Alt + Right | +| 窗口居左 | Win键 + Left | +| 窗口居右 | Win键 + Right | +| 窗口居上 | Win键 + Up | +| 窗口居下 | Win键 + Down | +| 切换到上方窗口 | Win键 + Alt + Up | +| 切换到下方窗口 | Win键 + Alt + Down | +| 切换到左边窗口 | Win键 + Alt + Left | +| 切换到右边窗口 | Win键 + Alt + Right | +| 显示/隐藏全部窗口 | Win + d | + +
+ +## 3 桌 面 +桌面级快捷键主要由桌面环境提供,表格如下所示。 + +XF86\*类型快捷键在普通标准美国101键盘上并不存在,是xfree 86标准定义的一些键,部署在键盘周围,俗称功能键。 + +| 功能 | 热键 | +|:-----|:-----| +| 截屏 | Print | +| 截取一个区域的截图 | Shift + Print | +| 截取窗口的截图 | Ctrl + Print | +| 打开关机管理界面 | Ctrl + Alt + Delete | +| 锁住屏幕 | Ctrl + Alt + l
或者
Win键 + l | +| 打开终端 | Ctrl + Alt + t
或者
Win键 + t | +| 打开文件管理器 | Win键 + e
或者
Ctrl + Alt + e | +| 打开显示器切换 | Win键 + p | +| 打开网络连接 | Win键 + k | +| 显示全局搜索 | Win键 + s | +| 展开侧边栏 | Win键 + a | +| 打开工作区 | Win键 + w
或者
Ctrl + Alt + w | +| 打开控制面板 | Win键 + i
或者
XF86Tools | +| 启动电子邮件客户端 | XF86Mail | +| 启动计算器 | XF86Calculator | +| 启动浏览器 | XF86WWW | +| 启动媒体播放机 | XF86AudioMedia | +| 下一音轨 | XF86AudioNext | +| 暂停回放 | XF86AudioPause | +| 播放(或播放/暂停) | XF86AudioPlay | +| 上一音轨 | XF86AudioPrev | +| 停止回放 | XF86AudioStop | +| 触摸板开关 | XF86TouchpadToggle | +| 音量降低 | XF86AudioLowerVolume | +| 静音 | XF86AudioMute | +| 音量升高 | XF86AudioRaiseVolume | diff --git a/data/guide/kylin-os-installer/en_US/image/1.png b/data/guide/kylin-os-installer/en_US/image/1.png new file mode 100644 index 0000000..c129f24 Binary files /dev/null and b/data/guide/kylin-os-installer/en_US/image/1.png differ diff --git a/data/guide/kylin-os-installer/en_US/image/2.png b/data/guide/kylin-os-installer/en_US/image/2.png new file mode 100644 index 0000000..36c9740 Binary files /dev/null and b/data/guide/kylin-os-installer/en_US/image/2.png differ diff --git a/data/guide/kylin-os-installer/en_US/image/3.png b/data/guide/kylin-os-installer/en_US/image/3.png new file mode 100644 index 0000000..5207522 Binary files /dev/null and b/data/guide/kylin-os-installer/en_US/image/3.png differ diff --git a/data/guide/kylin-os-installer/en_US/image/4.png b/data/guide/kylin-os-installer/en_US/image/4.png new file mode 100644 index 0000000..01e99a9 Binary files /dev/null and b/data/guide/kylin-os-installer/en_US/image/4.png differ diff --git a/data/guide/kylin-os-installer/en_US/image/5.png b/data/guide/kylin-os-installer/en_US/image/5.png new file mode 100644 index 0000000..615b7c5 Binary files /dev/null and b/data/guide/kylin-os-installer/en_US/image/5.png differ diff --git a/data/guide/kylin-os-installer/en_US/image/6.png b/data/guide/kylin-os-installer/en_US/image/6.png new file mode 100644 index 0000000..d1c37b0 Binary files /dev/null and b/data/guide/kylin-os-installer/en_US/image/6.png differ diff --git a/data/guide/kylin-os-installer/en_US/image/7.png b/data/guide/kylin-os-installer/en_US/image/7.png new file mode 100644 index 0000000..74311fe Binary files /dev/null and b/data/guide/kylin-os-installer/en_US/image/7.png differ diff --git a/data/guide/kylin-os-installer/en_US/image/8.png b/data/guide/kylin-os-installer/en_US/image/8.png new file mode 100644 index 0000000..8b9fb88 Binary files /dev/null and b/data/guide/kylin-os-installer/en_US/image/8.png differ diff --git a/data/guide/kylin-os-installer/en_US/image/9.png b/data/guide/kylin-os-installer/en_US/image/9.png new file mode 100644 index 0000000..2f80a3e Binary files /dev/null and b/data/guide/kylin-os-installer/en_US/image/9.png differ diff --git a/data/guide/kylin-os-installer/en_US/index.md b/data/guide/kylin-os-installer/en_US/index.md new file mode 100644 index 0000000..2084308 --- /dev/null +++ b/data/guide/kylin-os-installer/en_US/index.md @@ -0,0 +1,80 @@ +# System Installation +## Installation Preparation +* A hard disk can be divided into multiple partitions and they are independent of each other. So accessing different partition is like accessing different hard disk. + +* Please backup the important data to other storage devices before installing system. + +
+ +## Install Steps +### Boot Up +Insert the installation CD/U-disk and reboot. + +According to the reminder at bootup, select to boot from installation device. + +The system supports "Try without Installation" mode. + +Tips: HW990 only supports direct installation mode currently. + +### Installation +Double click the installation icon on the desktop. + +Tips: HW990 will directly enter the installation program. + +1) Select language. + +![Fig 1 Language select-big](image/1.png) + +2) Select time zone. + +![Fig 2 Time zone select-big](image/2.png) + +3) Check to agree the license. + +![Fig 3 License agreement-big](image/3.png) + +4)Select install way + +The default option "Install from live". + +![Fig 4 Install from live-big](image/4.png) + +Or check "Install from Ghost", and clicks on the button "open file" to find a ghost mirror file. + +![Fig 5 Install from Ghost-big](image/5.png) + +5) User configuration + +![Fig 6 Create account-big](image/6.png) + +6) Installation method + +- "Quick Install": Format the whole disk and partition it automatically. + +- "Custom Install": Customize partitions. + +Select "Quick Install" here. + +![Fig 7 Install options-big](image/7.png) + +![Fig 8 Format prompt-big](image/8.png) + +7) Click "Start Installation" to start copying files to the disk. + +When installation completed, click "Restart" to reboot the system. + +
+ +## Custom Install +Here will show all mounted disks by list. Click "Create partition table" and then start to create partition. + +Select free space > click "add". + +![Fig 9 Creat partition-big](image/9.png) + +1) /boot partition & / partition: "Used to" - ext4, "Mount point" -- /boot, /. + +2) /swap partition: 2x the size of memory, "Used to " - linux-swap + +3) /backup partition & /data partition: "Used to" - ext4, "Mount point" -- /backup, /data. + diff --git a/data/guide/kylin-os-installer/kylin-os-installer.png b/data/guide/kylin-os-installer/kylin-os-installer.png new file mode 100644 index 0000000..b790a92 Binary files /dev/null and b/data/guide/kylin-os-installer/kylin-os-installer.png differ diff --git a/data/guide/kylin-os-installer/zh_CN/image/1.png b/data/guide/kylin-os-installer/zh_CN/image/1.png new file mode 100644 index 0000000..10f1050 Binary files /dev/null and b/data/guide/kylin-os-installer/zh_CN/image/1.png differ diff --git a/data/guide/kylin-os-installer/zh_CN/image/10.png b/data/guide/kylin-os-installer/zh_CN/image/10.png new file mode 100644 index 0000000..dddf2a3 Binary files /dev/null and b/data/guide/kylin-os-installer/zh_CN/image/10.png differ diff --git a/data/guide/kylin-os-installer/zh_CN/image/11.png b/data/guide/kylin-os-installer/zh_CN/image/11.png new file mode 100644 index 0000000..bc924eb Binary files /dev/null and b/data/guide/kylin-os-installer/zh_CN/image/11.png differ diff --git a/data/guide/kylin-os-installer/zh_CN/image/12.png b/data/guide/kylin-os-installer/zh_CN/image/12.png new file mode 100644 index 0000000..78c158a Binary files /dev/null and b/data/guide/kylin-os-installer/zh_CN/image/12.png differ diff --git a/data/guide/kylin-os-installer/zh_CN/image/13.png b/data/guide/kylin-os-installer/zh_CN/image/13.png new file mode 100644 index 0000000..727ac27 Binary files /dev/null and b/data/guide/kylin-os-installer/zh_CN/image/13.png differ diff --git a/data/guide/kylin-os-installer/zh_CN/image/14.png b/data/guide/kylin-os-installer/zh_CN/image/14.png new file mode 100644 index 0000000..e43afeb Binary files /dev/null and b/data/guide/kylin-os-installer/zh_CN/image/14.png differ diff --git a/data/guide/kylin-os-installer/zh_CN/image/15.png b/data/guide/kylin-os-installer/zh_CN/image/15.png new file mode 100644 index 0000000..bc2a34b Binary files /dev/null and b/data/guide/kylin-os-installer/zh_CN/image/15.png differ diff --git a/data/guide/kylin-os-installer/zh_CN/image/16.png b/data/guide/kylin-os-installer/zh_CN/image/16.png new file mode 100644 index 0000000..ecd69d7 Binary files /dev/null and b/data/guide/kylin-os-installer/zh_CN/image/16.png differ diff --git a/data/guide/kylin-os-installer/zh_CN/image/17.png b/data/guide/kylin-os-installer/zh_CN/image/17.png new file mode 100644 index 0000000..f3ecd79 Binary files /dev/null and b/data/guide/kylin-os-installer/zh_CN/image/17.png differ diff --git a/data/guide/kylin-os-installer/zh_CN/image/18.png b/data/guide/kylin-os-installer/zh_CN/image/18.png new file mode 100644 index 0000000..36fb9d5 Binary files /dev/null and b/data/guide/kylin-os-installer/zh_CN/image/18.png differ diff --git a/data/guide/kylin-os-installer/zh_CN/image/19.png b/data/guide/kylin-os-installer/zh_CN/image/19.png new file mode 100644 index 0000000..353708b Binary files /dev/null and b/data/guide/kylin-os-installer/zh_CN/image/19.png differ diff --git a/data/guide/kylin-os-installer/zh_CN/image/2.png b/data/guide/kylin-os-installer/zh_CN/image/2.png new file mode 100644 index 0000000..f20ded9 Binary files /dev/null and b/data/guide/kylin-os-installer/zh_CN/image/2.png differ diff --git a/data/guide/kylin-os-installer/zh_CN/image/20.png b/data/guide/kylin-os-installer/zh_CN/image/20.png new file mode 100644 index 0000000..23384b0 Binary files /dev/null and b/data/guide/kylin-os-installer/zh_CN/image/20.png differ diff --git a/data/guide/kylin-os-installer/zh_CN/image/21.png b/data/guide/kylin-os-installer/zh_CN/image/21.png new file mode 100644 index 0000000..0a0191b Binary files /dev/null and b/data/guide/kylin-os-installer/zh_CN/image/21.png differ diff --git a/data/guide/kylin-os-installer/zh_CN/image/22.png b/data/guide/kylin-os-installer/zh_CN/image/22.png new file mode 100644 index 0000000..6a4daf1 Binary files /dev/null and b/data/guide/kylin-os-installer/zh_CN/image/22.png differ diff --git a/data/guide/kylin-os-installer/zh_CN/image/23.png b/data/guide/kylin-os-installer/zh_CN/image/23.png new file mode 100644 index 0000000..042fade Binary files /dev/null and b/data/guide/kylin-os-installer/zh_CN/image/23.png differ diff --git a/data/guide/kylin-os-installer/zh_CN/image/24.png b/data/guide/kylin-os-installer/zh_CN/image/24.png new file mode 100644 index 0000000..c3259ef Binary files /dev/null and b/data/guide/kylin-os-installer/zh_CN/image/24.png differ diff --git a/data/guide/kylin-os-installer/zh_CN/image/25.png b/data/guide/kylin-os-installer/zh_CN/image/25.png new file mode 100644 index 0000000..863ce5e Binary files /dev/null and b/data/guide/kylin-os-installer/zh_CN/image/25.png differ diff --git a/data/guide/kylin-os-installer/zh_CN/image/26.png b/data/guide/kylin-os-installer/zh_CN/image/26.png new file mode 100644 index 0000000..1daa5d3 Binary files /dev/null and b/data/guide/kylin-os-installer/zh_CN/image/26.png differ diff --git a/data/guide/kylin-os-installer/zh_CN/image/27.png b/data/guide/kylin-os-installer/zh_CN/image/27.png new file mode 100644 index 0000000..c69ac01 Binary files /dev/null and b/data/guide/kylin-os-installer/zh_CN/image/27.png differ diff --git a/data/guide/kylin-os-installer/zh_CN/image/28.png b/data/guide/kylin-os-installer/zh_CN/image/28.png new file mode 100644 index 0000000..908c774 Binary files /dev/null and b/data/guide/kylin-os-installer/zh_CN/image/28.png differ diff --git a/data/guide/kylin-os-installer/zh_CN/image/3.png b/data/guide/kylin-os-installer/zh_CN/image/3.png new file mode 100644 index 0000000..a314c78 Binary files /dev/null and b/data/guide/kylin-os-installer/zh_CN/image/3.png differ diff --git a/data/guide/kylin-os-installer/zh_CN/image/4.png b/data/guide/kylin-os-installer/zh_CN/image/4.png new file mode 100644 index 0000000..ea49f19 Binary files /dev/null and b/data/guide/kylin-os-installer/zh_CN/image/4.png differ diff --git a/data/guide/kylin-os-installer/zh_CN/image/5.png b/data/guide/kylin-os-installer/zh_CN/image/5.png new file mode 100644 index 0000000..b04345f Binary files /dev/null and b/data/guide/kylin-os-installer/zh_CN/image/5.png differ diff --git a/data/guide/kylin-os-installer/zh_CN/image/6.png b/data/guide/kylin-os-installer/zh_CN/image/6.png new file mode 100644 index 0000000..c45a9ed Binary files /dev/null and b/data/guide/kylin-os-installer/zh_CN/image/6.png differ diff --git a/data/guide/kylin-os-installer/zh_CN/image/7.png b/data/guide/kylin-os-installer/zh_CN/image/7.png new file mode 100644 index 0000000..222152e Binary files /dev/null and b/data/guide/kylin-os-installer/zh_CN/image/7.png differ diff --git a/data/guide/kylin-os-installer/zh_CN/image/8.png b/data/guide/kylin-os-installer/zh_CN/image/8.png new file mode 100644 index 0000000..1f3b603 Binary files /dev/null and b/data/guide/kylin-os-installer/zh_CN/image/8.png differ diff --git a/data/guide/kylin-os-installer/zh_CN/image/9.png b/data/guide/kylin-os-installer/zh_CN/image/9.png new file mode 100644 index 0000000..9c95a80 Binary files /dev/null and b/data/guide/kylin-os-installer/zh_CN/image/9.png differ diff --git a/data/guide/kylin-os-installer/zh_CN/index.md b/data/guide/kylin-os-installer/zh_CN/index.md new file mode 100644 index 0000000..f0dfc72 --- /dev/null +++ b/data/guide/kylin-os-installer/zh_CN/index.md @@ -0,0 +1,195 @@ +# 系统安装 +## 最低配置与推荐配置 + +| 版本形态 | 最小内存 | 推荐内存 | 最小硬盘空间 | 推荐硬盘空间 | +|------|------|-------|--------|--------| +| 桌面系统 | 2GB | 4GB以上 | 50GB | 80GB以上 | + +表1 最低配置与推荐配置 + +
+ +## 安装准备 + +1)准备所需组件 + +安装光盘或U盘启动器、《银河麒麟桌面操作系统V10安装手册》 + +2)检查硬件兼容性 + +银河麒麟桌面操作系统具有良好的硬件兼容性,与近年来生产的大多数硬件兼容。由于硬件的技术规范改变频繁,因此可能难以保证系统会百分之百地兼容硬件。 + +3)备份数据 + +安装系统之前,请将硬盘上的重要数据备份到其他存储设备中。 + +4)硬盘分区 + +一块硬盘可以被划分为多个分区,分区之间是相互独立的,访问不同的分区如同访问不同的硬盘。一块硬盘最多可以有四个主分区,如果想在一块硬盘上拥有多于四个分区,就需要把分区类型设为逻辑分区。 + +## 安装引导 + +1)硬盘分区 + +将安装光盘放入光驱中,重启机器。根据固件启动时的提醒,按下相应快捷键进入固件管理界面。若使用的是内置光驱,“第一启动选项”选择“光驱”;若使用的是USB或者USB外置光驱,“第一启动选项”选择“USB”。本系统支持体验模式,可试用一个全功能的操作系统而不安装。 + +2)系统安装 + +如选择“试用银河麒麟桌面操作系统”,则会进入试用界面,如下图所示: + +![图 1 试用银河麒麟桌面操作系统界面](image/1.png) + +双击图标“安装 Kylin”,开始安装引导,则直接进入安装引导界面,选择系统语言,单击“下一步”: + +![图 2 选择系统语言](image/2.png) + +进入选择安装途径界面,选择“从Live安装”,点击“下一步”,“从Ghost安装”请见第6部分。 + +![图 3 选择从Live安装](image/3.png) + +阅读许可协议,勾选“我已阅读并同意协议条款”,点击“下一步”: + +![图 4 阅读许可协议](image/4.png) + +选择系统时区,默认为北京时区,可以在下拉列表中选择城市切换时区,或在地图中点选城市切换时区,点击“下一步”: + +![图 5 选择时区](image/5.png) + +创建系统用户,输入用户名,系统自动填充推荐的主机名,可进行修改,设置登录密码并再次输入密码进行确认,勾选“开机自动登录”可设置开机登录系统时不需要输入密码,点击“下一步”: + +![图 6 创建用户](image/6.png) + +选择系统的安装方式,如选择“全盘安装”,将在选择的盘符中进行全盘安装,格式化整个硬盘,并进行自动分区,详见第4部分;如选择“自定义安装”,用户自行根据实际需求,进行分区创建和分区大小分配,详见第5部分。 + +## 全盘安装 + +选择“全盘安装”选项,选中待安装的目标盘符: + +![图 7 全盘安装](image/7.png) + +若勾选“出厂备份”则自动备份出厂状态,备份文件存放于自动创建的backup分区下。 + +若勾选“全盘加密”可以设置磁盘加密,输入密码并确认,点击“下一步”: + +![图 8 全盘加密](image/8.png) + +系统在该磁盘中自动分区并显示分区结果,确认安装盘符后,选中“格式化整个磁盘”,然后点击“开始安装”: + +![图 9 确认全盘安装](image/9.png) + +系统将自动开始安装,安装过程中支持查看实时的安装日志,安装界面如下图所示: + +![图 10 系统安装界面](image/10.png) + +![图 11 系统安装日志](image/11.png) + +安装完成后,界面如下图所示,点击“现在重启”按钮,系统重新启动: + +![图 12 系统安装完成](image/12.png) + +重启过程中系统会自动弹出光驱或提示“请取出安装介质,然后按ENTER键”: + +![图 13 取出安装介质提示界面](image/13.png) + +按照提示,取回光驱或U盘后,按“ENTER”(回车键),等待系统进入登录界面,进入登录界面后,输入用户密码后即可进入系统。 + +## 自定义安装 + +选择使用自定义安装可以自行设计各硬盘分区大小。在选择安装方式界面选择“自定义安装”后出现硬盘分区界面,点击“创建分区表”,弹出提示窗口,选中“空闲”所在行,选择“+添加”即可创建硬盘分区: + +![图 14 自定义安装](image/14.png) + +首先创建boot分区,/boot必须是主分区中的第一个分区;继续创建根分区(/)、backup、tmp分区,在创建分区的时候,“新分区的类型”选择“主分区”,“新分区的位置”默认为“剩余空间头部”,“用于”选择“ext4”: + +![图 15 创建分区](image/15.png) + +若是中途需要改变已创建的分区,具体操作方式如下所示: + +a)添加分区:选中空闲分区所在行,点击“+添加”按钮。 + +b)编辑分区:选中已创建的分区,点击“修改”按钮。 + +c)删除分区:选中已创建的分区,点击“-删除”按钮。 + +自定义分区完成后如下图所示,点击“下一步”: + +![图 16 自定义分区完成](image/16.png) + +查看自定义安装的盘符分配结果,勾选“确认以上操作”,点击“开始安装”: + +![图 17 确认自定义安装](image/17.png) + +自定义分区完成后,点击“开始安装”,后续步骤与全盘安装一致,等待完成后重启电脑即可进入系统。 + +## Ghost安装 + +1)把制作好的Ghost镜像(存在于/ghost目录下)拷贝到U盘等可移动存储设备。 + +2)进入试用系统界面后,接入可移动设备。 + +3)通过终端手动挂载设备,将设备挂载到/mnt目录下。通常情况下,移动设备为/dev/sdb1,可使用命令 +“fdisk -l”查看移动设备所在位置。 + +手动挂载设备命令:sudo mount /dev/sdb1 /mnt + +4)双击图标“安装 Kylin”,开始安装引导。进入选择安装途径界面,选择“从Ghost安装”。 + +![图 18 选择从Ghost安装](image/18.png) + +5)点击“打开文件”,选择/mnt目录下的Ghost镜像文件。 + +![图 19 选择Ghost镜像文件](image/19.png) + +6)Ghost安装无需创建用户和选择时区,后续安装步骤参见第4部分第5部分; + +## 系统激活 + +安装完成进入系统后,点击屏幕右上角“立即激活”,将弹出系统激活窗口: + +![图 20 激活提示](image/20.png) + +或在桌面任务栏处右键选择“关于麒麟”,打开“关于”界面,点击“激活”: + +![图 21 “关于”界面](image/21.png) + +在弹出的窗口中选择激活方式: + +![图 22 选择激活方式](image/22.png) + +1)产品密钥激活 + +产品密钥通常在配套DVD包装盒中,由20位数字和大写字母组成,连通网络,输入产品密钥后点击激活,提示激活成功后重启系统,即可成功激活。 + +![图 23 产品密钥激活](image/23.png) + +2)二维码激活 + +二维码激活需要首先在移动设备上绑定对应的服务序列号激活权限,绑定权限后即可使用微信扫描系统二维码激活,可分为系统联网激活和系统离线激活两种情况: + +a)联网激活 + +系统联网状态下,如以二维码方式激活,通过移动设备的微信扫描激活界面中的二维码,点击确认激活,移动端将会弹出激活成功的页面,在系统激活界面上点击“激活“,系统即自动刷新为激活成功状态。 + +![图 24 在线二维码激活](image/24.png) + +b)离线激活 + +离线状态下,如以二维码方式激活,通过移动设备微信扫描激活界面中的二维码获取激活码,在系统激活界面上填写序列号和激活码,点击“激活”,将会弹出激活成功的页面,即自动刷新为已激活状态。 + +![图 25 离线二维码激活](image/25.png) + +激活成功的界面如下图所示: + +![图 26 激活成功界面](image/26.png) + +3)授权文件导入 + +如以授权文件导入方式激活,点击“选择授权文件”并导入对应的文件“.kyinfo”和“LICENSE”后,点击“导入”,弹出激活成功弹窗后重启系统,即可激活成功。 + +![图 27 授权文件导入激活](image/27.png) + +4)Ukey激活 + +如以Ukey方式激活,首先插入Ukey,然后选择Ukey方式激活,等待系统完成激活,弹出激活成功弹窗后重启系统,即可激活成功。 + +![图 28 ukey激活](image/28.png) \ No newline at end of file diff --git a/data/guide/kylinOS/en_US/index.md b/data/guide/kylinOS/en_US/index.md new file mode 100644 index 0000000..b00f2c9 --- /dev/null +++ b/data/guide/kylinOS/en_US/index.md @@ -0,0 +1,242 @@ +# Kylin Operating System License Agreement and Privacy Statement +## Preface +Welcome to Kylin Operating System! + +KylinSoft Corporation ("we", "our", "us", and KylinSoft) is based on secure and reliable operating system technology, and has two product brands: "NeoKylin", "Kylin". We build innovative security operating systems and corresponding solutions for general areas, as well as highly secure and reliable operating systems and solutions for national defenses. Now KylinSoft has formed the server operating system, desktop operating system, embedded operating system, kylincloud operating system and so on. Meanwhile, we support a variety of domestic CPUs, such as Phytium, Loongson, ShenWei, ZhaoXin, HaiGuang, KunPeng. Our company insists on opening cooperation to build industrial ecology, and provides customers with complete localized solutions. + +KylinSoft focuses on core technological innovations: applied for patents more than 320 (including 138 granted patents), registered software copyrights more than 340, hosted/participated/drafted the technical standards of nation/industry/union more than 30, and received various national, provincial and industry awards (including first prize of national scientific and technological progress) more than 400. What's more, we were awarded the title of "Key Software Enterprises in National Planning and Layout" and "National High-Tech Industrialization Demonstration Project", etc.. + +KylinSoft also focuses on the quality system and innovative capacity building: passed the CMMI5 level assessment, and now has the post-doctoral workstation, provincial basic software engineering center, etc., with strong scientific research capacities and strict management standards. + +KylinSoft has branches in TianJin, BeiJing, ShangHai, Guangzhou, TaiYuan, ZhengZhou, ChengDu, Xi'An, ShenYang, etc., and service outlets in 31 provincial capitals nationwide. Our productions are widely used in party and government, defense, finance, telecommunication, energy, transportation, education, medical and other industries. According to Sadie's consulting, KylinSoft's productions rank 1st in Linux market share in China for 8 years in a row. + +- **Expression habits and Explanations** + +1)Menus and buttons are marked with "". + +2)Paths are marked with > , e.g: "Start Menu" > "Kylin Control Center". + +Due to the hardware devices, platform architectures, software versions, etc., the sample pictures and some of the functions in this manual are for reference only. **The actual status are based on the real system**. + +
+
+ +## The End-User License Agreement +Respectable users of Kylin Linux (hereinafter referred to as "you" or "your organization"): + +Thank you for using Kylin Linux products developed&published by KylinSoft Corporation (For short "KylinSoft"). + +Read the terms of this agreement and any provided supplemental license terms (Collectively "AGREEMENT") carefully before opening the software media package. By opening the software media package, you agree to the terms of this AGREEMENT. This Agreement takes effect at the moment, and it has force effect to both user and our company. + +### Ⅰ LICENSE TO USE +KylinSoft grants you a non-exclusive and non-transferable license for the internal use only of the accompanying software and documentation and any error corrections provided by KylinSoft (collectively "Software"), by the number of users and the class of computer hardware for which the corresponding fee has been paid. + +- **License to use software** + +KylinSoft grants you a non-exclusive, non-transferable and limited license for the internal use under this Agreement and Terms. You are allowed to use FIVE(5) integrated and unmodified binary copies at most, which are only installed on the computer owned by your organization. + +- **License to use in Educational Organization** + +For Educational Organization, KylinSoft grants you a non-exclusive and non-transferable license for the internal use of the accompanying binary software under this Agreement and Terms. Here, "internal use" means that the software could be used by students, teachers, and staffs who belong to your organization. + +- **License to use Font Software** + +This software includes softwares that can generate font style ("Font Software"). You are not allowed to separate "Font Software" from this software. You are not granted to change "Font Software" to add any new functions not included in it when the Font Software was provided as a part of this software. You are not allowed to embed the Font Software in any file that may be used in commercial purpose or to get something in reward. + +### Ⅱ RESTRICTIONS +Software is confidential and copyrighted. Title to Software and all associated intellectual property rights is retained by KylinSoft and/or its licensors. Except as specifically authorized in any Supplemental License Terms, you may not make copies of Software, other than a single copy of Software for archival purposes. No right, title or interest in or to any trademark, service mark, logo or trade name of KylinSoft or its licensors is granted under this Agreement. + +- **License to copy, modify and distribute software** + +For all copies that are granted under this Agreement, you may and must copy, modify and distribute the special part of Kylin Linux products which complies with "GNU GPL-GNU General Public License" according to the terms of "GNU GPL-GNU General Public License". For other Kylin Linux products which do not comply with "GNU GPL-GNU General Public License",you should copy, modify and distribute them according to the terms of related law. For any version derived from Kylin Linux products, you are not granted to use any KylinSoft, Kylin -related trademarks, service marks,logos and other brand designations ("Kylin Marks") without KylinSoft’s authorization. + +- **Special Notice:** + +The definition of "copy, modify and distribute" mentioned as above does not apply to the software included in Kylin Linux products which does not comply with "GNU GPL-GNU General Public License", such as Input Method Software,Font Software, and Third Party Application Software,etc. Unless enforcement is prohibited by applicable law, you may not copy, modify(including decompile, or reverse engineer) and distribute this Software. + +### Ⅲ LIMITED WARRANTY +KylinSoft warrants to you that for a period of ninety (90) days from the date of purchase or the date of obtaining Software through other legal means, as evidenced by a copy of the receipt, the media on which Software is furnished (if any) will be free of defects in materials and workmanship under normal use. Except for the foregoing, Software is provided “AS IS”. Your exclusive remedy and KylinSoft's entire liability under this limited warranty will be at KylinSoft's option to replace Software media or refund the fee paid for Software. + +### Ⅳ DISCLAIMER OF WARRANTY +Unless specified in this agreement, all express or implied conditions, representations and warranties, including any implied warranty of merchantability, fitness for a particular purpose or non-infringement are disclaimed, except to the extent that these disclaimers are held to be legally invalid. + +### Ⅴ LIMITATION OF LIABILITY +To the extent not prohibited by law, in no event will KylinSoft or its licensors be liable for any lost revenue, profit or data, or for special, indirect, consequential, incidental or punitive damages, however caused regardless of the theory of liability, arising out of or related to the use of or inability to use software, even if KylinSoft has been advised of the possibility of such damages. In no event will KylinSoft's liability to you, whether in contract, tort(including negligence),or otherwise, exceed the amount paid by you for Software under this Agreement. The foregoing limitations will apply even if the above stated warranty fails of its essential purpose. + +### Ⅵ TERMINATION +This Agreement is effective until terminated. You may terminate this Agreement at any time, but you should destroy all copies of Software at the same time. This Agreement will terminate immediately without notice from KylinSoft if you fail to comply with any provision of this Agreement. Upon Termination, you must destroy all copies of Software, and you shall bear the legal liability caused by non-compliance with this agreement. + +### Ⅶ APPLICABLE LAW +Any dispute settlement (including but not limited to litigation, arbitration, etc.) related to this Agreement will be governed by People's Republic of China law. The laws of any other country or region shall not apply. + +### Ⅷ SEVERABILITY +If any provision of this Agreement is held to be unenforceable, this Agreement will remain in effect with the provision omitted, unless omission would frustrate the fundamental intent of the parties, in which case this Agreement will immediately terminate. + +### Ⅸ INTEGRATION +This Agreement is the entire agreement between you and KylinSoft relating to its subject matter. It supersedes all prior or contemporaneous oral or written communications, proposals, representations and warranties which inconsistent with this Agreement, and prevails over any conflicting or additional terms of any quote, order, acknowledgment, or other communication between the parties relating to its subject matter. No modification of this Agreement will be binding, unless in writing and signed by an authorized representative of each party. + +### Ⅹ TRADEMARKS AND LOGOS +You acknowledge and agree as between you and KylinSoft that KylinSoft owns the KylinSoft, Kylin trademark and all KylinSoft, Kylin-related trademarks, service marks, logos and other brand designations ("Kylin Marks") and you agree to comply with the KylinSoft Trademark and Logo Usage Requirements. Any use you make of the Kylin Marks inures to KylinSoft's benefit. + +### Ⅺ SOURCE CODE +The Kylin Software may contain source code that is provided solely for reference purposes pursuant to the terms of this Agreement. Unless specified in this agreement,source code may not be redistributed. + +### Ⅻ TERMINATION FOR INFRINGEMENT +Either party may terminate this Agreement immediately should any Software become, or in either party's opinion be likely to become, the subject of a claim of infringement of any intellectual property right. + +### ⅩⅢ JAVATM TECHNOLOGY RESTRICTIONS +You may not modify the JavaTM Platform Interface ("JPI", identified as classes contained within the "java" package or any subpackages of the "java" package), by creating additional classes within the JPI or otherwise causing the addition to or modification of the classes in the JPI. In the event that you create an additional class and associated API(s) which (i) extends the functionality of the JavaTM Platform, and (ii) is exposed to third party software developers for the purpose of developing additional software which invokes such additional API, you must promptly publish broadly an accurate specification for such API for free use by all developers. Youmay not create, or authorize your licensees to create additional classes, interfaces, or subpackages that are in any way identified as "java", "javax", "sun" or similar onvention as specified by Sun in any naming convention designation. + +**The agreement is provided in both Chinese and English. In case of any ambiguity, the Chinese version shall prevail.** + +
+
+ +## Kylin Operating System Privacy Statement +Release Date:December 28, 2019 + +Effective date:December 18, 2019 + +Dear users("you"), the Kylin Operating System is developed and issued by KylinSoft Corporation ("we" and "KylinSoft"). It is mainly used as desktop office software or applied in building enterprise and government information infrastructure. + +KylinSoft Corporation ("we", "our", "us", and KylinSoft) fully understand and respect the importance of your privacy, and we will handle your personal data based on the "Kylin Operating System Privacy Statement" ("this Statement"). This statement is to ensure the legal and appropriate collection and use of your personal data. This Statement describes how we handle your personal data, and how you can access, correct, delete, and protect it. We will protect your personal data as the law and industrial standards required. Upon agreeing and submitting this Statement, you accept all provisions as follows. + +We created this Statement to help you understand: + +Ⅰ How KylinSoft Collects and Uses Your Personal Data + +Ⅱ How KylinSoft Keep and Protect Your Personal Data + +Ⅲ How KylinSoft Handles Your Personal Data + +Ⅳ Third Party Providers and Their Services + +Ⅴ How KylinSoft Handles the Personal Data of Children + +Ⅵ How to Update this Statement + +Ⅶ How to Contact KylinSoft + +### Ⅰ How KylinSoft Collects Your Personal Data +#### 1.Collects Your Personal Data +KylinSoft collects your personal data mainly to improve its services to better satisfy customer needs. + +1)The licensing mechanism of Kylin Operating System will generate the machine code to apply for the formal license through encryption mechanism and conversion according to the your computer's network card, firmware and motherboard; you can apply for formal license by sending the machine code to KylinSoft’s business personnel upon the contract and related agreements. The machine code does not include the details such as the network card, firmware, and motherboard of your computer. + +2)The server-side of Kylin Operating System application store will be connected according to the CPU and IP address of your computer for your convenience. The IP address of your computer may be logged in the server-side system of the application store. + +3)Kylin Operating System will be updated upon your computer's IP address; you can confirm whether to update the system. + +4)While using Kylin Operating System, we may ask you to provide us with certain personal data that can be used to contact you or offer technical support to you. Personal data includes email address, phone number, name, etc. + +5)Kylin Operating System may provide biometric-related functions and will store authentication-related information on your machine. We do not collect or spread this part of the information. + +In the future, when updating Kylin Operating System, more personal data needed will be informed to you in a timely manner. + +#### 2.Uses Your Personal Data +Strictly complying with applicable laws, regulations, as well as our policies, we may use your personal data to: + +- **Provide product service:** product licensing mechanism, application store, system update, biometric-related functions,etc. + +- **Ensure product security:** while using Kylin Operating System, we may use relevant information to improve the security, reliability and sustainable services of our products. + +- **Contact you to establish business relationships:** provide technical support and do service satisfaction survey. + +- **Improve our product and service:** accessibility, defects, user experience, etc. + +Comply with applicable laws, regulations, and industry standards as well as our policies. + +We will contact you and ask for your permission if our use of your personal data is beyond the circumstances mentioned above. + +#### 3.How KylinSoft Discloses Your Personal Data +KylinSoft promises not to disclose or transfer your personal data to third parties, except the following cases: + +1)KylinSoft will share your personal data to third parties with your prior consent. + +2)When authorizing relevant companies or other third-parties (service providers, contractors, agents, application developers, etc.) to do processing, KylinSoft may share your personal data with third parties so as to provide a better service to you. In accordance with our privacy policies and other relevant confidentiality measures, we will share your personal data with encryption, anonymity and other means to ensure the security of your information. + +3)We will not disclose your personal data . If necessary, we will inform you the purpose and ways of disclosure and sensitive information that involved; we will get your prior consent. + +4)As our business develops, your personal data can be disclosed if KylinSoft is involved in merger, acquisitions, asset transactions; we will inform you the relevant circumstances, and continue to protect your personal data in accordance with laws, regulations and standards required by this statement. + +5)We may disclose your personal data by corresponding laws and regulations. + +If we use your personal data beyond those specified in this Statement, we will inform you again and obtain your prior consent. + +In accordance with relevant laws, regulations and national standards, we may not disclose your personal data without your prior consent except the following cases: + +1)Your personal data is provided in the interest of national security and national defense. + +2)Your personal data is provided in the interest of public safety, public health, public knowledge, etc.. + +3)Your personal data is provided for criminal investigation, prosecution, trial and execution. + +4)Your personal data is provided for protecting your life or other people’s lives, and your property. + +5)You disclose your personal data on your own. + +6)Your personal data is collected from public, such as news reports, government information disclosure, etc.. + +7)Your personal data is provided for signing and performance of contracts at your request. + +8)Your personal data is provided to check and solve the product malfunctions. + +9)Your personal data is provided for public statistical or academic research in which the data is de-identified. + +10)Your personal data is provided in other cases corresponding by laws and regulations. + +### Ⅱ How KylinSoft Keep and Protect Your Personal Data +#### 1.Location +We will saves information collected about you in China by corresponding laws and regulations . + +#### 2.Duration +We will only retain your personal data for the period that is necessary to ensure we can fulfill the purposes outlined in this Statement. It will be saved in the log for a certain period and automatically deleted according to the configuration. + +When our product stop it's service, we will notify you in the form of notice and announcements, and delete or anonymize your personal data within a reasonable period of time, and immediately stop collecting your information. + +#### 3.How SC2C Protect Your Personal Data +We take the utmost care to ensure the security of users' personal data, preventing the loss, misuse, unauthorized access or disclosure of information. + +We will use various manners, such as encryption (SSL / TLS) and anonymity, to ensure the security of your personal data. + +We establish special management systems, processes and organizations to ensure the security of information. For example, we severely limit the access to information, and require them to conduct audits complying with confidentiality obligations. + +#### 4.In the event of a security incident such as the disclosure of personal data +We will initiate an emergency plan by corresponding laws and regulations to prevent the expansion of the security incident, and inform you the detail, possible impact and remedial measures in the form of notices, announcements, etc.. We will also report the security incidents by corresponding laws, regulations and regulatory requirements. + +### Ⅲ How KylinSoft Handles Your Personal Data +If you worry about the leak of your personal data while using Kylin Operating System, you may consider suspending or not using the relevant functions (such as product formal license, application store, system update,biometric-related functions,etc.)according to your personal and business needs. + +When using third-party software on Kylin Operating System, please pay attention to your privacy protection. + +### Ⅳ Third Party Providers and Their Services +KylinSoft has no control over the privacy and data protection policies of third parties, which are not governed by this Statement. + +When you install or use third-party software on the Kylin Operating System, please refer to the respective privacy protection policies of these third parties before submitting your personal information to third parties or through third-party content. + +### Ⅴ How KylinSoft Handles the Personal Data of Children +Our products and services are targeted at adults. Children cannot create their own user account without the consent of a parent or guardian. Our products must be used under the permission and supervision of parents and guardians with appropriate precautions. + +### Ⅵ How to Update this Statement +We reserve the right to update this statement in due course. When this statement is changed, we will display the changed statement to you on the company's website. Only after obtaining your consent, will we collect, use and store your personal information in accordance with the updated statement. + +### Ⅶ How to Contact KylinSoft +If you have any doubts about this Statement or any other problems concerning privacy protection, please contact us via email([market@kylinos.cn](mailto://market@kylinos.cn "Market Email")); Customer Service Hotline 400-089-1870 or the official website ([www.Kylinos.cn](http://www.kylinos.cn "Official")) . + +After receiving your questions, we will deal with it in a timely manner. Our company will usually give a reply within 15 working days. + +This statement will take effect since updated.Both Chinese and English versions are provided. In case of any ambiguity, the Chinese version shall prevail. + +Last Updated: December 28, 2019 + +
+ +**KylinSoft Corporation** + +**Tel:** Tianjin(022)58955650 Beijing(010)51659955 Changsha(0731)88280170 + +**Fax:** Tianjin(022)58955651 Beijing(010)62800607 Changsha(0731)88280166 + +**Website:** [www.kylinos.cn](http://www.kylinos.cn "Official") + +**E-mail:** [support@kylinos.cn](mailto://support@kylinos.cn "Tech Support Email") diff --git a/data/guide/kylinOS/kylinOS.png b/data/guide/kylinOS/kylinOS.png new file mode 100644 index 0000000..a621b8c Binary files /dev/null and b/data/guide/kylinOS/kylinOS.png differ diff --git a/data/guide/kylinOS/zh_CN/index.md b/data/guide/kylinOS/zh_CN/index.md new file mode 100644 index 0000000..70f0d53 --- /dev/null +++ b/data/guide/kylinOS/zh_CN/index.md @@ -0,0 +1,279 @@ +# 银河麒麟最终用户使用许可协议和隐私政策声明 + +尊敬的银河麒麟操作系统及相关产品用户: + +本协议介绍您的权利、义务以及您使用本产品的前提条件。请您仔细阅读本协议条款、补充许可条款(统称“协议”)及银河麒麟操作系统隐私政策声明(以下简称“声明”)。 + +本协议及声明中的“本产品”是指由麒麟软件有限公司开发并制作发行的用于办公或构建企业及政府的信息化基础设施——“银河麒麟操作系统软件产品”。“我们”是指麒麟软件有限公司。“您”是指支付授权费用并使用银河麒麟操作系统及相关产品的用户。 + +## 银河麒麟操作最终用户使用协议 + +版本发布日期:【2021】年【7】月【30】日 + +版本生效日期:【2021】年【7】月【30】日 + + + + +本协议将向您说明以下内容: + +一、使用许可 + +二、Java技术限制 + +三、Cookie和其他技术 + +四、知识产权条款 + +五、开放源代码说明 + +六、第三方软件/服务说明 + +七、免责条款 + +八、协议完整性及可分割性说明 + +九、适用法律及争议解决 + +### 一、使用许可 + +按照已经为本产品支付费用的用户数目及计算机硬件类型,我们向您授予非排他、不可转让的许可,仅允许被授权人单位及与其签订劳动合同的员工使用由麒麟软件提供的随附软件和文档以及任何错误纠正。 + +- **1.教育机构使用许可** + +在遵守本协议的条款和条件的情况下,如果您是教育机构,允许贵机构仅在内部使用随附的未经修改的二进制格式的软件。此处的“在内部使用”是指被授权人单位及与其签订劳动合同的员工以及在贵机构入学的学生使用本产品。 + +- **2.字型软件使用** + +字型软件指本产品中预装的和生成字体样式的软件。您不可从软件中分离字型软件,不可改动字型软件,以新增此等字型软件被作为本产品的一部分交付予您时所不具备的任何功能,不可将字型软件嵌入作为商业产品提供以换取收费或其他报酬的文件、不可脱离安装了本产品的机器使用。如将字型软件用于对外宣传等其他商业用途时,请您与字体版权厂商联系协商以获得对您相关行为的许可。 + +### 二、Java技术限制 + +您不可更改“Java平台界面”(简称“JPI”,即指明为“java”包或“java”包的任何子包中的类),无论通过在JPI中创建额外的类,还是通过其他方式导致对JPI中的类进行增添或更动,均为不可。如果您创建一个额外的类以及一个或多个相关的API,而它们(i)扩展Java平台的功能;并且(ii)可供第三方软件开发者用于开发可调用上述额外API的额外软件,则您必须迅即广泛公布对此种API的准确说明,以供所有开发者免费使用。您不可创建、或授权其他被许可人创建以任何方式标示为“java”、“javax”、“sun”的额外的类、界面、子包或Sun在任何命名约定中指明的类似约定。参见Java运行时环境二进制代码许可的适当版本(目前位于[http://jdk.java.net](http://jdk.java.net)),以了解可与Java小程序和应用程序共同分发的运行时代码的可供情况。 + +### 三、Cookie和其他技术 + +为帮助我们更好地了解并服务用户,我们的网站、在线服务和应用程序可能会使用“Cookie”技术。这些Cookie用于存储进出系统的网络流量以及因检测错误而生成的流量,因此必须设置。 我们通过使用这些Cookie来了解您与我们的网站和在线服务如何进行交互。 + +如果您想禁用Cookie并且使用的是Firefox浏览器,可在Firefox的隐私与安全中心进行设置。如果您使用的是其他浏览器,请向相关供应商咨询具体方案。 + +依照《中华人民共和国网络安全法》第七十六条第五款,个人信息,是指以电子或者其他方式记录的能够单独或者与其他信息结合识别自然人个人身份的各种信息,包括但不限于自然人的姓名、出生日期、身份证件号码、个人生物识别信息、住址、电话号码等。如果Cookie中包含上述信息,或者存在通过Cookie收集的非个人信息与其他个人信息合并后的信息,出于本隐私政策的目的,我们会将合并后的信息视为个人隐私信息,将参照银河麒麟隐私政策声明,为您的个人信息提供相应的安全保护措施。 + +### 四、知识产权条款 + +- **1.商标和标识** + +本产品受到版权(著作权)法、商标法和其他法律及国际知识产权公约的保护。我们或其许可方保留对本产品的所有权及所有相关的知识产权。对于我们或其许可方的任何商标、服务标记、标识或商号的任何权利、所有权或利益,本协议均不作任何授权。您对麒麟软件标记的任何使用都应有利于麒麟软件,未经我们书面同意,不得擅自使用麒麟软件任何商标、标识。 + +- **2.关于复制、修改及分发** + +如果在所有复制品中维持本协议书不变,您可以且必须根据《GNU GPL-GNU通用公共许可证》复制、修改及分发银河麒麟操作系统软件产品中遵守《GNU GPL-GNU通用公共许可证》协议的软件,其他不遵守《GNU GPL-GNU通用公共许可证》协议的银河麒麟操作系统软件产品必须根据相关法律、其他许可协议进行复制、修改及分发,但任何以银河麒麟操作系统软件产品为基础的衍生发行版未经我们的书面授权不能使用任何我们的商标或其他任何标志。 +特别注意:该复制、修改及分发不包括本产品中包含的任何不适用《GNU GPL-GNU通用公共许可证》的软件,如银河麒麟操作系统软件产品中包含的输入法软件、字库软件、第三方应用软件等。除非适用法律予以禁止,否则您不得对上述软件进行复制、修改(包括反编译或反向工程)、分发。 + +### 五、开放源代码说明 + +对于本产品中包含的任何开放源代码,本协议的任何条款均不得限制、约束或以其它方式影响任何适用开放源代码许可证赋予您的任何相应的权利或者义务或您应遵守的各种条件。 + +### 六、第三方软件/服务说明 + +本协议所指的第三方软件/服务是指由非银河麒麟操作系统生产商的其他组织或个人开发的相关软件/服务。本产品可能包含或捆绑有第三方软件/服务,这些第三方软件/服务附带单独的许可协议,您使用附带单独许可协议的任何第三方软件/服务需受到该单独许可协议的约束。 + +### 七、免责条款 +- **1.有限担保** + +我们向您担保,自购买或其他合法取得本产品之日起九十(90)天内(以销售合同日期为准),本产品的存储介质(如果有)在正常使用的情况下无材料和工艺方面的缺陷。在本有限担保项下,您可获得的所有补偿及我们的全部责任为由我们选择更换本产品介质或退还本产品的购买费用。 + +- **2.免责声明** + +除上述有限担保外,本软件按“原样”提供,不提供任何明示或默示的条件、陈述及担保,包括对适销性、对特定用途的适用性或非侵权性的任何默示的担保,均不予负责,但本免责声明被认定为法律上无效的情况除外。 + +- **3.责任限制** + + 在法律允许范围内,无论在何种情况下,无论采用何种有关责任的理论,无论因何种方式导致,对于因使用或无法使用本软件引起的或与之相关的任何收益损失、利润或数据损失,或者对于特殊的、间接的、后果性的、偶发的或惩罚性的损害赔偿,我们或其许可方均不承担任何责任(即使我们已被告知可能出现上述损害赔偿)。根据本协议,在任何情况下,无论是在合同、侵权行为(包括过失)方面,还是在其他方面,我们对您的责任将不超过您就本软件所支付的金额。即使上述担保未能达到其基本目的,上述限制仍然适用。 + + +### 八、协议完整性及可分割性说明 + +- **1.协议完整性** + +本协议是我们就产品使用与您达成的完整协议。它取代此前或同期的所有和本协议不一致的口头或书面往来信息、建议、陈述和担保。在本协议期间,有关报价、订单、回执或各方之间就本协议内容进行的其他往来通信中的任何冲突条款或附加条款,均以本协议为准。对本协议的任何修改均无约束力,除非通过书面进行修改并由每一方的授权代表签字。 + +- **2.可分割性** + +如果本协议中有任何规定被认定为无法执行,则删除相应规定,本协议仍然有效,除非该删除会防碍各方根本目的的实现(在这种情况下,本协议将立即终止)。 + +### 九、适用法律及争议解决 + +- **1.管辖法律适用** + +与本协议相关的任何争议解决(包括但不限于诉讼、仲裁等)均受适用中华人民共和国法律管辖。选择其它任何国家和地区的法律规则不予适用。 + +- **2.终止** + +如果本软件成为或在任一方看来可能成为任何知识产权侵权索赔之标的,则任一方可立即终止本协议。 +本协议在终止之前有效。您可以随时终止本协议,但必须同时销毁本软件的全部正本和副本。如果您未遵守本协议的任何规定,则本协议将不经我们发出通知立即终止。终止时,您必须销毁本软件的全部正本和副本,并且需承担因未遵守本协议而导致的法律责任。 + +## 银河麒麟操作系统隐私政策声明 + +版本发布日期:【2021】年【7】月【30】日 +版本生效日期:【2021】年【7】月【30】日 + +我们非常重视个人信息和隐私保护,为了保证合法、合理、适度的收集、存储、使用您的个人隐私信息,并在安全、可控的情况下进行传输、存储,我们制定了本声明。我们将会按照法律要求和业界成熟安全标准,为您的个人信息提供相应的安全保护措施。 + +本声明将向您说明以下内容: + +一、关于收集和使用您的个人信息 + +二、如何存储和保护您的个人信息 + +三、如何管理您的个人信息 + +四、关于第三方软件/服务的隐私说明 + +五、关于未成年人使用产品 + +六、本声明如何更新 + +七、如何联系我们 + +### 一、如何收集和使用您的个人信息 + +- **1.收集个人信息的情况** + +我们在您使用本产品过程中收集相关的信息,主要为了向您提供更高质量、更易用的产品和更好的服务。 + +1)本产品授权许可机制,会根据您所使用计算机的网卡、固件和主板等信息通过加密机制和转换方法生成申请产品正式授权许可的机器码;您将该机器码发送给麒麟软件商务人员后,可根据合同及相关协议申请正式许可。该机器码不直接包含您所使用计算机的网卡、固件和主板等设备的具体信息。 + +2)本产品软件商店的服务器端,会根据您所使用计算机的CPU类型信息以及IP地址进行连接,同时我们会收集您使用本产品软件商店的相关信息,包括但不限于打开软件商店的时间、各页面之间的交互、搜索内容、下载的内容等,收集的相关信息一般记录在软件商店的服务端系统的日志中,具体存储位置可能因为不同的服务场景有所变动。 + +3)本产品的升级更新,会根据您所使用计算机的IP地址进行连接,以便实现您升级更新系统。 + +4)因业务往来及技术服务等向您收集电子邮箱、电话、姓名等个人信息。 + +5)本产品的生物特征管理工具支持系统组件使用生物特征进行认证,包括指纹、指静脉、虹膜、声纹等。您录入的生物特征信息将储存在本地计算机,这部分信息我们仅接收验证结果,不会收集和上传。如您不需要使用生物特征进行系统认证,可以在生物特征管理工具中关闭该功能。 + +6)本产品提供录音功能,您在使用本产品录音软件中,我们仅会将您使用录音时的音频内容存储在本地计算机中,不会进行收集和上传。 + +7)本产品的服务与支持功能会收集由您提供给我们的日志、电子邮箱、电话、姓名等信息,便于提供技术服务,我们将妥善保管您的个人信息。 + +8)本产品升级过程中,如需新增收集您的个人信息,我们将及时更新本部分内容。 + +- **2.使用个人信息的情况** + +我们严格遵守法律法规的规定及与您的约定,将收集的信息用于以下用途。若我们超出以下用途,我们将再次向您进行说明,并征得您的同意。 + +1)涉及产品许可机制、软件商店使用、系统更新维护、生物识别、在线服务等需要; + +2)我们会利用相关信息协助提升产品的安全性、可靠性和可持续服务; + +3)我们会利用收集的信息(例如您提供的电子邮件地址、电话等)直接与您沟通。例如,业务联系、技术支持或服务回访; + +4)我们会利用收集的数据改进产品当前的易用性、提升产品用户体验(例如软件商店的个性化推荐)以及修复产品缺陷等; + +5)我们会将所收集到的用户行为数据用于大数据分析。例如,我们将收集到的信息用于分析形成不包含任何个人信息的城市热力图或行业洞察报告。我们可能对外公开并与我们的合作伙伴分享经统计加工后不含身份识别内容的信息,用于了解用户如何使用我们服务或让公众了解我们服务的总体使用趋势。 + +6)我们可能使用您的相关信息,在相关网站、应用及其他渠道向您提供与您更加相关的广告。 + +7)为了遵从相关法律法规、部门规章、政府指令的相关要求。 + +- **3.信息的分享及对外提供** + +我们不会共享或转让您的个人信息至第三方,但以下情况除外: + +1)获取您的明确同意后,我们会与第三方分享您的个人信息; + +2)为实现外部处理的目的,我们可能与关联公司或其他第三方合作伙伴(第三方服务供应商、承包商、代理、应用开发者等)分享您的个人信息。我们将采用加密、匿名化处理等手段来保障您的信息安全; + +3)我们不会对外公开披露所收集的个人信息,如必须公开披露时,我们会向您告知此次公开披露的目的、披露信息的类型及可能涉及的敏感信息,并征得您的同意; + +4)随着我们业务的持续发展,我们有可能进行合并、收购、资产转让等交易,我们将告知相关情形,按照法律法规及不低于本声明所要求的标准继续保护或要求新的控制者继续保护您的个人信息; + +5)如我们使用您的个人信息,超出了与收集时所声称的目的及具有直接或合理关联的范围,我们将在使用您的个人信息前,再次向您告知并征得您的同意。 + +- **4.征得授权同意的例外情况** + +1)与国家安全、国防安全等国家利益直接相关的; + +2)与公共安全、公共卫生、公众知情等重大公共利益直接相关的; + +3)与犯罪侦查、起诉、审判和判决执行等直接相关的; + +4)出于维护您或其他个人的生命、财产等重大合法权益但又无法得到您本人同意的; + +5)所收集的个人信息是您自行向社会公众公开的; + +6)从合法公开披露的信息中收集的个人信息,如合法的新闻报道、政府信息公开等渠道; + +7)根据您要求签订和履行合同所必需的; + +8)用于维护所提供的产品或服务的安全稳定运行所必需的。如发现、处置产品或服务的故障; + +9)出于公共利益开展统计或学术研究所必需,且其对外提供学术研究或描述的结果时,对结果中所包含的个人信息进行去标识化处理的; + +10)法律法规规定的其他情形。 + +### 二、如何存储和保护您的个人信息 + +- **1.信息存储的地点** + +我们会按照法律法规规定,将在中国境内收集和产生的个人信息存储于中国境内。 + +- **2.信息存储的期限** + +一般而言,我们仅为实现目的所必需的时间或法律法规规定最短期限保留您的个人信息。记录在日志中的信息会按配置在一定期限保存及自动删除。 + +当我们的产品或服务发生停止运营的情形时,我们将以通知、公告等形式通知您,在合理的期限内删除您的个人信息或进行匿名化处理,并立即停止收集个人信息的活动。 + +- **3.我们如何保护这些信息** + +我们努力为用户的信息安全提供保障,以防止信息的丢失、不当使用、未经授权访问或披露。 + +我们将在合理的安全水平内使用安全保护措施以保障信息的安全。例如,我们会使用加密技术等手段来保护您的系统级账户密码。 + +我们建立专门的管理制度、流程和组织以保障信息的安全。例如,我们严格限制访问信息的人员范围,要求他们遵守保密义务。 + +- **4.应急预案** + +若发生个人信息泄露等安全事件,我们会依法启动应急预案,阻止安全事件扩大,并以推送通知、公告等形式告知您安全事件的情况、事件可能对您的影响以及我们将采取的补救措施。我们还将按照法律法规和监管部门要求,上报个人信息安全事件的处置情况。 + +### 三、如何管理您的个人信息 + +如果担心因使用本产品导致个人信息的泄露,您可根据个人及业务需要考虑暂停或不使用涉及个人信息的相关功能,如产品正式授权许可、应用商店、系统更新升级、生物识别等。 + +在使用本产品之上的第三方软件/服务时,请注意个人隐私保护。 + +### 四、关于第三方软件/服务的隐私说明 + +本协议所指的第三方软件/服务是由非银河麒麟操作系统生产商的其他组织或个人开发的相关软件/服务。 +您在本产品之上安装或使用第三方软件/服务时,第三方软件/服务的隐私保护和法律责任由第三方软件/服务自行负责,请您仔细阅读和审查第三方软件/服务对应的隐私声明或条款,注意个人隐私保护。 + +### 五、关于未成年人使用产品 +如果您是未成年人,则需要您的监护人同意您使用本产品并同意相关服务条款。 除了提供产品所需要的信息外,我们不会刻意要求未成年人提供其他更多数据。征得监护人同意或授权后,未成年人所创建的帐户即被视为等同于其他任何帐户。我们制定了专门的信息处理规则以保护使用本产品的未成年人的个人信息安全。监护人也应采取适当的预防措施保护未成年人,监督其对本产品的使用。 + +### 六、本声明如何更新 + +我们可能会随时更新本声明,并且会在变更时通过产品安装过程或公司网站向您展示变更后的声明。在这些变更生效后使用服务或根据这些条款授予许可的任何软件,即表示您同意新的条款。如果您不同意新的条款,则必须停止使用本产品,请关闭您在本产品之上创建的帐户;如果您是监护人,请帮助您的未成年子女关闭他或她在本产品之上创建的帐户。 + +### 七、如何联系我们 +如您对本声明存在任何疑问,或任何相关的投诉、意见,可通过我们的客服热线400-089-1870、官方网站[www.kylinos.cn](http://www.kylinos.cn "官网")或本产品中“服务与支持”应用进行咨询或反映。您也可以通过发送邮件至[market@kylinos.cn](mailto://market@kylinos.cn "市场部邮箱")与我们联系。 +我们会及时、妥善处理您的问题。一般情况下,我们将在15个工作日内给予答复。 +最近更新日期:2021年11月1日 + 麒麟软件有限公司 + +**地址:** + +天津市滨海高新区塘沽海洋科技园信安创业广场3号楼(300450) + +北京市海淀区北四环西路9号银谷大厦(100190) + +长沙市开福区芙蓉中路1段303号富兴世界金融中心T3栋(410000) + +上海市徐汇区番禺路1028号数娱大厦(200030) + +**电话:**天津(022)58955650 北京(010)51659955 长沙(0731)88280170 上海(021)51098866 + +**传真:**天津(022)58955651 北京(010)62800607 长沙(0731)88280166 上海(021)51062866 + +**公司网站:**[www.kylinos.cn](http://www.kylinos.cn "官网") + +**电子邮件:**[support@kylinos.cn](mailto://support@kylinos.cn "技术支持邮箱") \ No newline at end of file diff --git a/data/guide/kylinsemail/en_US/image/1.png b/data/guide/kylinsemail/en_US/image/1.png new file mode 100644 index 0000000..ca10b85 Binary files /dev/null and b/data/guide/kylinsemail/en_US/image/1.png differ diff --git a/data/guide/kylinsemail/en_US/image/10.png b/data/guide/kylinsemail/en_US/image/10.png new file mode 100644 index 0000000..9cf4a88 Binary files /dev/null and b/data/guide/kylinsemail/en_US/image/10.png differ diff --git a/data/guide/kylinsemail/en_US/image/11.png b/data/guide/kylinsemail/en_US/image/11.png new file mode 100644 index 0000000..7509ac6 Binary files /dev/null and b/data/guide/kylinsemail/en_US/image/11.png differ diff --git a/data/guide/kylinsemail/en_US/image/12.png b/data/guide/kylinsemail/en_US/image/12.png new file mode 100644 index 0000000..5cba82b Binary files /dev/null and b/data/guide/kylinsemail/en_US/image/12.png differ diff --git a/data/guide/kylinsemail/en_US/image/13.png b/data/guide/kylinsemail/en_US/image/13.png new file mode 100644 index 0000000..99b3515 Binary files /dev/null and b/data/guide/kylinsemail/en_US/image/13.png differ diff --git a/data/guide/kylinsemail/en_US/image/14.png b/data/guide/kylinsemail/en_US/image/14.png new file mode 100644 index 0000000..0d6df24 Binary files /dev/null and b/data/guide/kylinsemail/en_US/image/14.png differ diff --git a/data/guide/kylinsemail/en_US/image/15.png b/data/guide/kylinsemail/en_US/image/15.png new file mode 100644 index 0000000..a0e797a Binary files /dev/null and b/data/guide/kylinsemail/en_US/image/15.png differ diff --git a/data/guide/kylinsemail/en_US/image/16.png b/data/guide/kylinsemail/en_US/image/16.png new file mode 100644 index 0000000..16fb1a7 Binary files /dev/null and b/data/guide/kylinsemail/en_US/image/16.png differ diff --git a/data/guide/kylinsemail/en_US/image/17.png b/data/guide/kylinsemail/en_US/image/17.png new file mode 100644 index 0000000..014d8c9 Binary files /dev/null and b/data/guide/kylinsemail/en_US/image/17.png differ diff --git a/data/guide/kylinsemail/en_US/image/18.png b/data/guide/kylinsemail/en_US/image/18.png new file mode 100644 index 0000000..bf49a22 Binary files /dev/null and b/data/guide/kylinsemail/en_US/image/18.png differ diff --git a/data/guide/kylinsemail/en_US/image/19.png b/data/guide/kylinsemail/en_US/image/19.png new file mode 100644 index 0000000..c99c235 Binary files /dev/null and b/data/guide/kylinsemail/en_US/image/19.png differ diff --git a/data/guide/kylinsemail/en_US/image/2.png b/data/guide/kylinsemail/en_US/image/2.png new file mode 100644 index 0000000..f208a62 Binary files /dev/null and b/data/guide/kylinsemail/en_US/image/2.png differ diff --git a/data/guide/kylinsemail/en_US/image/20.png b/data/guide/kylinsemail/en_US/image/20.png new file mode 100644 index 0000000..6eb9d17 Binary files /dev/null and b/data/guide/kylinsemail/en_US/image/20.png differ diff --git a/data/guide/kylinsemail/en_US/image/21.png b/data/guide/kylinsemail/en_US/image/21.png new file mode 100644 index 0000000..18a4498 Binary files /dev/null and b/data/guide/kylinsemail/en_US/image/21.png differ diff --git a/data/guide/kylinsemail/en_US/image/22.png b/data/guide/kylinsemail/en_US/image/22.png new file mode 100644 index 0000000..74db320 Binary files /dev/null and b/data/guide/kylinsemail/en_US/image/22.png differ diff --git a/data/guide/kylinsemail/en_US/image/23.png b/data/guide/kylinsemail/en_US/image/23.png new file mode 100644 index 0000000..7ce3354 Binary files /dev/null and b/data/guide/kylinsemail/en_US/image/23.png differ diff --git a/data/guide/kylinsemail/en_US/image/24.png b/data/guide/kylinsemail/en_US/image/24.png new file mode 100644 index 0000000..1cb1127 Binary files /dev/null and b/data/guide/kylinsemail/en_US/image/24.png differ diff --git a/data/guide/kylinsemail/en_US/image/25.png b/data/guide/kylinsemail/en_US/image/25.png new file mode 100644 index 0000000..686a3f9 Binary files /dev/null and b/data/guide/kylinsemail/en_US/image/25.png differ diff --git a/data/guide/kylinsemail/en_US/image/26.png b/data/guide/kylinsemail/en_US/image/26.png new file mode 100644 index 0000000..4745e39 Binary files /dev/null and b/data/guide/kylinsemail/en_US/image/26.png differ diff --git a/data/guide/kylinsemail/en_US/image/27.png b/data/guide/kylinsemail/en_US/image/27.png new file mode 100644 index 0000000..7f4fb59 Binary files /dev/null and b/data/guide/kylinsemail/en_US/image/27.png differ diff --git a/data/guide/kylinsemail/en_US/image/28.png b/data/guide/kylinsemail/en_US/image/28.png new file mode 100644 index 0000000..7718f3e Binary files /dev/null and b/data/guide/kylinsemail/en_US/image/28.png differ diff --git a/data/guide/kylinsemail/en_US/image/29.png b/data/guide/kylinsemail/en_US/image/29.png new file mode 100644 index 0000000..3a7c5b7 Binary files /dev/null and b/data/guide/kylinsemail/en_US/image/29.png differ diff --git a/data/guide/kylinsemail/en_US/image/3.png b/data/guide/kylinsemail/en_US/image/3.png new file mode 100644 index 0000000..22bb122 Binary files /dev/null and b/data/guide/kylinsemail/en_US/image/3.png differ diff --git a/data/guide/kylinsemail/en_US/image/30.png b/data/guide/kylinsemail/en_US/image/30.png new file mode 100644 index 0000000..a657a53 Binary files /dev/null and b/data/guide/kylinsemail/en_US/image/30.png differ diff --git a/data/guide/kylinsemail/en_US/image/31.png b/data/guide/kylinsemail/en_US/image/31.png new file mode 100644 index 0000000..016045e Binary files /dev/null and b/data/guide/kylinsemail/en_US/image/31.png differ diff --git a/data/guide/kylinsemail/en_US/image/32.png b/data/guide/kylinsemail/en_US/image/32.png new file mode 100644 index 0000000..0248387 Binary files /dev/null and b/data/guide/kylinsemail/en_US/image/32.png differ diff --git a/data/guide/kylinsemail/en_US/image/33.png b/data/guide/kylinsemail/en_US/image/33.png new file mode 100644 index 0000000..ef90e33 Binary files /dev/null and b/data/guide/kylinsemail/en_US/image/33.png differ diff --git a/data/guide/kylinsemail/en_US/image/34.png b/data/guide/kylinsemail/en_US/image/34.png new file mode 100644 index 0000000..fde32d1 Binary files /dev/null and b/data/guide/kylinsemail/en_US/image/34.png differ diff --git a/data/guide/kylinsemail/en_US/image/35.png b/data/guide/kylinsemail/en_US/image/35.png new file mode 100644 index 0000000..9ee9362 Binary files /dev/null and b/data/guide/kylinsemail/en_US/image/35.png differ diff --git a/data/guide/kylinsemail/en_US/image/4.png b/data/guide/kylinsemail/en_US/image/4.png new file mode 100644 index 0000000..a3fba0d Binary files /dev/null and b/data/guide/kylinsemail/en_US/image/4.png differ diff --git a/data/guide/kylinsemail/en_US/image/5.png b/data/guide/kylinsemail/en_US/image/5.png new file mode 100644 index 0000000..5ffffb1 Binary files /dev/null and b/data/guide/kylinsemail/en_US/image/5.png differ diff --git a/data/guide/kylinsemail/en_US/image/6.png b/data/guide/kylinsemail/en_US/image/6.png new file mode 100644 index 0000000..d5ff861 Binary files /dev/null and b/data/guide/kylinsemail/en_US/image/6.png differ diff --git a/data/guide/kylinsemail/en_US/image/7.png b/data/guide/kylinsemail/en_US/image/7.png new file mode 100644 index 0000000..b77ec9e Binary files /dev/null and b/data/guide/kylinsemail/en_US/image/7.png differ diff --git a/data/guide/kylinsemail/en_US/image/8.png b/data/guide/kylinsemail/en_US/image/8.png new file mode 100644 index 0000000..6ccd23a Binary files /dev/null and b/data/guide/kylinsemail/en_US/image/8.png differ diff --git a/data/guide/kylinsemail/en_US/image/9.png b/data/guide/kylinsemail/en_US/image/9.png new file mode 100644 index 0000000..a795170 Binary files /dev/null and b/data/guide/kylinsemail/en_US/image/9.png differ diff --git a/data/guide/kylinsemail/en_US/index.md b/data/guide/kylinsemail/en_US/index.md new file mode 100644 index 0000000..00eca33 --- /dev/null +++ b/data/guide/kylinsemail/en_US/index.md @@ -0,0 +1,182 @@ +# SEmail 客户端 +## 客户端入门与基础 +### 1.1 初始导向 +首次启动中标麒麟 SEmail 客户端软件时进入欢迎页。 + +![](image/1.png) + +点击【立即体验】进入邮箱账户配置,当前 V6.0 版本 SEmail 客户端仅支持**IMAP**获取协议接收邮件。 + +在客户端中输入邮箱账户名称、邮箱地址和密码,点击【继续】按钮到下一步,客户端进入自动配置邮箱账户,在邮箱账户配置无法完成自动配置或用户邮箱验证失败时,客户端进入手动配置界面,用户自行设置邮箱账户接收邮件服务器(IMAP)、发送服务器(SMTP)的地址和端口,并且重复确认邮箱账户地址,密码填写账户信息时的密码同步,在此处无需重复提供密码。完成以上设置内容后,点击【连接账户】按钮继进行邮箱身份认证 + +![](image/2.png) + +![](image/3.png) + +当用户邮箱账户身份认证通过后,用户可以根据自身操作习惯选择客户端界面面板的布局方式,选择完成后单击“开始使用”的进入客户端主界面。 + +![](image/4.png) + +### 1.2 收取邮件 + +中标麒麟 SEmail 客户端默认在后台每间隔一段时间就进行邮件收取,若用户想要主动收取新邮件,可以在软件主界面右上角位置点击顶栏的“立即同步新邮件”按钮来检索邮件服务器获取电子邮件,也可以通过键盘快捷键 F5 快速收取。 + +![](image/5.png) + +### 1.3 阅读邮件 + +检索电子邮件后,收取到的新邮件将收录在“收件箱”内。邮件夹名称的右侧显示了该邮件夹中新未读邮件的数量。系统默认提供了“收件箱”、“未读”、“已加星标”、“已发送邮件”、“垃圾邮件”、“垃圾邮件”、“归档邮件”“回收站”和“草稿箱”默认文件夹,要查看某个邮件夹内的邮件可单击该邮件夹,文件夹中的所有邮件将显示在“消息列表”窗格中显示。可以通过使用鼠标或键盘上“↑”和“下”方向键在列表中导航以及滚动电子邮件来选择电子邮件。在消息列表窗格中选中的邮件会在其右侧的邮件阅读窗格显示邮件内容,亦可以通过双击消息列表中的邮件或单击阅读窗格上的“弹出会话”按钮,打开单独的邮件阅读视窗。 + +![](image/6.png) + +![](image/7.png) + +### 1.4 写邮件 +单击中标麒麟 SEmail 客户端软件主界面顶端栏左上角的“撰写新邮件”按钮,将打开一个编辑窗口。如果有多个帐户,“发件人”字段可用于选择发件的帐户;“至”字段负责填写收件人邮箱地址。填写时收件人时以“;”结尾可将联系人存为标签形式,再添加更多联系人同样方式结尾,即用户可编辑多个收件人。还可以点击收件人栏最右侧的“抄送”或“、密送”字段以添加不同类型的联系人。在收件人字段最右侧,点击“通讯录”按钮,可以打开个人通讯录,通讯录中不仅展示用户定义的通讯录联系人,还显示了近期邮件来往的联系人地址,并提供了智能搜索的功能。在下方发件人字段的最右侧,用户可以通过切换签名的快捷键,为邮件添加个性签名。之后,填写邮件的主题,然后键入正文。邮件编辑时,用户可以通过“快速回复”功能,选择预置的模板来快速完成邮件编辑,在其右侧按钮支持在邮件中添加附件,附件默认不能超过 25M。关闭编辑窗口将自动保存草稿,若不想保留草稿,可以点击写信界面右下角的“删除草稿”按钮,彻底删除当前邮件。 + +![](image/8.png) + +### 1.5 发送邮件 +编辑邮件完成后,可以单击“发送”按钮立即发送电子邮件,也可以使用“稍 +后发送”按钮将邮件排队在待发送队列中以便以后发送。使用“发送”时,发送邮件后,编辑窗口将自行关闭;如果有错误,编辑窗口将保持打开状态。使用“稍后发送”时,撰写窗口将立即关闭,邮件将存储在“草稿箱”邮件夹中。当用户单击想要对定时发送的邮件进行内容修改或者发送时间修改时,进入“草稿箱”邮件夹中双击打开想要修改的邮件,可以进行再次编辑。发送的电子邮件保存在邮箱的“已发送邮件”文件夹中。如果尝试发送空白主题的邮件,客户端出现弹窗提示,需用户确认是否发送空主题邮件。在邮件客户端的首选项设置中的-“通用设置”模块包含对邮件发送功能的相关配置,用户可以选择邮件发送的默认行为、消息发送声音、默认回复行为设置、发送撤销时间和默认发件账号的设置等。 + +![](image/9.png) + +![](image/10.png) + +### 1.6 邮件处理 +用户接收到新邮件后,可以对邮件进行各种处理,客户端提供快速回复、回复全部、转发、显示原始邮件、打印邮件、预览附件、下载附件等功能,多次对话的邮件采用会话的形式展现,用户可以查看当前会话最新一封邮件,也可以点击工具栏中展开会话的按钮,查看全部对话邮件。 + +![](image/11.png) + +![](image/12.png) + +### 1.7 邮件管理 +用户可以对邮件进行标记,选中邮件列表中的目标邮件打开右键菜单,选项中提供“标记为未读”、“标记为垃圾邮件”、“标记为星标”操作,对于被标记的邮件再次打开右击菜单,可以取消标记内容。同时用户也可以通过主页面上的快捷键按钮对选中邮件进行标记,标记可以帮助用户分类邮件,并快速找到目标的邮件。用户可以通过“归档”、“移动至回收站”、“邮件移动”功能对邮件进行灵活管理,将邮件进行快速分类备份。 + +![](image/13.png) + +![](image/14.png) + +## 邮件夹相关功能 +### 2.1 邮件文件夹 +用户可以根据需要创建任意数量的文件夹。要创建新文件夹,只需在文件夹右侧,单击添加文件夹【+】按钮,在“创建新项目”中填写文件夹名称,点击回车键提交,则创建新文件夹动作完成。创建新文件夹可以方便用户按照不同类型的邮件进行分类存储或保留旧邮件等。用户可以通过右键单击邮件夹,通过弹出选项重命名和删除文件夹,对文件夹进行管理。 + +![](image/15.png) + +### 2.2 文件夹自定义 +中标麒麟 SEmail 客户端提供了文件夹自定义的功能,每个邮箱账户都可以自己定义收件箱、已发送邮件、草稿、垃圾邮件、归档、回收站此六个基本邮箱所对应的文件夹。对于中标麒麟安全邮件服务端系列产品的用户来说,各个业务邮箱都已自动设置完成,而对于普通用户来说收件箱默认对应 INBOX 文件夹;已发送邮件箱对应 Sent Messages 文件夹;草稿对应 Drafts 文件夹;垃圾邮件对应Junk 文件夹;归档对应 Archive 文件夹;回收站对应 Trash 文件夹。 + +![](image/16.png) + +### 2.3 过滤功能 +通过设置邮件规则(过滤器规则),中标麒麟 SEmail 客户端软件可以自动对收到的电子邮件进行排序归类,以避免每次收到邮件时都必须手动移动邮件。过滤器中过滤收发件人可以通过通讯录快速选择。 + +用户可以通过标题栏“首选项”菜单的“邮件规则”项找到过滤功能设置 。 +通过此页面,用户可以定义新规则,修改或删除现有过滤规则。在规则列表的最下方点击【+】按钮,即可添加一条新的空白过滤规则,相对只要选中一条规则点击规则列表下方的【-】号,即可删除该规则。 + +过滤规则由四件事定义:应用帐户,过滤器名称,筛选条件和操作。其中“账 +号”项可以选择一个帐户名,这会将规则限制为仅作用于此帐户中检索到的邮件,而对于客户端在从所有其他帐户中检索到的邮件时则跳过上述的规则。“过滤器名称”项默认为未命名规则,点击规则右侧的编辑图标,即可为该规则进行重命名,此项可以帮助用户快速找到的规则。“满足条件”项默认范围为 “全部”,这表示该规则可能有多个筛选条件并且将邮件要满足所有筛选条件才能执行操作处理,而“条件”是一种表达式,用于定义过滤邮件在检索邮件时应查找的内容(例如“主题” 包含“test”、“附件名称”包含“病毒”等内容),用户可以通过单击下拉选框选择不同字段轻松定义条件。过滤规则的最后一部分是“操作”,该项指示客户端如何处理符合定义的条件的邮件。例如“ 标记未已读”表示将符合条件的邮件一到达,就将其标记为已读。“操作”也有通过下拉选框按钮进行选择,可帮助用户定义要采取的措施。 + +可以将过滤规则分配给单个特定账户,一般来说邮件规则只对新收取的邮件起作用,对于规则设定之前的邮件并不能进行管理。但在 SEmail 客户端中,用户可以通过页面最下方的【处理整个收件箱】按钮,将规则全局应用于包括原有邮件的所有邮件上。 + +![](image/17.png) + +### 2.4 邮件搜索 +中标麒麟 SEmail 客户端软件提供了高级搜索电子邮件的方法,可以将多个搜索项与 AND 和 OR 组合,创建复杂结果查询。 + +搜索栏的位置在主页面的顶端位置,选中搜索栏即可输入搜索条件,使用回 +车键提交搜索内容,并在邮件列表窗格中排列展示搜索结果。搜索的范围是当前文件夹,也就是说,在收件箱中搜索邮件,呈现的结果来源是收件箱,其他邮箱中符合条件的邮件不会被筛选出来。 + +客户端中还提供了一种快捷搜索的方式,在邮件列表里选中一封邮件,通过 +鼠标右键菜单中,可以对发件人和发件主题进行快速搜索,找到与发件人或右键主题相关的其他邮件。 + +![](image/18.png) + +![](image/19.png) + +## 账户设置 +### 3.1 帐号设置 +对于使用中标麒麟 SEmail 客户端软件的用户来说,可以在客户端主界面标题栏中“首选项”菜单中“账号”模块对邮箱账户进行管理。账户列表展示当前已登录客户端的所有账号,添加账号只要点击里列表下方的【+】按钮,即可根据页面引导,在弹出页面中完成添加账号的操作。如果想要删除账户,只需选中目标账户,点击账号列表下方的【-】按钮直接删除。 + +其中“账户标签”是用户客户端文件夹列表顶部,用户区分账户的名称, +“发件人名称”是用户在发信时,用于发件邮箱地址前的名称,收件人将显示此名称。在此处还可以设置自动抄送/密送的联系人,可以在每次发信时都将信件抄送给设置的联系人。“账户颜色”可以给账户列表中当前账号及主页收信区域等区域添加一层主题色。“更新连接设置”可以修改当前账号的服务器设置。 + +![](image/20.png) + +![](image/21.png) + +### 3.2 切换账号 +如果用户在客户端上登陆了多个邮箱账户,可以通过在文件夹窗格顶端,邮 +箱地址右侧的下拉选框进行来切换要使用的邮箱账户,并且在此处点击【管理账户】也可以进入“账号”模块,也可以点击【添加账号】快速添加账户。 + +![](image/22.png) + +## 邮件工具和其它设置 +### 4.1 通讯录 +通过中标麒麟 SEmail 客户端软件顶端栏快捷键“通讯录”按钮可以访问通讯录设置功能,其中支持新增联系人、编辑联系人、删除联系人、对选中联系人发起写信。新增联系人首先要选择一个账户的文件夹,联系人会被默认放入此文件夹分组中,填写用户的姓名、单位名称、邮件地址、联系方式、住址、生日等信息,点击保存即可完成新建联系人。对已有联系人,选中目标联系人后可以通过“编辑”按钮,对联系人信息进行修改,也可在选中联系人后直接点击删除联系人,将在本分组中删除联系人;选中单个或多个联系人,点击“写信”按钮, +即可打开写信按钮,并且选中联系人将默认加入收件人栏中。 + +![](image/23.png) + +![](image/24.png) + +![](image/25.png) + +通讯录支持联系人分组,点击“+”可添加一个联系组,用户可以通过邮件 +单击分组,可重命名分组和删除分组,可以在全部联系人当中将目标联系人拖入各个分组中,从而对联系人进行分类管理。 + +![](image/26.png) + +SEmail 客户端支持从外部导入通讯录。从通讯录模块中点击“导入”按钮,客户端打开本地文件页面,用户选择要导入的 CSV 通讯簿文件点击“打开”,即可完成导入。同样客户端支持联系人导出功能,导出的表格中包括联系人的“姓名”、“邮件”、“单位名称”、“手机”、“住址”和“生日”字段。导出的CSV 格式文件也可作为用于导入通讯录的模板文件。 + +![](image/27.png) + +![](image/28.png) + +### 4.2 模板快速回复 +在编辑邮件时用户可以使用模板快速回复功能,模板需要在中标麒麟 SEmail客户端软件主界面”首选项“菜单下”快速回复“的设置中预置才能在编辑时调用,例如:周报、月报、报表等格式、收件人、主题等相对固定的情况适用于使用该功能。在邮件编辑界面可以通过点击“快速恢复”选择模板,快速生成邮件。 + +应用模板时,若编辑区未插入过模板,用户可以直接选择要使用的模板,如 +果需要更换其他模板,可以重复插入模板的动作,在新模板应用之前会弹窗提示,是否替换模板,选择“替换内容”则将模板内容应用到写信窗口中,执行“替换”操作,写信界面中的收件人和主题等都不会受到影响。 + +![](image/29.png) + +![](image/30.png) + +### 4.3 撤销操作 +使用中标麒麟 SEmail 邮件客户端软件时,针对有些操作提供了撤销操作的功能: +1. 撤销发送邮件,邮件编辑完成发出后不会立即关闭窗口,界面最下方出 +现撤销发送的提示,点击撤销发送,邮件中止发送动作,邮件将存入草稿箱。 +2. 撤销移动邮件,执行移动邮件操作,界面最下方出现撤销提示,点击撤 +销,中止移动动作。 +3. 撤销移动邮件,执行移动邮件操作,界面最下方出现撤销提示,点击撤 +销,中止移动动作。 +4. 撤销标记邮件,执行标记邮件操作,界面最下方出现撤销提示,点击撤 +销,中止标记动作。 +5. 撤销删除邮件,执行删除邮件操作,界面最下方出现撤销提示,点击撤 +销,中止删除动作。 +6. 撤销归档邮件,执行归档邮件操作,界面最下方出现撤销提示,点击撤 +销,中止归档动作。 + +![](image/31.png) + +### 4.4 外观设置 +中标麒麟 SEmail 客户端软件为用户提供个性化的外观置设功能,提供了两种常见的布局方式:阅读面板(单面板)打开布局、阅读面板(双面板)关闭布局。单面板界面简洁,对日常只用邮箱做简单收发工作的用户非常适用,而双面板界面将所有易用的邮件功能都整理到界面当中,对于熟悉邮件系统,对邮件具备管理需求的用户十分友好。此外客户端提供了多种主题颜色配置,用户可以选择自己喜欢的主题使界面更美观。并且 SEmail 客户端为用户提供了多种个性主题和配色风格,能适应各种年龄段的用户群体审美,满足用户的个性化需求。 + +![](image/32.png) + +![](image/33.png) + +### 4.5 快捷键设置 +客户端提供键盘快捷键功能,并且为了照顾用户操作习惯,预置了一套常规 +的快捷键方案,用户可以根据自己的操作习惯编辑自定义快捷键,定制自己专属的快捷键方案。 + +![](image/34.png) + +### 4.6 签名 +在本文 1.4 节提到过,使用中标麒麟 SEmail 客户端软件进行写信时,用户可以插入、替换签名,而在写信界面只是调用已经编辑好的签名信息,要对签名进行编辑,需要通过“首选项”中“签名”模块下对其管理。 + +进入签名模块界面分为签名列表区域和签名编辑区域,邮件列表区域展示所有签名列,点击列表下【+】可创建新签名;在列表中选中目标已有签名,点击【-】按钮将删除该签名。在签名编辑区域可以对签名进行编辑,签名名称用于区分签名,签名预览区不可直接编辑,签名内容通过预览区下方的表单填写,而预览区下方提供了多种表单排版样式,可以生成多种风格的签名排版。在编辑区的右上角可以选择签名默认设置,点击下拉选框将出现当前客户端已登录的所有账号,选择一个账号即可将当前签名设置为此账号默认签名,如果用户不想使用默认签名,无需删除所有签名,只要在默认设置的下拉选框中再次勾选账号,便能取消默认设置。 + +![](image/35.png) \ No newline at end of file diff --git a/data/guide/kylinsemail/kylinsemail.png b/data/guide/kylinsemail/kylinsemail.png new file mode 100644 index 0000000..4e8bd63 Binary files /dev/null and b/data/guide/kylinsemail/kylinsemail.png differ diff --git a/data/guide/kylinsemail/zh_CN/image/1.png b/data/guide/kylinsemail/zh_CN/image/1.png new file mode 100644 index 0000000..ca10b85 Binary files /dev/null and b/data/guide/kylinsemail/zh_CN/image/1.png differ diff --git a/data/guide/kylinsemail/zh_CN/image/10.png b/data/guide/kylinsemail/zh_CN/image/10.png new file mode 100644 index 0000000..9cf4a88 Binary files /dev/null and b/data/guide/kylinsemail/zh_CN/image/10.png differ diff --git a/data/guide/kylinsemail/zh_CN/image/11.png b/data/guide/kylinsemail/zh_CN/image/11.png new file mode 100644 index 0000000..7509ac6 Binary files /dev/null and b/data/guide/kylinsemail/zh_CN/image/11.png differ diff --git a/data/guide/kylinsemail/zh_CN/image/12.png b/data/guide/kylinsemail/zh_CN/image/12.png new file mode 100644 index 0000000..5cba82b Binary files /dev/null and b/data/guide/kylinsemail/zh_CN/image/12.png differ diff --git a/data/guide/kylinsemail/zh_CN/image/13.png b/data/guide/kylinsemail/zh_CN/image/13.png new file mode 100644 index 0000000..99b3515 Binary files /dev/null and b/data/guide/kylinsemail/zh_CN/image/13.png differ diff --git a/data/guide/kylinsemail/zh_CN/image/14.png b/data/guide/kylinsemail/zh_CN/image/14.png new file mode 100644 index 0000000..0d6df24 Binary files /dev/null and b/data/guide/kylinsemail/zh_CN/image/14.png differ diff --git a/data/guide/kylinsemail/zh_CN/image/15.png b/data/guide/kylinsemail/zh_CN/image/15.png new file mode 100644 index 0000000..a0e797a Binary files /dev/null and b/data/guide/kylinsemail/zh_CN/image/15.png differ diff --git a/data/guide/kylinsemail/zh_CN/image/16.png b/data/guide/kylinsemail/zh_CN/image/16.png new file mode 100644 index 0000000..16fb1a7 Binary files /dev/null and b/data/guide/kylinsemail/zh_CN/image/16.png differ diff --git a/data/guide/kylinsemail/zh_CN/image/17.png b/data/guide/kylinsemail/zh_CN/image/17.png new file mode 100644 index 0000000..014d8c9 Binary files /dev/null and b/data/guide/kylinsemail/zh_CN/image/17.png differ diff --git a/data/guide/kylinsemail/zh_CN/image/18.png b/data/guide/kylinsemail/zh_CN/image/18.png new file mode 100644 index 0000000..bf49a22 Binary files /dev/null and b/data/guide/kylinsemail/zh_CN/image/18.png differ diff --git a/data/guide/kylinsemail/zh_CN/image/19.png b/data/guide/kylinsemail/zh_CN/image/19.png new file mode 100644 index 0000000..c99c235 Binary files /dev/null and b/data/guide/kylinsemail/zh_CN/image/19.png differ diff --git a/data/guide/kylinsemail/zh_CN/image/2.png b/data/guide/kylinsemail/zh_CN/image/2.png new file mode 100644 index 0000000..f208a62 Binary files /dev/null and b/data/guide/kylinsemail/zh_CN/image/2.png differ diff --git a/data/guide/kylinsemail/zh_CN/image/20.png b/data/guide/kylinsemail/zh_CN/image/20.png new file mode 100644 index 0000000..6eb9d17 Binary files /dev/null and b/data/guide/kylinsemail/zh_CN/image/20.png differ diff --git a/data/guide/kylinsemail/zh_CN/image/21.png b/data/guide/kylinsemail/zh_CN/image/21.png new file mode 100644 index 0000000..18a4498 Binary files /dev/null and b/data/guide/kylinsemail/zh_CN/image/21.png differ diff --git a/data/guide/kylinsemail/zh_CN/image/22.png b/data/guide/kylinsemail/zh_CN/image/22.png new file mode 100644 index 0000000..74db320 Binary files /dev/null and b/data/guide/kylinsemail/zh_CN/image/22.png differ diff --git a/data/guide/kylinsemail/zh_CN/image/23.png b/data/guide/kylinsemail/zh_CN/image/23.png new file mode 100644 index 0000000..7ce3354 Binary files /dev/null and b/data/guide/kylinsemail/zh_CN/image/23.png differ diff --git a/data/guide/kylinsemail/zh_CN/image/24.png b/data/guide/kylinsemail/zh_CN/image/24.png new file mode 100644 index 0000000..1cb1127 Binary files /dev/null and b/data/guide/kylinsemail/zh_CN/image/24.png differ diff --git a/data/guide/kylinsemail/zh_CN/image/25.png b/data/guide/kylinsemail/zh_CN/image/25.png new file mode 100644 index 0000000..686a3f9 Binary files /dev/null and b/data/guide/kylinsemail/zh_CN/image/25.png differ diff --git a/data/guide/kylinsemail/zh_CN/image/26.png b/data/guide/kylinsemail/zh_CN/image/26.png new file mode 100644 index 0000000..4745e39 Binary files /dev/null and b/data/guide/kylinsemail/zh_CN/image/26.png differ diff --git a/data/guide/kylinsemail/zh_CN/image/27.png b/data/guide/kylinsemail/zh_CN/image/27.png new file mode 100644 index 0000000..7f4fb59 Binary files /dev/null and b/data/guide/kylinsemail/zh_CN/image/27.png differ diff --git a/data/guide/kylinsemail/zh_CN/image/28.png b/data/guide/kylinsemail/zh_CN/image/28.png new file mode 100644 index 0000000..7718f3e Binary files /dev/null and b/data/guide/kylinsemail/zh_CN/image/28.png differ diff --git a/data/guide/kylinsemail/zh_CN/image/29.png b/data/guide/kylinsemail/zh_CN/image/29.png new file mode 100644 index 0000000..3a7c5b7 Binary files /dev/null and b/data/guide/kylinsemail/zh_CN/image/29.png differ diff --git a/data/guide/kylinsemail/zh_CN/image/3.png b/data/guide/kylinsemail/zh_CN/image/3.png new file mode 100644 index 0000000..22bb122 Binary files /dev/null and b/data/guide/kylinsemail/zh_CN/image/3.png differ diff --git a/data/guide/kylinsemail/zh_CN/image/30.png b/data/guide/kylinsemail/zh_CN/image/30.png new file mode 100644 index 0000000..a657a53 Binary files /dev/null and b/data/guide/kylinsemail/zh_CN/image/30.png differ diff --git a/data/guide/kylinsemail/zh_CN/image/31.png b/data/guide/kylinsemail/zh_CN/image/31.png new file mode 100644 index 0000000..016045e Binary files /dev/null and b/data/guide/kylinsemail/zh_CN/image/31.png differ diff --git a/data/guide/kylinsemail/zh_CN/image/32.png b/data/guide/kylinsemail/zh_CN/image/32.png new file mode 100644 index 0000000..0248387 Binary files /dev/null and b/data/guide/kylinsemail/zh_CN/image/32.png differ diff --git a/data/guide/kylinsemail/zh_CN/image/33.png b/data/guide/kylinsemail/zh_CN/image/33.png new file mode 100644 index 0000000..ef90e33 Binary files /dev/null and b/data/guide/kylinsemail/zh_CN/image/33.png differ diff --git a/data/guide/kylinsemail/zh_CN/image/34.png b/data/guide/kylinsemail/zh_CN/image/34.png new file mode 100644 index 0000000..fde32d1 Binary files /dev/null and b/data/guide/kylinsemail/zh_CN/image/34.png differ diff --git a/data/guide/kylinsemail/zh_CN/image/35.png b/data/guide/kylinsemail/zh_CN/image/35.png new file mode 100644 index 0000000..9ee9362 Binary files /dev/null and b/data/guide/kylinsemail/zh_CN/image/35.png differ diff --git a/data/guide/kylinsemail/zh_CN/image/4.png b/data/guide/kylinsemail/zh_CN/image/4.png new file mode 100644 index 0000000..a3fba0d Binary files /dev/null and b/data/guide/kylinsemail/zh_CN/image/4.png differ diff --git a/data/guide/kylinsemail/zh_CN/image/5.png b/data/guide/kylinsemail/zh_CN/image/5.png new file mode 100644 index 0000000..5ffffb1 Binary files /dev/null and b/data/guide/kylinsemail/zh_CN/image/5.png differ diff --git a/data/guide/kylinsemail/zh_CN/image/6.png b/data/guide/kylinsemail/zh_CN/image/6.png new file mode 100644 index 0000000..d5ff861 Binary files /dev/null and b/data/guide/kylinsemail/zh_CN/image/6.png differ diff --git a/data/guide/kylinsemail/zh_CN/image/7.png b/data/guide/kylinsemail/zh_CN/image/7.png new file mode 100644 index 0000000..b77ec9e Binary files /dev/null and b/data/guide/kylinsemail/zh_CN/image/7.png differ diff --git a/data/guide/kylinsemail/zh_CN/image/8.png b/data/guide/kylinsemail/zh_CN/image/8.png new file mode 100644 index 0000000..6ccd23a Binary files /dev/null and b/data/guide/kylinsemail/zh_CN/image/8.png differ diff --git a/data/guide/kylinsemail/zh_CN/image/9.png b/data/guide/kylinsemail/zh_CN/image/9.png new file mode 100644 index 0000000..a795170 Binary files /dev/null and b/data/guide/kylinsemail/zh_CN/image/9.png differ diff --git a/data/guide/kylinsemail/zh_CN/index.md b/data/guide/kylinsemail/zh_CN/index.md new file mode 100644 index 0000000..00eca33 --- /dev/null +++ b/data/guide/kylinsemail/zh_CN/index.md @@ -0,0 +1,182 @@ +# SEmail 客户端 +## 客户端入门与基础 +### 1.1 初始导向 +首次启动中标麒麟 SEmail 客户端软件时进入欢迎页。 + +![](image/1.png) + +点击【立即体验】进入邮箱账户配置,当前 V6.0 版本 SEmail 客户端仅支持**IMAP**获取协议接收邮件。 + +在客户端中输入邮箱账户名称、邮箱地址和密码,点击【继续】按钮到下一步,客户端进入自动配置邮箱账户,在邮箱账户配置无法完成自动配置或用户邮箱验证失败时,客户端进入手动配置界面,用户自行设置邮箱账户接收邮件服务器(IMAP)、发送服务器(SMTP)的地址和端口,并且重复确认邮箱账户地址,密码填写账户信息时的密码同步,在此处无需重复提供密码。完成以上设置内容后,点击【连接账户】按钮继进行邮箱身份认证 + +![](image/2.png) + +![](image/3.png) + +当用户邮箱账户身份认证通过后,用户可以根据自身操作习惯选择客户端界面面板的布局方式,选择完成后单击“开始使用”的进入客户端主界面。 + +![](image/4.png) + +### 1.2 收取邮件 + +中标麒麟 SEmail 客户端默认在后台每间隔一段时间就进行邮件收取,若用户想要主动收取新邮件,可以在软件主界面右上角位置点击顶栏的“立即同步新邮件”按钮来检索邮件服务器获取电子邮件,也可以通过键盘快捷键 F5 快速收取。 + +![](image/5.png) + +### 1.3 阅读邮件 + +检索电子邮件后,收取到的新邮件将收录在“收件箱”内。邮件夹名称的右侧显示了该邮件夹中新未读邮件的数量。系统默认提供了“收件箱”、“未读”、“已加星标”、“已发送邮件”、“垃圾邮件”、“垃圾邮件”、“归档邮件”“回收站”和“草稿箱”默认文件夹,要查看某个邮件夹内的邮件可单击该邮件夹,文件夹中的所有邮件将显示在“消息列表”窗格中显示。可以通过使用鼠标或键盘上“↑”和“下”方向键在列表中导航以及滚动电子邮件来选择电子邮件。在消息列表窗格中选中的邮件会在其右侧的邮件阅读窗格显示邮件内容,亦可以通过双击消息列表中的邮件或单击阅读窗格上的“弹出会话”按钮,打开单独的邮件阅读视窗。 + +![](image/6.png) + +![](image/7.png) + +### 1.4 写邮件 +单击中标麒麟 SEmail 客户端软件主界面顶端栏左上角的“撰写新邮件”按钮,将打开一个编辑窗口。如果有多个帐户,“发件人”字段可用于选择发件的帐户;“至”字段负责填写收件人邮箱地址。填写时收件人时以“;”结尾可将联系人存为标签形式,再添加更多联系人同样方式结尾,即用户可编辑多个收件人。还可以点击收件人栏最右侧的“抄送”或“、密送”字段以添加不同类型的联系人。在收件人字段最右侧,点击“通讯录”按钮,可以打开个人通讯录,通讯录中不仅展示用户定义的通讯录联系人,还显示了近期邮件来往的联系人地址,并提供了智能搜索的功能。在下方发件人字段的最右侧,用户可以通过切换签名的快捷键,为邮件添加个性签名。之后,填写邮件的主题,然后键入正文。邮件编辑时,用户可以通过“快速回复”功能,选择预置的模板来快速完成邮件编辑,在其右侧按钮支持在邮件中添加附件,附件默认不能超过 25M。关闭编辑窗口将自动保存草稿,若不想保留草稿,可以点击写信界面右下角的“删除草稿”按钮,彻底删除当前邮件。 + +![](image/8.png) + +### 1.5 发送邮件 +编辑邮件完成后,可以单击“发送”按钮立即发送电子邮件,也可以使用“稍 +后发送”按钮将邮件排队在待发送队列中以便以后发送。使用“发送”时,发送邮件后,编辑窗口将自行关闭;如果有错误,编辑窗口将保持打开状态。使用“稍后发送”时,撰写窗口将立即关闭,邮件将存储在“草稿箱”邮件夹中。当用户单击想要对定时发送的邮件进行内容修改或者发送时间修改时,进入“草稿箱”邮件夹中双击打开想要修改的邮件,可以进行再次编辑。发送的电子邮件保存在邮箱的“已发送邮件”文件夹中。如果尝试发送空白主题的邮件,客户端出现弹窗提示,需用户确认是否发送空主题邮件。在邮件客户端的首选项设置中的-“通用设置”模块包含对邮件发送功能的相关配置,用户可以选择邮件发送的默认行为、消息发送声音、默认回复行为设置、发送撤销时间和默认发件账号的设置等。 + +![](image/9.png) + +![](image/10.png) + +### 1.6 邮件处理 +用户接收到新邮件后,可以对邮件进行各种处理,客户端提供快速回复、回复全部、转发、显示原始邮件、打印邮件、预览附件、下载附件等功能,多次对话的邮件采用会话的形式展现,用户可以查看当前会话最新一封邮件,也可以点击工具栏中展开会话的按钮,查看全部对话邮件。 + +![](image/11.png) + +![](image/12.png) + +### 1.7 邮件管理 +用户可以对邮件进行标记,选中邮件列表中的目标邮件打开右键菜单,选项中提供“标记为未读”、“标记为垃圾邮件”、“标记为星标”操作,对于被标记的邮件再次打开右击菜单,可以取消标记内容。同时用户也可以通过主页面上的快捷键按钮对选中邮件进行标记,标记可以帮助用户分类邮件,并快速找到目标的邮件。用户可以通过“归档”、“移动至回收站”、“邮件移动”功能对邮件进行灵活管理,将邮件进行快速分类备份。 + +![](image/13.png) + +![](image/14.png) + +## 邮件夹相关功能 +### 2.1 邮件文件夹 +用户可以根据需要创建任意数量的文件夹。要创建新文件夹,只需在文件夹右侧,单击添加文件夹【+】按钮,在“创建新项目”中填写文件夹名称,点击回车键提交,则创建新文件夹动作完成。创建新文件夹可以方便用户按照不同类型的邮件进行分类存储或保留旧邮件等。用户可以通过右键单击邮件夹,通过弹出选项重命名和删除文件夹,对文件夹进行管理。 + +![](image/15.png) + +### 2.2 文件夹自定义 +中标麒麟 SEmail 客户端提供了文件夹自定义的功能,每个邮箱账户都可以自己定义收件箱、已发送邮件、草稿、垃圾邮件、归档、回收站此六个基本邮箱所对应的文件夹。对于中标麒麟安全邮件服务端系列产品的用户来说,各个业务邮箱都已自动设置完成,而对于普通用户来说收件箱默认对应 INBOX 文件夹;已发送邮件箱对应 Sent Messages 文件夹;草稿对应 Drafts 文件夹;垃圾邮件对应Junk 文件夹;归档对应 Archive 文件夹;回收站对应 Trash 文件夹。 + +![](image/16.png) + +### 2.3 过滤功能 +通过设置邮件规则(过滤器规则),中标麒麟 SEmail 客户端软件可以自动对收到的电子邮件进行排序归类,以避免每次收到邮件时都必须手动移动邮件。过滤器中过滤收发件人可以通过通讯录快速选择。 + +用户可以通过标题栏“首选项”菜单的“邮件规则”项找到过滤功能设置 。 +通过此页面,用户可以定义新规则,修改或删除现有过滤规则。在规则列表的最下方点击【+】按钮,即可添加一条新的空白过滤规则,相对只要选中一条规则点击规则列表下方的【-】号,即可删除该规则。 + +过滤规则由四件事定义:应用帐户,过滤器名称,筛选条件和操作。其中“账 +号”项可以选择一个帐户名,这会将规则限制为仅作用于此帐户中检索到的邮件,而对于客户端在从所有其他帐户中检索到的邮件时则跳过上述的规则。“过滤器名称”项默认为未命名规则,点击规则右侧的编辑图标,即可为该规则进行重命名,此项可以帮助用户快速找到的规则。“满足条件”项默认范围为 “全部”,这表示该规则可能有多个筛选条件并且将邮件要满足所有筛选条件才能执行操作处理,而“条件”是一种表达式,用于定义过滤邮件在检索邮件时应查找的内容(例如“主题” 包含“test”、“附件名称”包含“病毒”等内容),用户可以通过单击下拉选框选择不同字段轻松定义条件。过滤规则的最后一部分是“操作”,该项指示客户端如何处理符合定义的条件的邮件。例如“ 标记未已读”表示将符合条件的邮件一到达,就将其标记为已读。“操作”也有通过下拉选框按钮进行选择,可帮助用户定义要采取的措施。 + +可以将过滤规则分配给单个特定账户,一般来说邮件规则只对新收取的邮件起作用,对于规则设定之前的邮件并不能进行管理。但在 SEmail 客户端中,用户可以通过页面最下方的【处理整个收件箱】按钮,将规则全局应用于包括原有邮件的所有邮件上。 + +![](image/17.png) + +### 2.4 邮件搜索 +中标麒麟 SEmail 客户端软件提供了高级搜索电子邮件的方法,可以将多个搜索项与 AND 和 OR 组合,创建复杂结果查询。 + +搜索栏的位置在主页面的顶端位置,选中搜索栏即可输入搜索条件,使用回 +车键提交搜索内容,并在邮件列表窗格中排列展示搜索结果。搜索的范围是当前文件夹,也就是说,在收件箱中搜索邮件,呈现的结果来源是收件箱,其他邮箱中符合条件的邮件不会被筛选出来。 + +客户端中还提供了一种快捷搜索的方式,在邮件列表里选中一封邮件,通过 +鼠标右键菜单中,可以对发件人和发件主题进行快速搜索,找到与发件人或右键主题相关的其他邮件。 + +![](image/18.png) + +![](image/19.png) + +## 账户设置 +### 3.1 帐号设置 +对于使用中标麒麟 SEmail 客户端软件的用户来说,可以在客户端主界面标题栏中“首选项”菜单中“账号”模块对邮箱账户进行管理。账户列表展示当前已登录客户端的所有账号,添加账号只要点击里列表下方的【+】按钮,即可根据页面引导,在弹出页面中完成添加账号的操作。如果想要删除账户,只需选中目标账户,点击账号列表下方的【-】按钮直接删除。 + +其中“账户标签”是用户客户端文件夹列表顶部,用户区分账户的名称, +“发件人名称”是用户在发信时,用于发件邮箱地址前的名称,收件人将显示此名称。在此处还可以设置自动抄送/密送的联系人,可以在每次发信时都将信件抄送给设置的联系人。“账户颜色”可以给账户列表中当前账号及主页收信区域等区域添加一层主题色。“更新连接设置”可以修改当前账号的服务器设置。 + +![](image/20.png) + +![](image/21.png) + +### 3.2 切换账号 +如果用户在客户端上登陆了多个邮箱账户,可以通过在文件夹窗格顶端,邮 +箱地址右侧的下拉选框进行来切换要使用的邮箱账户,并且在此处点击【管理账户】也可以进入“账号”模块,也可以点击【添加账号】快速添加账户。 + +![](image/22.png) + +## 邮件工具和其它设置 +### 4.1 通讯录 +通过中标麒麟 SEmail 客户端软件顶端栏快捷键“通讯录”按钮可以访问通讯录设置功能,其中支持新增联系人、编辑联系人、删除联系人、对选中联系人发起写信。新增联系人首先要选择一个账户的文件夹,联系人会被默认放入此文件夹分组中,填写用户的姓名、单位名称、邮件地址、联系方式、住址、生日等信息,点击保存即可完成新建联系人。对已有联系人,选中目标联系人后可以通过“编辑”按钮,对联系人信息进行修改,也可在选中联系人后直接点击删除联系人,将在本分组中删除联系人;选中单个或多个联系人,点击“写信”按钮, +即可打开写信按钮,并且选中联系人将默认加入收件人栏中。 + +![](image/23.png) + +![](image/24.png) + +![](image/25.png) + +通讯录支持联系人分组,点击“+”可添加一个联系组,用户可以通过邮件 +单击分组,可重命名分组和删除分组,可以在全部联系人当中将目标联系人拖入各个分组中,从而对联系人进行分类管理。 + +![](image/26.png) + +SEmail 客户端支持从外部导入通讯录。从通讯录模块中点击“导入”按钮,客户端打开本地文件页面,用户选择要导入的 CSV 通讯簿文件点击“打开”,即可完成导入。同样客户端支持联系人导出功能,导出的表格中包括联系人的“姓名”、“邮件”、“单位名称”、“手机”、“住址”和“生日”字段。导出的CSV 格式文件也可作为用于导入通讯录的模板文件。 + +![](image/27.png) + +![](image/28.png) + +### 4.2 模板快速回复 +在编辑邮件时用户可以使用模板快速回复功能,模板需要在中标麒麟 SEmail客户端软件主界面”首选项“菜单下”快速回复“的设置中预置才能在编辑时调用,例如:周报、月报、报表等格式、收件人、主题等相对固定的情况适用于使用该功能。在邮件编辑界面可以通过点击“快速恢复”选择模板,快速生成邮件。 + +应用模板时,若编辑区未插入过模板,用户可以直接选择要使用的模板,如 +果需要更换其他模板,可以重复插入模板的动作,在新模板应用之前会弹窗提示,是否替换模板,选择“替换内容”则将模板内容应用到写信窗口中,执行“替换”操作,写信界面中的收件人和主题等都不会受到影响。 + +![](image/29.png) + +![](image/30.png) + +### 4.3 撤销操作 +使用中标麒麟 SEmail 邮件客户端软件时,针对有些操作提供了撤销操作的功能: +1. 撤销发送邮件,邮件编辑完成发出后不会立即关闭窗口,界面最下方出 +现撤销发送的提示,点击撤销发送,邮件中止发送动作,邮件将存入草稿箱。 +2. 撤销移动邮件,执行移动邮件操作,界面最下方出现撤销提示,点击撤 +销,中止移动动作。 +3. 撤销移动邮件,执行移动邮件操作,界面最下方出现撤销提示,点击撤 +销,中止移动动作。 +4. 撤销标记邮件,执行标记邮件操作,界面最下方出现撤销提示,点击撤 +销,中止标记动作。 +5. 撤销删除邮件,执行删除邮件操作,界面最下方出现撤销提示,点击撤 +销,中止删除动作。 +6. 撤销归档邮件,执行归档邮件操作,界面最下方出现撤销提示,点击撤 +销,中止归档动作。 + +![](image/31.png) + +### 4.4 外观设置 +中标麒麟 SEmail 客户端软件为用户提供个性化的外观置设功能,提供了两种常见的布局方式:阅读面板(单面板)打开布局、阅读面板(双面板)关闭布局。单面板界面简洁,对日常只用邮箱做简单收发工作的用户非常适用,而双面板界面将所有易用的邮件功能都整理到界面当中,对于熟悉邮件系统,对邮件具备管理需求的用户十分友好。此外客户端提供了多种主题颜色配置,用户可以选择自己喜欢的主题使界面更美观。并且 SEmail 客户端为用户提供了多种个性主题和配色风格,能适应各种年龄段的用户群体审美,满足用户的个性化需求。 + +![](image/32.png) + +![](image/33.png) + +### 4.5 快捷键设置 +客户端提供键盘快捷键功能,并且为了照顾用户操作习惯,预置了一套常规 +的快捷键方案,用户可以根据自己的操作习惯编辑自定义快捷键,定制自己专属的快捷键方案。 + +![](image/34.png) + +### 4.6 签名 +在本文 1.4 节提到过,使用中标麒麟 SEmail 客户端软件进行写信时,用户可以插入、替换签名,而在写信界面只是调用已经编辑好的签名信息,要对签名进行编辑,需要通过“首选项”中“签名”模块下对其管理。 + +进入签名模块界面分为签名列表区域和签名编辑区域,邮件列表区域展示所有签名列,点击列表下【+】可创建新签名;在列表中选中目标已有签名,点击【-】按钮将删除该签名。在签名编辑区域可以对签名进行编辑,签名名称用于区分签名,签名预览区不可直接编辑,签名内容通过预览区下方的表单填写,而预览区下方提供了多种表单排版样式,可以生成多种风格的签名排版。在编辑区的右上角可以选择签名默认设置,点击下拉选框将出现当前客户端已登录的所有账号,选择一个账号即可将当前签名设置为此账号默认签名,如果用户不想使用默认签名,无需删除所有签名,只要在默认设置的下拉选框中再次勾选账号,便能取消默认设置。 + +![](image/35.png) \ No newline at end of file diff --git a/data/guide/mate-terminal/en_US/image/1.png b/data/guide/mate-terminal/en_US/image/1.png new file mode 100644 index 0000000..c0578f6 Binary files /dev/null and b/data/guide/mate-terminal/en_US/image/1.png differ diff --git a/data/guide/mate-terminal/en_US/image/2.png b/data/guide/mate-terminal/en_US/image/2.png new file mode 100644 index 0000000..36810c8 Binary files /dev/null and b/data/guide/mate-terminal/en_US/image/2.png differ diff --git a/data/guide/mate-terminal/en_US/image/3.png b/data/guide/mate-terminal/en_US/image/3.png new file mode 100644 index 0000000..3075fbb Binary files /dev/null and b/data/guide/mate-terminal/en_US/image/3.png differ diff --git a/data/guide/mate-terminal/en_US/image/4.png b/data/guide/mate-terminal/en_US/image/4.png new file mode 100644 index 0000000..520e67c Binary files /dev/null and b/data/guide/mate-terminal/en_US/image/4.png differ diff --git a/data/guide/mate-terminal/en_US/image/5.png b/data/guide/mate-terminal/en_US/image/5.png new file mode 100644 index 0000000..bf62eb3 Binary files /dev/null and b/data/guide/mate-terminal/en_US/image/5.png differ diff --git a/data/guide/mate-terminal/en_US/image/6.png b/data/guide/mate-terminal/en_US/image/6.png new file mode 100644 index 0000000..fd00cc5 Binary files /dev/null and b/data/guide/mate-terminal/en_US/image/6.png differ diff --git a/data/guide/mate-terminal/en_US/index.md b/data/guide/mate-terminal/en_US/index.md new file mode 100644 index 0000000..142418f --- /dev/null +++ b/data/guide/mate-terminal/en_US/index.md @@ -0,0 +1,70 @@ +# Mate Terminal +## Overview +Mate Terminal provides a graphic interface of charaters system. The main interface as shown in Fig 1. + +![Fig 1 Mate Terminal-big](image/1.png) +
+ +## Basic Function +- Charaters system + +- Execute commands and scripts + +- Use the applications/services only running in terminal + +
+ +## Advanced Function +### Single Settings +Only effective in the current window, and invalid after closing. + +- Title + +Click "Terminal" > "Set Title" to modify the current window's name, as shown in Fig 2. + +![Fig 2 Title](image/2.png) + +- Charater Encoding + +Click "Terminal" > "Set Charater Encoding" to adjust it. + +![Fig 3 Encoding-big](image/3.png) + +It provides multiple encodings in "Add or Remove". + +![Fig 4 More encodings](image/4.png) + +- Window Size + +Click "View" to set the current window "Full Screen", "Zoom In", "Zoom Out". And the words in this window will zoom in/out together. + +### Profile Preferences +The settings in profile are permanent and apply to all new windows. There exist a profile "Default", and users can select "Edit" > "Profile Preferences" to modify it. + +![Fig 5 Modify Default profile-big](image/5.png) + +Click "File" > "New Profile" or "Edit" > "Profiles" to create a new configuration based on a existed profile. + +![Fig 6 New profile](image/6.png) +
+ +## Q&A +#### The output content is too much to view them completely through scrolling +It caused by a limit on the number of columns rolled back. + +Click "Edit" > "Profile Preferences" and check "Unlimited" in "Scrolling" tab. + +
+ +## Appendix +### Shortcut Key + +| Shortcut | Function | +| :------------ | :------------ | +| Ctrl + Alt + T | Open a new ternimal window | +| Ctrl + Shift + T | Open a new tab in the current terminal window | +| Ctrl + D | Close the current window/tab | +| F11 | Fullscreen/Quit Fullscreen | + +More shortcuts can be seen or modified by "Edit" > "Keyboard Shortcuts". + diff --git a/data/guide/mate-terminal/mate-terminal.png b/data/guide/mate-terminal/mate-terminal.png new file mode 100644 index 0000000..263f710 Binary files /dev/null and b/data/guide/mate-terminal/mate-terminal.png differ diff --git a/data/guide/mate-terminal/zh_CN/image/1.png b/data/guide/mate-terminal/zh_CN/image/1.png new file mode 100644 index 0000000..d539697 Binary files /dev/null and b/data/guide/mate-terminal/zh_CN/image/1.png differ diff --git a/data/guide/mate-terminal/zh_CN/image/2.png b/data/guide/mate-terminal/zh_CN/image/2.png new file mode 100644 index 0000000..11e898c Binary files /dev/null and b/data/guide/mate-terminal/zh_CN/image/2.png differ diff --git a/data/guide/mate-terminal/zh_CN/image/3.png b/data/guide/mate-terminal/zh_CN/image/3.png new file mode 100644 index 0000000..6293ed4 Binary files /dev/null and b/data/guide/mate-terminal/zh_CN/image/3.png differ diff --git a/data/guide/mate-terminal/zh_CN/image/4.png b/data/guide/mate-terminal/zh_CN/image/4.png new file mode 100644 index 0000000..76aee1f Binary files /dev/null and b/data/guide/mate-terminal/zh_CN/image/4.png differ diff --git a/data/guide/mate-terminal/zh_CN/image/5.png b/data/guide/mate-terminal/zh_CN/image/5.png new file mode 100644 index 0000000..3b572cc Binary files /dev/null and b/data/guide/mate-terminal/zh_CN/image/5.png differ diff --git a/data/guide/mate-terminal/zh_CN/image/6.png b/data/guide/mate-terminal/zh_CN/image/6.png new file mode 100644 index 0000000..4d80bd7 Binary files /dev/null and b/data/guide/mate-terminal/zh_CN/image/6.png differ diff --git a/data/guide/mate-terminal/zh_CN/image/7.png b/data/guide/mate-terminal/zh_CN/image/7.png new file mode 100644 index 0000000..89c018a Binary files /dev/null and b/data/guide/mate-terminal/zh_CN/image/7.png differ diff --git a/data/guide/mate-terminal/zh_CN/image/8.png b/data/guide/mate-terminal/zh_CN/image/8.png new file mode 100644 index 0000000..f312b41 Binary files /dev/null and b/data/guide/mate-terminal/zh_CN/image/8.png differ diff --git a/data/guide/mate-terminal/zh_CN/image/icon1.png b/data/guide/mate-terminal/zh_CN/image/icon1.png new file mode 100644 index 0000000..bb8f661 Binary files /dev/null and b/data/guide/mate-terminal/zh_CN/image/icon1.png differ diff --git a/data/guide/mate-terminal/zh_CN/image/icon2.png b/data/guide/mate-terminal/zh_CN/image/icon2.png new file mode 100644 index 0000000..943a68b Binary files /dev/null and b/data/guide/mate-terminal/zh_CN/image/icon2.png differ diff --git a/data/guide/mate-terminal/zh_CN/image/icon3.png b/data/guide/mate-terminal/zh_CN/image/icon3.png new file mode 100644 index 0000000..e09fa00 Binary files /dev/null and b/data/guide/mate-terminal/zh_CN/image/icon3.png differ diff --git a/data/guide/mate-terminal/zh_CN/index.md b/data/guide/mate-terminal/zh_CN/index.md new file mode 100644 index 0000000..1fe664d --- /dev/null +++ b/data/guide/mate-terminal/zh_CN/index.md @@ -0,0 +1,124 @@ +# 终 端 +## 概 述 + +终端是麒麟系统使用系统命令操作的媒介,提供了在图形化界面下的字符系统窗口,通过在终端窗口键入系统指令可以与系统进行交互。 + +
+ +### 打开方式 + +- **“开始菜单”**![](image/icon1.png)>**“终端”**![](image/icon2.png); + +- 桌面空白处单击右键 > 打开桌面右键菜单栏 > 选择**“打开终端”**![](image/icon2.png); + +- 选中文件管理器中的文件夹或在空白处单击右键 > 打开右键菜单栏 > 选择**“打开终端”**![](image/icon2.png); + +- **“任务栏”**>**“搜索”** ![](image/icon3.png)>**“终端”** ![](image/icon2.png)> 选择**“打开”**。 + +![图 1 终端-日间模式](image/1.png) + +![图 2 终端-夜间模式](image/2.png) + +### 基本操作 +打开终端后,根据当前用户权限,可在终端窗口使用键盘直接输入相应系统命令并且回车,终端根据指令判断并输出相应提示,可同时打开多个终端窗口进行操作。 + +终端提供的基本功能有: + +- 字符系统; + +- 执行各种命令、脚本; + +- 使用仅在终端运行的应用/服务。 + +![图 3 终端窗口](image/3.png) + +操作窗口以上图为例,kylin@kylin-V101:/opt$,其中: + +- kylin:登录系统的用户名; + +- kylin-V101:计算机名; + +- /opt:当前打开终端时的路径。 + +#### 快捷键 + +下表列出了终端操作的部分常用快捷键,更多快捷键可通过编辑 > 键盘快捷键查看或修改。 + +| 快捷键 | 功能 | +|--------------|--------------| +| Ctrl+Alt+T | 打开新终端窗口 | +| Ctrl+Shift+T | 在终端窗口中打开新标签页 | +| Ctrl+D | 关闭当前窗口/标签页 | +| F11 | 全屏显示/退出全屏 | + +### 高级设置 +高级设置可通过终端菜单栏选项配置,菜单栏详细功能说明见菜单栏。 + +#### 单项设置 + +单项设置仅对当前窗口产生影响,窗口关闭后立即失效。 + +- 窗口标题 + +点击菜单栏上的终端 > 设置标题,即可修改终端窗口的名称。 + +![图 4 设置终端窗口标题](image/4.png) + +- 字符编码 + +字符编码也称字集码,是把字符集中的字符编码作为指定集合中的某一对象,以便文本在计算机中显示和传递。 + +点击菜单栏上的终端 > 设定字符编码,可对编码进行调整。 + +![图 5 设置编码](image/5.png) + +在**“添加或删除”**中,可看到更多的编码选项。 + +![图 6 更多编码](image/6.png) + +- 调整窗口大小 + +点击菜单栏上的**“视图”**,可设置当前窗口全屏、放大、缩小。此处的放大/缩小,会连带着窗口中的文本一起放大/缩小。 + +- 配置文件 + +配置文件中的设置是永久生效的,并适用于所有新建窗口。应用自带了Default配置文件。您可通过编辑 > 配置文件首选项,修改配置。 + +![图 7 更多编码](image/7.png) + +也可通过文件 > 新建配置文件,或编辑 > 配置文件,基于某个配置文件创建新配置。 + +![图 8 新建配置](image/8.png) + +### 菜单栏 + +终端顶部菜单栏功能说明如下图所示。 + +| 一级菜单 | 二级菜单 | 描述 | +|---------|--------------------------------------|--------------| +| 文件 | 打开终端 | 打开新的终端窗口 | +| | 打开标签 | 在当前终端窗口打开新的标签页 | +| | 新建配置文件 | 创建新的配置文件名称 | +| | 关闭标签页 | 关闭当前标签 | +| | 关闭窗口 | 关闭终端 | +| 编辑 | 复制 | 复制内容 | +| | 粘贴 | 将复制内容粘贴至光标处 | +| | 全选 | 选择终端内全部内容 | +| | 配置文件 | 查看配置文件列表,可对配置文件进行管理 | +| | 键盘快捷键 | 配置是否启用所有菜单访问键、是否启用菜单快捷键,查看各个操作对应的快捷键 | +| | 配置文件首选项 | 管理终端相应配置,包括通用设置、标题命令、颜色、背景、滚动条、兼容性设置 | +| 视图 | 显示菜单栏 | 是否显示顶部菜单 | +| | 全屏 | 是否全屏展示 | +| | 放大 | 放大终端窗口 | +| | 缩小 | 缩小终端窗口 | +| | 正常大小 | 窗体恢复为原来大小 | +| 搜索 | 查找 | 按关键字进行检索 | +| | 查找下一个 | 检索下一条内容 | +| | 查找上一个 | 检索上一条内容 | +| 终端 | 更改配置文件 | 切换为其他设定的配置文件 | +| | 设置标题 | 修改终端顶部标题文字 | +| | 设定字符编码 | 切换终端内容编码格式 | +| | 复位并清屏 | 恢复初始位置并清空终端内容 | +|帮助 | | 查看系统手册和软件说明 | + +表 1 终端菜单栏功能说明 \ No newline at end of file diff --git a/data/guide/onboard/en_US/image/1.png b/data/guide/onboard/en_US/image/1.png new file mode 100644 index 0000000..106f6ae Binary files /dev/null and b/data/guide/onboard/en_US/image/1.png differ diff --git a/data/guide/onboard/en_US/image/2.png b/data/guide/onboard/en_US/image/2.png new file mode 100644 index 0000000..c463f55 Binary files /dev/null and b/data/guide/onboard/en_US/image/2.png differ diff --git a/data/guide/onboard/en_US/image/3.png b/data/guide/onboard/en_US/image/3.png new file mode 100644 index 0000000..5295fc5 Binary files /dev/null and b/data/guide/onboard/en_US/image/3.png differ diff --git a/data/guide/onboard/en_US/image/4.png b/data/guide/onboard/en_US/image/4.png new file mode 100644 index 0000000..f27a89d Binary files /dev/null and b/data/guide/onboard/en_US/image/4.png differ diff --git a/data/guide/onboard/en_US/image/5.png b/data/guide/onboard/en_US/image/5.png new file mode 100644 index 0000000..a09e5fa Binary files /dev/null and b/data/guide/onboard/en_US/image/5.png differ diff --git a/data/guide/onboard/en_US/image/6.png b/data/guide/onboard/en_US/image/6.png new file mode 100644 index 0000000..01a41e4 Binary files /dev/null and b/data/guide/onboard/en_US/image/6.png differ diff --git a/data/guide/onboard/en_US/image/icon1.png b/data/guide/onboard/en_US/image/icon1.png new file mode 100644 index 0000000..d68af25 Binary files /dev/null and b/data/guide/onboard/en_US/image/icon1.png differ diff --git a/data/guide/onboard/en_US/image/icon2.png b/data/guide/onboard/en_US/image/icon2.png new file mode 100644 index 0000000..45a562f Binary files /dev/null and b/data/guide/onboard/en_US/image/icon2.png differ diff --git a/data/guide/onboard/en_US/image/icon3.png b/data/guide/onboard/en_US/image/icon3.png new file mode 100644 index 0000000..e09fa00 Binary files /dev/null and b/data/guide/onboard/en_US/image/icon3.png differ diff --git a/data/guide/onboard/en_US/image/icon4.png b/data/guide/onboard/en_US/image/icon4.png new file mode 100644 index 0000000..37cfce7 Binary files /dev/null and b/data/guide/onboard/en_US/image/icon4.png differ diff --git a/data/guide/onboard/en_US/image/icon5.png b/data/guide/onboard/en_US/image/icon5.png new file mode 100644 index 0000000..1302d57 Binary files /dev/null and b/data/guide/onboard/en_US/image/icon5.png differ diff --git a/data/guide/onboard/en_US/index.md b/data/guide/onboard/en_US/index.md new file mode 100644 index 0000000..24a6f12 --- /dev/null +++ b/data/guide/onboard/en_US/index.md @@ -0,0 +1,38 @@ +# On-screen keyboard + +## Overview +The on-screen keyboard is a tool that comes with the system, which allows you to implement keyboard functions through the mouse. The on-screen keyboard window will be displayed at the top of the screen, and other software windows will be covered if they overlap with the on-screen keyboard. + +## Open method +-"**Start Menu**"![](image/icon1.png) >"**Screen Keyboard**"![](image/icon2.png); +-"**Taskbar**">"**Search**"![](image/icon3.png)>"**On-screen keyboard**"![](image/icon2.png)>Select "* *Open**". + +![Figure 1 On-screen keyboard](image/1.png) + +## Basic operation + +The on-screen keyboard has a main keyboard and a numeric keyboard, function keys and editing keys, as shown in the figure below: + +![Figure 2 Main keyboard](image/2.png) + +![Figure 3 Numeric keyboard, function keys and editing keys](image/3.png) + +When the cursor is hovering over some keys of the on-screen keyboard, the key function description can be displayed. There are two ways to input content when using the on-screen keyboard: direct click mode and hover click mode. + +-Direct click mode + +Click on the on-screen keyboard keys to enter text. In this mode, you can also enter shortcut keys. For example, if you want to lock the screen, you can tap the Super and l keys on the on-screen keyboard. + +-Hover click mode + +Move the mouse to a key on the on-screen keyboard and hold it for a predefined time to type the selected character. You can also use the mouse to click to type characters in the hover mode, and you can also use the operation method in the single-click mode to achieve the function of shortcut keys. + +![Figure 4 Activate hover click](image/4.png) + +Click the "×" in the on-screen keyboard to shrink the on-screen keyboard into a mini icon and place it on the desktop. The cursor can stay on the mini icon for a certain period of time to open the on-screen keyboard again. + +![Figure 5 On-screen keyboard mini icon](image/5.png) + +Click "![](image/icon4.png)" and then click "![](image/icon5.png)" to open the preferences for setting the on-screen keyboard, including general, window, theme, fragment, keyboard, automatic display And general access settings. + +![Figure 6 Screen keyboard preference settings](image/6.png) \ No newline at end of file diff --git a/data/guide/onboard/onboard.png b/data/guide/onboard/onboard.png new file mode 100644 index 0000000..6066604 Binary files /dev/null and b/data/guide/onboard/onboard.png differ diff --git a/data/guide/onboard/zh_CN/image/1.png b/data/guide/onboard/zh_CN/image/1.png new file mode 100644 index 0000000..106f6ae Binary files /dev/null and b/data/guide/onboard/zh_CN/image/1.png differ diff --git a/data/guide/onboard/zh_CN/image/2.png b/data/guide/onboard/zh_CN/image/2.png new file mode 100644 index 0000000..c463f55 Binary files /dev/null and b/data/guide/onboard/zh_CN/image/2.png differ diff --git a/data/guide/onboard/zh_CN/image/3.png b/data/guide/onboard/zh_CN/image/3.png new file mode 100644 index 0000000..5295fc5 Binary files /dev/null and b/data/guide/onboard/zh_CN/image/3.png differ diff --git a/data/guide/onboard/zh_CN/image/4.png b/data/guide/onboard/zh_CN/image/4.png new file mode 100644 index 0000000..f27a89d Binary files /dev/null and b/data/guide/onboard/zh_CN/image/4.png differ diff --git a/data/guide/onboard/zh_CN/image/5.png b/data/guide/onboard/zh_CN/image/5.png new file mode 100644 index 0000000..a09e5fa Binary files /dev/null and b/data/guide/onboard/zh_CN/image/5.png differ diff --git a/data/guide/onboard/zh_CN/image/6.png b/data/guide/onboard/zh_CN/image/6.png new file mode 100644 index 0000000..01a41e4 Binary files /dev/null and b/data/guide/onboard/zh_CN/image/6.png differ diff --git a/data/guide/onboard/zh_CN/image/icon1.png b/data/guide/onboard/zh_CN/image/icon1.png new file mode 100644 index 0000000..bb8f661 Binary files /dev/null and b/data/guide/onboard/zh_CN/image/icon1.png differ diff --git a/data/guide/onboard/zh_CN/image/icon2.png b/data/guide/onboard/zh_CN/image/icon2.png new file mode 100644 index 0000000..45a562f Binary files /dev/null and b/data/guide/onboard/zh_CN/image/icon2.png differ diff --git a/data/guide/onboard/zh_CN/image/icon3.png b/data/guide/onboard/zh_CN/image/icon3.png new file mode 100644 index 0000000..e09fa00 Binary files /dev/null and b/data/guide/onboard/zh_CN/image/icon3.png differ diff --git a/data/guide/onboard/zh_CN/image/icon4.png b/data/guide/onboard/zh_CN/image/icon4.png new file mode 100644 index 0000000..37cfce7 Binary files /dev/null and b/data/guide/onboard/zh_CN/image/icon4.png differ diff --git a/data/guide/onboard/zh_CN/image/icon5.png b/data/guide/onboard/zh_CN/image/icon5.png new file mode 100644 index 0000000..1302d57 Binary files /dev/null and b/data/guide/onboard/zh_CN/image/icon5.png differ diff --git a/data/guide/onboard/zh_CN/index.md b/data/guide/onboard/zh_CN/index.md new file mode 100644 index 0000000..c1e0375 --- /dev/null +++ b/data/guide/onboard/zh_CN/index.md @@ -0,0 +1,38 @@ +# 屏幕键盘 + +## 概述 +屏幕键盘是系统自带的一款工具,它能够让您通过鼠标实现键盘的功能。屏幕键盘的窗口会显示在屏幕最上层,其他软件窗口如果与屏幕键盘重叠的部分会被覆盖。 + +## 打开方式 +- “**开始菜单**”![](image/icon1.png) >“**屏幕键盘**”![](image/icon2.png); +- “**任务栏**”>“**搜索**”![](image/icon3.png)>“**屏幕键盘**”![](image/icon2.png)>选择“**打开**”。 + +![图 1 屏幕键盘](image/1.png) + +## 基本操作 + +屏幕键盘有主键盘和数字键盘、功能键和编辑键,如下图所示: + +![图 2 主键盘](image/2.png) + +![图 3 数字键盘、功能键和编辑键](image/3.png) + +光标悬浮于屏幕键盘的部分按键时可显示按键功能说明。使用屏幕键盘时可以通过两种方式输入内容:直接单击模式、悬停单击模式。 + +- 直接单击模式 + +单击屏幕键盘按键即可输入文字。此模式也可以输入快捷键,例如想要锁屏,可以先后点击屏幕键盘上的Super和l键。 + +- 悬停单击模式 + +鼠标移动到屏幕键盘上的某个按键上并停留预定义的时间即可所选字符键入。悬停模式下也可以实现用鼠标点击实现字符的键入,也可以用单击模式下的操作方法实现快捷键的功能。 + +![图 4 激活悬停单击](image/4.png) + +点击屏幕键盘中的“×”可将屏幕键盘缩小为迷你图标置于桌面,光标停留在迷你图标上一定时间可再次打开屏幕键盘。 + +![图 5 屏幕键盘迷你图标](image/5.png) + +单击“![](image/icon4.png)”后点击“![](image/icon5.png)”可打开设置屏幕键盘的首选项,包括常规、窗口、主题、片段、键盘、自动显示和通用访问的设置。 + +![图 6 屏幕键盘首选项设置](image/6.png) \ No newline at end of file diff --git a/data/guide/remmina/en_US/image/1.png b/data/guide/remmina/en_US/image/1.png new file mode 100644 index 0000000..79db0a0 Binary files /dev/null and b/data/guide/remmina/en_US/image/1.png differ diff --git a/data/guide/remmina/en_US/image/2.png b/data/guide/remmina/en_US/image/2.png new file mode 100644 index 0000000..bcd0160 Binary files /dev/null and b/data/guide/remmina/en_US/image/2.png differ diff --git a/data/guide/remmina/en_US/image/3.png b/data/guide/remmina/en_US/image/3.png new file mode 100644 index 0000000..008e2c7 Binary files /dev/null and b/data/guide/remmina/en_US/image/3.png differ diff --git a/data/guide/remmina/en_US/image/4.png b/data/guide/remmina/en_US/image/4.png new file mode 100644 index 0000000..46e9371 Binary files /dev/null and b/data/guide/remmina/en_US/image/4.png differ diff --git a/data/guide/remmina/en_US/image/5.png b/data/guide/remmina/en_US/image/5.png new file mode 100644 index 0000000..adb9055 Binary files /dev/null and b/data/guide/remmina/en_US/image/5.png differ diff --git a/data/guide/remmina/en_US/image/icon1.png b/data/guide/remmina/en_US/image/icon1.png new file mode 100644 index 0000000..5aa2c1d Binary files /dev/null and b/data/guide/remmina/en_US/image/icon1.png differ diff --git a/data/guide/remmina/en_US/image/icon2.png b/data/guide/remmina/en_US/image/icon2.png new file mode 100644 index 0000000..3b51941 Binary files /dev/null and b/data/guide/remmina/en_US/image/icon2.png differ diff --git a/data/guide/remmina/en_US/image/icon3.png b/data/guide/remmina/en_US/image/icon3.png new file mode 100644 index 0000000..8618fe7 Binary files /dev/null and b/data/guide/remmina/en_US/image/icon3.png differ diff --git a/data/guide/remmina/en_US/image/icon4.png b/data/guide/remmina/en_US/image/icon4.png new file mode 100644 index 0000000..85cfbc1 Binary files /dev/null and b/data/guide/remmina/en_US/image/icon4.png differ diff --git a/data/guide/remmina/en_US/image/icon5.png b/data/guide/remmina/en_US/image/icon5.png new file mode 100644 index 0000000..0888b69 Binary files /dev/null and b/data/guide/remmina/en_US/image/icon5.png differ diff --git a/data/guide/remmina/en_US/image/icon6.png b/data/guide/remmina/en_US/image/icon6.png new file mode 100644 index 0000000..b56e27d Binary files /dev/null and b/data/guide/remmina/en_US/image/icon6.png differ diff --git a/data/guide/remmina/en_US/image/icon7.png b/data/guide/remmina/en_US/image/icon7.png new file mode 100644 index 0000000..945afc8 Binary files /dev/null and b/data/guide/remmina/en_US/image/icon7.png differ diff --git a/data/guide/remmina/en_US/image/icon8.png b/data/guide/remmina/en_US/image/icon8.png new file mode 100644 index 0000000..2c831d0 Binary files /dev/null and b/data/guide/remmina/en_US/image/icon8.png differ diff --git a/data/guide/remmina/en_US/index.md b/data/guide/remmina/en_US/index.md new file mode 100644 index 0000000..d9fbb3b --- /dev/null +++ b/data/guide/remmina/en_US/index.md @@ -0,0 +1,38 @@ +# Remmina +## Overview +Remmina can connect to other computers by VNC, SSH or RDP. The main interface as shown in Fig 1. + +![Fig 1 Remmina-big](image/1.png) +
+ +## Basic Function +### Create New Connection +Take SSH, and connect to IP: 172.19.40.86 for example. + +1) Click "![](image/icon1.png)" to pop up a setting window, as shown in Fig 2. + +![Fig 2 Remote desktop preference-big](image/2.png) + +2) Select SSH protocol, and input the ip "172.19.40.86" in the server box, "Username" and "User password" are the remote computer's name and password. And then click "Connect". + +![Fig 3 Connection preference-big](image/3.png) + +3) The connected interface as shown in Fig 4. + +![Fig 4 Connect successfully-big](image/4.png) + +#### Preferences +Click "![](image/icon2.png)" and select "Preferences" to get more settings options, as shown in Fig 5. + +![Fig 5 Preferences-big](image/5.png) +
+ +## Advanced Function +Here are some tools: + +| Icon | Function | Icon | Function | +|:-----|:-----|:-----|:-----| +|![](image/icon3.png)| Fullscreen | ![](image/icon4.png) | Grab all keyboard events | +|![](image/icon5.png)| Copy/Paste/Select all/Keystrokes |![](image/icon6.png)| Screenshot | +|![](image/icon7.png)| Minimize | ![](image/icon8.png) | Disconnect | + diff --git a/data/guide/remmina/remmina.png b/data/guide/remmina/remmina.png new file mode 100644 index 0000000..4f4c680 Binary files /dev/null and b/data/guide/remmina/remmina.png differ diff --git a/data/guide/remmina/zh_CN/image/1.png b/data/guide/remmina/zh_CN/image/1.png new file mode 100644 index 0000000..38694cd Binary files /dev/null and b/data/guide/remmina/zh_CN/image/1.png differ diff --git a/data/guide/remmina/zh_CN/image/2.png b/data/guide/remmina/zh_CN/image/2.png new file mode 100644 index 0000000..2f8e541 Binary files /dev/null and b/data/guide/remmina/zh_CN/image/2.png differ diff --git a/data/guide/remmina/zh_CN/image/3.png b/data/guide/remmina/zh_CN/image/3.png new file mode 100644 index 0000000..aba9f19 Binary files /dev/null and b/data/guide/remmina/zh_CN/image/3.png differ diff --git a/data/guide/remmina/zh_CN/image/4.png b/data/guide/remmina/zh_CN/image/4.png new file mode 100644 index 0000000..e3fc068 Binary files /dev/null and b/data/guide/remmina/zh_CN/image/4.png differ diff --git a/data/guide/remmina/zh_CN/image/5.png b/data/guide/remmina/zh_CN/image/5.png new file mode 100644 index 0000000..ae89414 Binary files /dev/null and b/data/guide/remmina/zh_CN/image/5.png differ diff --git a/data/guide/remmina/zh_CN/image/6.png b/data/guide/remmina/zh_CN/image/6.png new file mode 100644 index 0000000..0bc6d09 Binary files /dev/null and b/data/guide/remmina/zh_CN/image/6.png differ diff --git a/data/guide/remmina/zh_CN/image/7.png b/data/guide/remmina/zh_CN/image/7.png new file mode 100644 index 0000000..0a50583 Binary files /dev/null and b/data/guide/remmina/zh_CN/image/7.png differ diff --git a/data/guide/remmina/zh_CN/image/icon1.png b/data/guide/remmina/zh_CN/image/icon1.png new file mode 100644 index 0000000..bb8f661 Binary files /dev/null and b/data/guide/remmina/zh_CN/image/icon1.png differ diff --git a/data/guide/remmina/zh_CN/image/icon10.png b/data/guide/remmina/zh_CN/image/icon10.png new file mode 100644 index 0000000..5961967 Binary files /dev/null and b/data/guide/remmina/zh_CN/image/icon10.png differ diff --git a/data/guide/remmina/zh_CN/image/icon11.png b/data/guide/remmina/zh_CN/image/icon11.png new file mode 100644 index 0000000..7ade8bc Binary files /dev/null and b/data/guide/remmina/zh_CN/image/icon11.png differ diff --git a/data/guide/remmina/zh_CN/image/icon2.png b/data/guide/remmina/zh_CN/image/icon2.png new file mode 100644 index 0000000..9ba8513 Binary files /dev/null and b/data/guide/remmina/zh_CN/image/icon2.png differ diff --git a/data/guide/remmina/zh_CN/image/icon3.png b/data/guide/remmina/zh_CN/image/icon3.png new file mode 100644 index 0000000..e09fa00 Binary files /dev/null and b/data/guide/remmina/zh_CN/image/icon3.png differ diff --git a/data/guide/remmina/zh_CN/image/icon4.png b/data/guide/remmina/zh_CN/image/icon4.png new file mode 100644 index 0000000..4743a52 Binary files /dev/null and b/data/guide/remmina/zh_CN/image/icon4.png differ diff --git a/data/guide/remmina/zh_CN/image/icon5.png b/data/guide/remmina/zh_CN/image/icon5.png new file mode 100644 index 0000000..453db53 Binary files /dev/null and b/data/guide/remmina/zh_CN/image/icon5.png differ diff --git a/data/guide/remmina/zh_CN/image/icon6.png b/data/guide/remmina/zh_CN/image/icon6.png new file mode 100644 index 0000000..de82eb2 Binary files /dev/null and b/data/guide/remmina/zh_CN/image/icon6.png differ diff --git a/data/guide/remmina/zh_CN/image/icon7.png b/data/guide/remmina/zh_CN/image/icon7.png new file mode 100644 index 0000000..28fffeb Binary files /dev/null and b/data/guide/remmina/zh_CN/image/icon7.png differ diff --git a/data/guide/remmina/zh_CN/image/icon8.png b/data/guide/remmina/zh_CN/image/icon8.png new file mode 100644 index 0000000..c4b3af8 Binary files /dev/null and b/data/guide/remmina/zh_CN/image/icon8.png differ diff --git a/data/guide/remmina/zh_CN/image/icon9.png b/data/guide/remmina/zh_CN/image/icon9.png new file mode 100644 index 0000000..b74d4f6 Binary files /dev/null and b/data/guide/remmina/zh_CN/image/icon9.png differ diff --git a/data/guide/remmina/zh_CN/index.md b/data/guide/remmina/zh_CN/index.md new file mode 100644 index 0000000..9e79487 --- /dev/null +++ b/data/guide/remmina/zh_CN/index.md @@ -0,0 +1,56 @@ +# 远程桌面客户端 +## 概 述 + +远程桌面客户端可通过VNC、SSH、RDP远程协议连接计算机。使用远程桌面客户端可以访问远程电脑上的文件和网络资源,使用安装在远程电脑上的应用等,可完成与使用物理电脑相同的所有操作。 + +## 打开方式 + +- “**开始菜单**”![](image/icon1.png)>“**FTP客户端**”![](image/icon2.png); + +- “**任务栏**”>“**搜索**”![](image/icon3.png)>“**FTP客户端**”![](image/icon2.png); + +![图 1 远程桌面客户端-日间模式](image/1.png) + +![图 2 远程桌面客户端-夜间模式](image/2.png) + +## 基本操作 + +### 新建远程连接 + +以SSH协议,连接 172.29.35.116 的计算机为例。 + +1)点击“![](image/icon4.png)”,弹出远程桌面设定界面,如下图所示。 + +![图 3 远程桌面设定](image/3.png) + +2)选择SSH协议,“**服务器**”框中输入目标计算机IP地址:172.29.35.116,“**用户名**”和“**用户密码**”为目标计算机的名称和密码。完成后,点击“**连接**”。 + +![图 4 连接配置](image/4.png) + +3)连接成功的界面如下图所示。 + +![图 5 连接成功](image/5.png) + +4)或是直接在主界面上选择SSH,并输入目标计算机的IP,在弹出窗口填写信息。 + +![图 6 主界面填写信息](image/6.png) + +### 首选项 +点击“![](image/icon5.png)”,选择“**首选项**”,可对远程桌面客户端进行设置。 + +![图 7 首选项](image/7.png) + +## 高级功能 +在已连接的窗口,提供了一些工具。下表为部分常用工具功能说明。 + +| 图标 | 功能 | +|------------|----| +|![](image/icon6.png) | 全屏 | +|![](image/icon7.png) | 俘获所有键盘事件 | +|![](image/icon8.png) | 复制/粘贴/键盘监听 | +|![](image/icon9.png) | 截屏 | +|![](image/icon10.png) | 最小化窗口 | +|![](image/icon11.png) | 断开连接 | + + +表 1 连接窗口工具栏功能说明 \ No newline at end of file diff --git a/data/guide/software-compatibility/软件兼容适配.png b/data/guide/software-compatibility/软件兼容适配.png new file mode 100644 index 0000000..dcec2af Binary files /dev/null and b/data/guide/software-compatibility/软件兼容适配.png differ diff --git a/data/guide/technical-assistance/en_US/index.md b/data/guide/technical-assistance/en_US/index.md new file mode 100644 index 0000000..5d0e980 --- /dev/null +++ b/data/guide/technical-assistance/en_US/index.md @@ -0,0 +1,76 @@ +# Technical Assistance +## Assistance System +This system includes security assistance, project implementation management, security training, and after-sale service. + +### Division of Responsibilities +We provides a professional support team for key customers. The members of this team as shown below. + +| Role | Responsibity +| :------------ | :------------ | +| Project Manager | Resources coordination and control | +| Executive Engineer | Problems solving, dispatching and tracking | +| Technical Support Engineer | Daily system operations monitor and fault maintain | +| Technical Adviser | Tackle major technical problems and feed back mechanism analysis | +| Product Development Engineer | Quality problems tracking | +| Quality Engineer | Refer to GJB 5000A to execute process management | + +
+ +### Basic Assistance Type +#### Scene and Emergency +1) Emergencies on legal working days, technical engineer will respond online within 0.5 hour and come to the scene within 4 hours. + +2) General problems on legal working days, technical engineer will respond online within 2 hours and come to the scene within 8 hours according to the customer's requirement and the reality. + +3) Emergencies on festivals and holidays, technical engineer will respond online within 2 hour and come to the scene within 8 hours. + +4) General problems on festivals and holidays, technical engineer will respond online within 4 hours and come to the scene within 24 hours according to the customer's requirement and the reality. + +5) On site technical assistance within 48 hours for the customers in the areas without service centre. + +#### Telephone +5 x 8 technical assistance line support. + +
+ +## Assistance Assurance +This assurance includes assistance quality monitoring, assistance reporting system, satisfaction survey, and measures to deal with anomalies. + +### Quality Monitoring +- Discover problems by regular assistance reports. + +- Establish a customer service complaint line. + +- Monitor by satisfaction survey. + +### Assistance Reporting System +According to the time agreed by both parties, we will provide the assistance implementation report regularly. + +The content includes assistance's type and quantity, solutions, and security policy suggestions. + +### Satisfaction Survey +By the form of call back or call on each quarter, survey the satisfaction to every department's working quality. + +### Exception Handling +The customer service complaint line will deal with the complaints exactly and promptly through the company processes. + +
+ +## Contact Us +Assistance Tel: 400-089-1870 + +Official Website: http://www.kylinos.cn + +Addresses: + +| Region | Detail | +| :------------ | :------------ | +| TianJin | Tel: 022-58955650 +||Faxes: 022-58955651 +||Postcode: 300450 +| BeiJing | Tel: 010-88878781; 010-88878791; 010-88878792 +||Faxes:010-88878782 +||Postcode: 100097 +| ChangSha |Tel: 0731-88280170 +||Faxes: 0731-88280166 +||Postcode: 410073 diff --git a/data/guide/technical-assistance/technical-assistance.png b/data/guide/technical-assistance/technical-assistance.png new file mode 100644 index 0000000..e1665c1 Binary files /dev/null and b/data/guide/technical-assistance/technical-assistance.png differ diff --git a/data/guide/technical-assistance/zh_CN/image/1.png b/data/guide/technical-assistance/zh_CN/image/1.png new file mode 100644 index 0000000..9a1e9ac Binary files /dev/null and b/data/guide/technical-assistance/zh_CN/image/1.png differ diff --git a/data/guide/technical-assistance/zh_CN/index.md b/data/guide/technical-assistance/zh_CN/index.md new file mode 100644 index 0000000..41956d9 --- /dev/null +++ b/data/guide/technical-assistance/zh_CN/index.md @@ -0,0 +1,83 @@ +# 技术服务 +## 技术服务体系 +服务体系包括专业安全服务、项目实施管理、安全培训和系统售后服务等一系列内容。 + +### 职责划分 +我们为重点客户配备专业的支持团队。技术支持团队具体配置如下: + +|角 色 |职 责 +| :------------ | :------------ | +|项目经理 |项目资源的协调和控制 +|主管工程师| 技术问题的解决、分派和跟踪 +|技术支持工程师| 系统的日常运行监控和故障维护 +|技术顾问| 重大技术问题攻关和机理分析反馈 +|产品研发责任工程师| 产品质量问题跟踪 +|质量师 |参照GJB 5000A执行过程管理 + +
+ +### 基本服务支持类型 +#### 现场支持和应急服务 +a)如在法定工作日发生系统崩溃等紧急问题,技术工程师在接到客户问题报告后0.5小时内提供电话响应或在线支持服务。并在4小时内赶到现场进行技术维护; + +b)如在法定工作日发生非系统崩溃性常规问题,技术工程师在接到客户问题报告后2小时内提供电话响应或在线支持服务。并根据客户的要求和实际情况在8小时内赶到现场进行技术维护; + +c)如在节假日发生系统崩溃等紧急问题,技术工程师在接到客户问题报告后2小时之内提供电话响应或在线支持服务,并在8小时内赶到现场进行技术维护; + +d)如在节假日发生非系统崩溃性常规问题,技术工程师在接到客户问题报告后4小时内提供电话响应或在线支持服务。并根据客户的要求和实际情况在24小时内赶到现场进行技术维护; + +e)对于异地客户的现场技术服务响应时间将根据实际情况控制在48小时内(还可根据项目实际情况设驻场工程师提供直接服务)。 + +#### 远程电话支持 +5 x 8技术服务热线支持。 + +#### 服务支持流程 + +![图 1 服务支持流程](image/1.png) + +## 服务保障 +包括服务质量监控、服务报告制度、客户满意度调查制度、异常情况处理措施,全方位保障客户享受的服务质量。 + +### 服务质量监控 +- 定期提供服务报告,发现问题。 + +- 建立客户服务投诉专线。 + +- 通过客户满意度调查体系进行监控。 + +### 服务报告制度 +技服中心将定期提供服务实施报告(具体时间按双方协商确定)。 + +内容包括该时间段的实施服务的类型、数量、解决方案、安全策略建议,使客户可以全面了解设备的运行状况,以便做出正确的选择。 + +### 客户满意度调查制度 +每季度均由公司直属的中立部门,采取电话回访客户、上门拜访等方式,对公司各个部门的工作质量进行客户满意度调查。 + +### 异常情况处理 +建立客户服务投诉专线,按照公司客户服务的投诉处理流程准确及时地处理客户的投诉。 + +
+ +## 联系方式 +服务热线:400-089-1870 + +官方网站:http://www.kylinos.cn + +地址: + +|地 区|详细信息| +| :------------ | :------------ | +|天津总部| 地址:天津市滨海新区海洋高新技术开发区信安创业广场3号楼 +||电话:022-58955650 +||传真:022-58955651 +||邮编:300450 +|北京营销中心| 地址:北京市海淀区北四环西路银谷大厦11层 +||电话:010-88878781;010-88878791;010-88878792 +||传真:010-88878782 +||邮编:100097 +|长沙分公司| 地址:长沙市开福区富兴时代T3写字楼39楼 +||电话:0731-88280170 +||传真:0731-88280166 +||邮编:410073 + +
diff --git a/data/guide/ukui/en_US/image/1.png b/data/guide/ukui/en_US/image/1.png new file mode 100644 index 0000000..55e510d Binary files /dev/null and b/data/guide/ukui/en_US/image/1.png differ diff --git a/data/guide/ukui/en_US/image/10.png b/data/guide/ukui/en_US/image/10.png new file mode 100644 index 0000000..3d617d5 Binary files /dev/null and b/data/guide/ukui/en_US/image/10.png differ diff --git a/data/guide/ukui/en_US/image/11.png b/data/guide/ukui/en_US/image/11.png new file mode 100644 index 0000000..83a0f85 Binary files /dev/null and b/data/guide/ukui/en_US/image/11.png differ diff --git a/data/guide/ukui/en_US/image/12.png b/data/guide/ukui/en_US/image/12.png new file mode 100644 index 0000000..7605138 Binary files /dev/null and b/data/guide/ukui/en_US/image/12.png differ diff --git a/data/guide/ukui/en_US/image/13.png b/data/guide/ukui/en_US/image/13.png new file mode 100644 index 0000000..e28b6d7 Binary files /dev/null and b/data/guide/ukui/en_US/image/13.png differ diff --git a/data/guide/ukui/en_US/image/14.png b/data/guide/ukui/en_US/image/14.png new file mode 100644 index 0000000..c32a541 Binary files /dev/null and b/data/guide/ukui/en_US/image/14.png differ diff --git a/data/guide/ukui/en_US/image/15.png b/data/guide/ukui/en_US/image/15.png new file mode 100644 index 0000000..95c9b58 Binary files /dev/null and b/data/guide/ukui/en_US/image/15.png differ diff --git a/data/guide/ukui/en_US/image/16.png b/data/guide/ukui/en_US/image/16.png new file mode 100644 index 0000000..1a2b11e Binary files /dev/null and b/data/guide/ukui/en_US/image/16.png differ diff --git a/data/guide/ukui/en_US/image/17.png b/data/guide/ukui/en_US/image/17.png new file mode 100644 index 0000000..4f012c6 Binary files /dev/null and b/data/guide/ukui/en_US/image/17.png differ diff --git a/data/guide/ukui/en_US/image/18.png b/data/guide/ukui/en_US/image/18.png new file mode 100644 index 0000000..ce7ecbb Binary files /dev/null and b/data/guide/ukui/en_US/image/18.png differ diff --git a/data/guide/ukui/en_US/image/19.png b/data/guide/ukui/en_US/image/19.png new file mode 100644 index 0000000..9b5e7d4 Binary files /dev/null and b/data/guide/ukui/en_US/image/19.png differ diff --git a/data/guide/ukui/en_US/image/2.png b/data/guide/ukui/en_US/image/2.png new file mode 100644 index 0000000..aeaaebd Binary files /dev/null and b/data/guide/ukui/en_US/image/2.png differ diff --git a/data/guide/ukui/en_US/image/20.png b/data/guide/ukui/en_US/image/20.png new file mode 100644 index 0000000..f6870ce Binary files /dev/null and b/data/guide/ukui/en_US/image/20.png differ diff --git a/data/guide/ukui/en_US/image/21.png b/data/guide/ukui/en_US/image/21.png new file mode 100644 index 0000000..a4643a9 Binary files /dev/null and b/data/guide/ukui/en_US/image/21.png differ diff --git a/data/guide/ukui/en_US/image/22.png b/data/guide/ukui/en_US/image/22.png new file mode 100644 index 0000000..10954a2 Binary files /dev/null and b/data/guide/ukui/en_US/image/22.png differ diff --git a/data/guide/ukui/en_US/image/23.png b/data/guide/ukui/en_US/image/23.png new file mode 100644 index 0000000..bf8bcbd Binary files /dev/null and b/data/guide/ukui/en_US/image/23.png differ diff --git a/data/guide/ukui/en_US/image/3.png b/data/guide/ukui/en_US/image/3.png new file mode 100644 index 0000000..62a92f5 Binary files /dev/null and b/data/guide/ukui/en_US/image/3.png differ diff --git a/data/guide/ukui/en_US/image/4.png b/data/guide/ukui/en_US/image/4.png new file mode 100644 index 0000000..def036a Binary files /dev/null and b/data/guide/ukui/en_US/image/4.png differ diff --git a/data/guide/ukui/en_US/image/5.png b/data/guide/ukui/en_US/image/5.png new file mode 100644 index 0000000..16617d5 Binary files /dev/null and b/data/guide/ukui/en_US/image/5.png differ diff --git a/data/guide/ukui/en_US/image/6.png b/data/guide/ukui/en_US/image/6.png new file mode 100644 index 0000000..991a88c Binary files /dev/null and b/data/guide/ukui/en_US/image/6.png differ diff --git a/data/guide/ukui/en_US/image/7.png b/data/guide/ukui/en_US/image/7.png new file mode 100644 index 0000000..13ef818 Binary files /dev/null and b/data/guide/ukui/en_US/image/7.png differ diff --git a/data/guide/ukui/en_US/image/8.png b/data/guide/ukui/en_US/image/8.png new file mode 100644 index 0000000..6f9d19d Binary files /dev/null and b/data/guide/ukui/en_US/image/8.png differ diff --git a/data/guide/ukui/en_US/image/9.png b/data/guide/ukui/en_US/image/9.png new file mode 100644 index 0000000..9e3db08 Binary files /dev/null and b/data/guide/ukui/en_US/image/9.png differ diff --git a/data/guide/ukui/en_US/image/icon1.png b/data/guide/ukui/en_US/image/icon1.png new file mode 100644 index 0000000..597ecf6 Binary files /dev/null and b/data/guide/ukui/en_US/image/icon1.png differ diff --git a/data/guide/ukui/en_US/image/icon10.png b/data/guide/ukui/en_US/image/icon10.png new file mode 100644 index 0000000..3b1d7fe Binary files /dev/null and b/data/guide/ukui/en_US/image/icon10.png differ diff --git a/data/guide/ukui/en_US/image/icon2.png b/data/guide/ukui/en_US/image/icon2.png new file mode 100644 index 0000000..678d89a Binary files /dev/null and b/data/guide/ukui/en_US/image/icon2.png differ diff --git a/data/guide/ukui/en_US/image/icon3.png b/data/guide/ukui/en_US/image/icon3.png new file mode 100644 index 0000000..a0c181d Binary files /dev/null and b/data/guide/ukui/en_US/image/icon3.png differ diff --git a/data/guide/ukui/en_US/image/icon4.png b/data/guide/ukui/en_US/image/icon4.png new file mode 100644 index 0000000..fcc7fe1 Binary files /dev/null and b/data/guide/ukui/en_US/image/icon4.png differ diff --git a/data/guide/ukui/en_US/image/icon5.png b/data/guide/ukui/en_US/image/icon5.png new file mode 100644 index 0000000..7ae06de Binary files /dev/null and b/data/guide/ukui/en_US/image/icon5.png differ diff --git a/data/guide/ukui/en_US/image/icon6.png b/data/guide/ukui/en_US/image/icon6.png new file mode 100644 index 0000000..22a0131 Binary files /dev/null and b/data/guide/ukui/en_US/image/icon6.png differ diff --git a/data/guide/ukui/en_US/image/icon7.png b/data/guide/ukui/en_US/image/icon7.png new file mode 100644 index 0000000..4a7c7ae Binary files /dev/null and b/data/guide/ukui/en_US/image/icon7.png differ diff --git a/data/guide/ukui/en_US/image/icon8.png b/data/guide/ukui/en_US/image/icon8.png new file mode 100644 index 0000000..b02bb7b Binary files /dev/null and b/data/guide/ukui/en_US/image/icon8.png differ diff --git a/data/guide/ukui/en_US/image/icon9.png b/data/guide/ukui/en_US/image/icon9.png new file mode 100644 index 0000000..2bb4f81 Binary files /dev/null and b/data/guide/ukui/en_US/image/icon9.png differ diff --git a/data/guide/ukui/en_US/index.md b/data/guide/ukui/en_US/index.md new file mode 100644 index 0000000..8d6e834 --- /dev/null +++ b/data/guide/ukui/en_US/index.md @@ -0,0 +1,224 @@ +# UKUI Desktop Environment +Desktop Environment is the basis for the user's operation on the graphical interface, and it provides multiple functions. As shown in Fig 1. + +![Fig 1 Desktop Environment-big](image/1.png) +
+ +## Desktop +### Desktop Icon +There are three icons: personal folder, "Computer", "Trash" by default. Double click to open it. + +Right clicking "Computer" and selecting "Properties", it can show the current system version, kernel version, activation and other related informations, as shown in Fig 2. + +![Fig 2 "Computer" > "Properties"-big](image/2.png) + +### Right-click Menu +Right-click on the desktop blank and a menu appears as shown in Fig 3. + +![Fig 3 Right-click menu](image/3.png) +
+ +## Taskbar +Taskbar is located at the bottom and includes the Start Menu, File Manager, Tray Menu, etc.. + +The individual components as shown below. + +| Component | Decsription | +| :------------ | :------------ | +| ![](image/icon1.png) | Start menu: Open the system menu to find applications | +| ![](image/icon2.png) | Taskview: Work in different workspaces | +| ![](image/icon3.png) | File manager: Browse and manage documents in the system | +| ![](image/icon4.png) | Kylin store: Software center | +| ![](image/icon5.png) | QAX browser: Provide a convenient and safe way to access the Internet | +| ![](image/icon6.png) | WPS Office | +| ![](image/icon7.png) | Ukui search: Search files, applications, etc. | +| Window Area | The blank part in the middle of the horizontal bar. Display running programs, opened documents, and allow to close windows, etc. | +| Tray Menu | Include settings for input method, volume, network connection, etc. | +| Show Desktop | The button is on far right. Minimize all windows and return to the desktop; Click again will restore the windows | + +
+ +### Workspace +Click "![](image/icon2.png)" and the interface as shown in Fig 4. + +![Fig 4 Workspace-big](image/4.png) + +### Preview Window +Move the mouse to the application's icon on the taskbar, and it will show a preview of the opened windows, as shown in Fig 5. + +![Fig 5 Preview window-big](image/5.png) + +Right click the icon to close all the window of this application. + +### Calendar +Click the date and time on the taskbar to pop up the calendar window. + +![Fig 15 Calendar](image/15.png) + +### Set the taskbar +Right-click the taskbar, the user can set the layout of the taskbar. +![Fig 24 Set the taskbar](image/24.png) + +### Sidebar +Click the sidebar icon on the tray menu and the popup as shown in Fig 6. + +![Fig 6 Sidebar-big](image/6.png) + +#### Notification Center +It will show the lastest news. Click "Clean up" to empty the list. + +![Fig 7 Notification center](image/7.png) + +#### Clipboard +It will store the lastest copy or cut contents. + +![Fig 8 Clipboard](image/8.png) + +### Plugins +The second tab is plugins -- clock, kylin memo, and kylin service support. + +![Fig 9 Plugins](image/9.png) + +#### Clock + +It provides countdown, alarm clock, and stopwatch. Switch the functions through the top three icons. + +![Fig 10 Add alarm clock](image/10.png) + +#### Memo + +To write down information at any time. + +![Fig 11 Kylin memo](image/11.png) + +#### Service Support + +Please go to the main interface to see the details. + +## Network +Click the network icon, and users can choose wifi or wired connection. + +![Fig 13 Network](image/13.png) + +Click one wired connection to see the details. + +![Fig 14 Connection details](image/14.png) + +### Advanced Settings +Right click the taskbar, users can set the layout of taskbar, as shown in Fig 16. + +![Fig 16 Right-click menu of the taskbar](image/16.png) +
+ +## Windows +### Window manager +The functions provided as shown below. + +| Function | Description | +| :------------ | :------------ | +| Title Bar | Show the title name of current window | +| Minimize/Maximize/Close | The three icon buttons at the right of the title bar correspond to minimize, maximize and close | +| Side Sliding | Scroll up and down to view the page by the slider at the right of the window | +| Stack | Allow overlap among windows | +| Drag and Drop | Long press the left mouse button at the title bar to move the window to any position | +| Resize | Move the mouse to the corner of the window and long press the left button to resize the window | + +
+ +### Window Switch +There are three ways: + +* Click the window title on the Taskbar + +* Click the different window at the desktop + +* Shortcut Alt + Tab + +
+ +## Start Menu +Click the button to open it, and the main interface as shown in Fig 17. + +![Fig 17 Start menu](image/17.png) + +### Category Menu +There are 3 categories: + +* All App: List all applications + +* Sort by Letter: List the applications by the first letter. + +* Sort by Function: List the applications by the function. + +Click fullscreen icon on the upper right corner to open the full screen mode. + +![Fig 18 Start menu(Full screen)-big](image/18.png) + +#### Other Functions +1) User Informations + +Click "![](image/icon8.png)" to see the user informations. + +2) Computer + +Click "![](image/icon9.png)" to enter the computer path in file manager. + +3) Settings + +Click "![](image/icon10.png)" to open the control center. + +### Power Menu +Click "Power" button, and the options as shown in Fig 19. + +![Fig 19 Shutdown interface-big](image/19.png) + +1) Lock Screen + +When users do not need to use the computer temporarily, the lock screen can be selected (without affecting the current running state of the system) to prevent misoperations. And input the password to re-enter the system. The system will automatically lock the screen after a period of idle time by default. + +![Fig 20 Lock screen-big](image/20.png) + +2) Switch Users & Log Out + +When you want to select another user to log in uing the computer, you can select "Log out" or "Switch user". At this point, the system will close all running applications; Therefore, please save the current jobs before performing this action. + +3) Right click the Start Menu can also pop up the shutdown options. + +![Fig 21 Shutdown right-click menu](image/21.png) + +### Application +Input keywords in the search box, and the result will show up automatically. As shown in Fig 22. + +![Fig 22 Search application](image/22.png) + +Right click an application in the start menu, and the pop up menu as shown in Fig 23. + +![Fig 23 Right-click menu of application](image/23.png) +
+ +## Q&A +#### Can not login the system after locking the screen +1) Switch to terminal interface by Ctrl + Alt + F1 + +2) Input the user-name and password to login + +3) Execute "sudo rm -rf ~/.Xauthority" + +4) Switch to graphical interface by Ctrl + Alt + F7, and input the password + +
+ +## Appendix +### Shortcut Key + +| Shortcut | Function | +| :------------ | :------------ | +| F1 | Open the user guide | +| Alt + Tab | Switch window | +| Win | Open the start menu | +| Ctrl + Alt + L | Lock screen | +| Ctrl + Alt + Delete | Open the shutdown management interface | +| Ctrl + Alt + F1~6 | Switch to terminal interface | +| Ctrl + Alt + F7 | Switch to graphic interface | +| Alt + F9 | Minimization window | +| Alt + F10 | Switch maximize state / Resume | diff --git a/data/guide/ukui/ukui.png b/data/guide/ukui/ukui.png new file mode 100644 index 0000000..c7c9017 Binary files /dev/null and b/data/guide/ukui/ukui.png differ diff --git a/data/guide/ukui/zh_CN/image/1.png b/data/guide/ukui/zh_CN/image/1.png new file mode 100644 index 0000000..c8ea4cf Binary files /dev/null and b/data/guide/ukui/zh_CN/image/1.png differ diff --git a/data/guide/ukui/zh_CN/image/10.png b/data/guide/ukui/zh_CN/image/10.png new file mode 100644 index 0000000..0c14c2f Binary files /dev/null and b/data/guide/ukui/zh_CN/image/10.png differ diff --git a/data/guide/ukui/zh_CN/image/11.png b/data/guide/ukui/zh_CN/image/11.png new file mode 100644 index 0000000..b8c8c2a Binary files /dev/null and b/data/guide/ukui/zh_CN/image/11.png differ diff --git a/data/guide/ukui/zh_CN/image/12.png b/data/guide/ukui/zh_CN/image/12.png new file mode 100644 index 0000000..8163b4e Binary files /dev/null and b/data/guide/ukui/zh_CN/image/12.png differ diff --git a/data/guide/ukui/zh_CN/image/13.png b/data/guide/ukui/zh_CN/image/13.png new file mode 100644 index 0000000..d78767d Binary files /dev/null and b/data/guide/ukui/zh_CN/image/13.png differ diff --git a/data/guide/ukui/zh_CN/image/14.png b/data/guide/ukui/zh_CN/image/14.png new file mode 100644 index 0000000..0a1842c Binary files /dev/null and b/data/guide/ukui/zh_CN/image/14.png differ diff --git a/data/guide/ukui/zh_CN/image/15.png b/data/guide/ukui/zh_CN/image/15.png new file mode 100644 index 0000000..e24dc88 Binary files /dev/null and b/data/guide/ukui/zh_CN/image/15.png differ diff --git a/data/guide/ukui/zh_CN/image/16.png b/data/guide/ukui/zh_CN/image/16.png new file mode 100644 index 0000000..a7081f4 Binary files /dev/null and b/data/guide/ukui/zh_CN/image/16.png differ diff --git a/data/guide/ukui/zh_CN/image/17.png b/data/guide/ukui/zh_CN/image/17.png new file mode 100644 index 0000000..24b2d88 Binary files /dev/null and b/data/guide/ukui/zh_CN/image/17.png differ diff --git a/data/guide/ukui/zh_CN/image/18.png b/data/guide/ukui/zh_CN/image/18.png new file mode 100644 index 0000000..1f9bc72 Binary files /dev/null and b/data/guide/ukui/zh_CN/image/18.png differ diff --git a/data/guide/ukui/zh_CN/image/19.png b/data/guide/ukui/zh_CN/image/19.png new file mode 100644 index 0000000..396c537 Binary files /dev/null and b/data/guide/ukui/zh_CN/image/19.png differ diff --git a/data/guide/ukui/zh_CN/image/2.png b/data/guide/ukui/zh_CN/image/2.png new file mode 100644 index 0000000..c372a04 Binary files /dev/null and b/data/guide/ukui/zh_CN/image/2.png differ diff --git a/data/guide/ukui/zh_CN/image/20.png b/data/guide/ukui/zh_CN/image/20.png new file mode 100644 index 0000000..762b685 Binary files /dev/null and b/data/guide/ukui/zh_CN/image/20.png differ diff --git a/data/guide/ukui/zh_CN/image/21.png b/data/guide/ukui/zh_CN/image/21.png new file mode 100644 index 0000000..60a84ad Binary files /dev/null and b/data/guide/ukui/zh_CN/image/21.png differ diff --git a/data/guide/ukui/zh_CN/image/22.png b/data/guide/ukui/zh_CN/image/22.png new file mode 100644 index 0000000..f2acd4a Binary files /dev/null and b/data/guide/ukui/zh_CN/image/22.png differ diff --git a/data/guide/ukui/zh_CN/image/3.png b/data/guide/ukui/zh_CN/image/3.png new file mode 100644 index 0000000..584eeca Binary files /dev/null and b/data/guide/ukui/zh_CN/image/3.png differ diff --git a/data/guide/ukui/zh_CN/image/4.png b/data/guide/ukui/zh_CN/image/4.png new file mode 100644 index 0000000..d921040 Binary files /dev/null and b/data/guide/ukui/zh_CN/image/4.png differ diff --git a/data/guide/ukui/zh_CN/image/5.png b/data/guide/ukui/zh_CN/image/5.png new file mode 100644 index 0000000..5f9374d Binary files /dev/null and b/data/guide/ukui/zh_CN/image/5.png differ diff --git a/data/guide/ukui/zh_CN/image/6.png b/data/guide/ukui/zh_CN/image/6.png new file mode 100644 index 0000000..20d4d79 Binary files /dev/null and b/data/guide/ukui/zh_CN/image/6.png differ diff --git a/data/guide/ukui/zh_CN/image/7.png b/data/guide/ukui/zh_CN/image/7.png new file mode 100644 index 0000000..85b4a18 Binary files /dev/null and b/data/guide/ukui/zh_CN/image/7.png differ diff --git a/data/guide/ukui/zh_CN/image/8.png b/data/guide/ukui/zh_CN/image/8.png new file mode 100644 index 0000000..c901224 Binary files /dev/null and b/data/guide/ukui/zh_CN/image/8.png differ diff --git a/data/guide/ukui/zh_CN/image/9.png b/data/guide/ukui/zh_CN/image/9.png new file mode 100644 index 0000000..5e24801 Binary files /dev/null and b/data/guide/ukui/zh_CN/image/9.png differ diff --git a/data/guide/ukui/zh_CN/image/icon1.png b/data/guide/ukui/zh_CN/image/icon1.png new file mode 100644 index 0000000..a8c1f2d Binary files /dev/null and b/data/guide/ukui/zh_CN/image/icon1.png differ diff --git a/data/guide/ukui/zh_CN/image/icon10.png b/data/guide/ukui/zh_CN/image/icon10.png new file mode 100644 index 0000000..f4ffd9a Binary files /dev/null and b/data/guide/ukui/zh_CN/image/icon10.png differ diff --git a/data/guide/ukui/zh_CN/image/icon11.png b/data/guide/ukui/zh_CN/image/icon11.png new file mode 100644 index 0000000..f1b4f07 Binary files /dev/null and b/data/guide/ukui/zh_CN/image/icon11.png differ diff --git a/data/guide/ukui/zh_CN/image/icon12.png b/data/guide/ukui/zh_CN/image/icon12.png new file mode 100644 index 0000000..8425a2a Binary files /dev/null and b/data/guide/ukui/zh_CN/image/icon12.png differ diff --git a/data/guide/ukui/zh_CN/image/icon13.png b/data/guide/ukui/zh_CN/image/icon13.png new file mode 100644 index 0000000..0537ab9 Binary files /dev/null and b/data/guide/ukui/zh_CN/image/icon13.png differ diff --git a/data/guide/ukui/zh_CN/image/icon14.png b/data/guide/ukui/zh_CN/image/icon14.png new file mode 100644 index 0000000..b3b4492 Binary files /dev/null and b/data/guide/ukui/zh_CN/image/icon14.png differ diff --git a/data/guide/ukui/zh_CN/image/icon15.png b/data/guide/ukui/zh_CN/image/icon15.png new file mode 100644 index 0000000..bb8f661 Binary files /dev/null and b/data/guide/ukui/zh_CN/image/icon15.png differ diff --git a/data/guide/ukui/zh_CN/image/icon16.png b/data/guide/ukui/zh_CN/image/icon16.png new file mode 100644 index 0000000..8425a2a Binary files /dev/null and b/data/guide/ukui/zh_CN/image/icon16.png differ diff --git a/data/guide/ukui/zh_CN/image/icon17.png b/data/guide/ukui/zh_CN/image/icon17.png new file mode 100644 index 0000000..0c9a043 Binary files /dev/null and b/data/guide/ukui/zh_CN/image/icon17.png differ diff --git a/data/guide/ukui/zh_CN/image/icon18.png b/data/guide/ukui/zh_CN/image/icon18.png new file mode 100644 index 0000000..0b47326 Binary files /dev/null and b/data/guide/ukui/zh_CN/image/icon18.png differ diff --git a/data/guide/ukui/zh_CN/image/icon19.png b/data/guide/ukui/zh_CN/image/icon19.png new file mode 100644 index 0000000..396c537 Binary files /dev/null and b/data/guide/ukui/zh_CN/image/icon19.png differ diff --git a/data/guide/ukui/zh_CN/image/icon2.png b/data/guide/ukui/zh_CN/image/icon2.png new file mode 100644 index 0000000..c0129f9 Binary files /dev/null and b/data/guide/ukui/zh_CN/image/icon2.png differ diff --git a/data/guide/ukui/zh_CN/image/icon20.png b/data/guide/ukui/zh_CN/image/icon20.png new file mode 100644 index 0000000..195d81f Binary files /dev/null and b/data/guide/ukui/zh_CN/image/icon20.png differ diff --git a/data/guide/ukui/zh_CN/image/icon21.png b/data/guide/ukui/zh_CN/image/icon21.png new file mode 100644 index 0000000..01f26bc Binary files /dev/null and b/data/guide/ukui/zh_CN/image/icon21.png differ diff --git a/data/guide/ukui/zh_CN/image/icon22.png b/data/guide/ukui/zh_CN/image/icon22.png new file mode 100644 index 0000000..17e14b3 Binary files /dev/null and b/data/guide/ukui/zh_CN/image/icon22.png differ diff --git a/data/guide/ukui/zh_CN/image/icon23.png b/data/guide/ukui/zh_CN/image/icon23.png new file mode 100644 index 0000000..7f3e0e0 Binary files /dev/null and b/data/guide/ukui/zh_CN/image/icon23.png differ diff --git a/data/guide/ukui/zh_CN/image/icon24.png b/data/guide/ukui/zh_CN/image/icon24.png new file mode 100644 index 0000000..0989199 Binary files /dev/null and b/data/guide/ukui/zh_CN/image/icon24.png differ diff --git a/data/guide/ukui/zh_CN/image/icon25.png b/data/guide/ukui/zh_CN/image/icon25.png new file mode 100644 index 0000000..bb8f661 Binary files /dev/null and b/data/guide/ukui/zh_CN/image/icon25.png differ diff --git a/data/guide/ukui/zh_CN/image/icon3.png b/data/guide/ukui/zh_CN/image/icon3.png new file mode 100644 index 0000000..c9972da Binary files /dev/null and b/data/guide/ukui/zh_CN/image/icon3.png differ diff --git a/data/guide/ukui/zh_CN/image/icon4.png b/data/guide/ukui/zh_CN/image/icon4.png new file mode 100644 index 0000000..bb8f661 Binary files /dev/null and b/data/guide/ukui/zh_CN/image/icon4.png differ diff --git a/data/guide/ukui/zh_CN/image/icon5.png b/data/guide/ukui/zh_CN/image/icon5.png new file mode 100644 index 0000000..c98606e Binary files /dev/null and b/data/guide/ukui/zh_CN/image/icon5.png differ diff --git a/data/guide/ukui/zh_CN/image/icon6.png b/data/guide/ukui/zh_CN/image/icon6.png new file mode 100644 index 0000000..bb8f661 Binary files /dev/null and b/data/guide/ukui/zh_CN/image/icon6.png differ diff --git a/data/guide/ukui/zh_CN/image/icon7.png b/data/guide/ukui/zh_CN/image/icon7.png new file mode 100644 index 0000000..0c9a043 Binary files /dev/null and b/data/guide/ukui/zh_CN/image/icon7.png differ diff --git a/data/guide/ukui/zh_CN/image/icon8.png b/data/guide/ukui/zh_CN/image/icon8.png new file mode 100644 index 0000000..d4a7941 Binary files /dev/null and b/data/guide/ukui/zh_CN/image/icon8.png differ diff --git a/data/guide/ukui/zh_CN/image/icon9.png b/data/guide/ukui/zh_CN/image/icon9.png new file mode 100644 index 0000000..25802b0 Binary files /dev/null and b/data/guide/ukui/zh_CN/image/icon9.png differ diff --git a/data/guide/ukui/zh_CN/index.md b/data/guide/ukui/zh_CN/index.md new file mode 100644 index 0000000..7ca80be --- /dev/null +++ b/data/guide/ukui/zh_CN/index.md @@ -0,0 +1,414 @@ +# 桌面环境 + +## 登录 + +### 概述 + +开机启动计算机后进入银河麒麟界面,根据设置系统会默认选择自动登录或停留在登录窗口等待登录。 + +![图 1 登录界面](image/1.png) +
+ +### 基本操作 + +当启动系统后,系统会提示输入密码,即系统中已创建的用户名和密码。通常用户名和密码在系统安装时进行设置,选择登录用户后,输入正确的密码,点击登录按钮即可登录桌面,点击隐藏/取消隐藏按钮即可实现密码隐藏/显示。 + +## 桌面环境 + +### 概述 + +桌面是登录后主要操作的屏幕区域。在桌面上可以通过外设的鼠标和键盘对操作系统进行基本的操作,比如新建文件/文件夹、排列文件、打开终端、设置壁纸和屏保、侧边栏等,还可以向桌面添加应用的快捷方式。 + +银河麒麟初始桌面由图标、任务栏、桌面背景组成,默认放置了计算机、回收站、主文件夹三个图标,鼠标左键双击即可打开 + +|图标| 说明 +| :------------ | :------------ | +|![](image/icon1.png)| 计算机:显示连接到本机的驱动器和硬件 +|![](image/icon2.png)| 回收站:显示被删除到回收站的文件 +|![](image/icon3.png)| 主文件夹:显示个人主目录 + +
+ +![图 2 默认界面](image/2.png) + +### 基本操作 + +(1)右键计算机点击属性,可以查看当前系统版本、内核版本、激活状态等相关信息 + +![图 3 系统概述](image/3.png) + +(2)在桌面右键,可以调出快捷菜单可以进行简单便捷的操作 + +![图 4 右键菜单](image/4.png) + +| 选项 | 说明 | +|---------|---------------------------| +| 在新窗口中打开 | 在新窗口打开当前指定的文件或目录 | +| 全选 | 全选当前目录的文件 | +| 新建 | 可新建文件夹、空文本、WPS文件 | +| 视图类型 | 提供四种视图类型:小图标、中图标、大图标、超大图标 | +| 排列方式 | 提供多种排列图标的方式 | +| 刷新 | 刷新界面 | +| 打开终端 | 打开终端软件 | +| 设置背景 | 快捷打开设置-个性化-背景,可以进行背景的相关设置 | + +表 1-2 右键菜单 + +## 电源管理 + +### 概述 + +电源管理是对桌面操作系统最基本的功能,能够实现对当前桌面操作系统电源状态及当前账户状态的修改,包括休眠、睡眠、锁屏、注销、重启、关机。 + +![图 5 电源](image/5.png) + +- “开始菜单”![](image/icon4.png)>“电源”![](image/icon5.png); + +- 关机 + +退出登录并关闭您的计算机。 + +- 重启 + +退出登录并重启您的计算机。 +- 注销 + +清除并登出当前使用的用户,并且返回至用户登录位置,主要用于其他用户账户登录时的场景。 + +- 锁屏 + +当您暂时不需要使用计算机时,可以选择锁屏(不会影响系统当前的运行状态),防止误操作。当您返回后,输入密码即可重新进入系统。在默认设置下,系统在一段空闲时间后,将自动锁定屏幕。 + +- 睡眠 + +睡眠状态时,将切断除内存外其他配件的电源,工作状态的数据将保存在内存中,这样在重新唤醒电脑时,就可以快速恢复睡眠前的工作状态。如果您在工作过程中需要短时间离开电脑,那么可以使用睡眠功能,一方面可以节电,另外一方面又可以快速恢复工作。睡眠唤醒可通过键鼠及休眠键,电源键。 + +- 休眠 + +系统会自动将内存中的数据全部转存到硬盘上一个休眠文件中,然后切断对所有设备的供电。这样当恢复的时候,系统会从硬盘上将休眠文件的内容直接读入内存,并恢复到休眠之前的状态。休眠唤醒需要通过电源键或休眠键。 + +## 文件及文件夹 + +### 概述 + +通过文件夹可以收纳整理您的资料,包含桌面应用、文件及文件夹等。在桌面可新建文件或文件夹,也可以对文件/文件夹进行常规的复制、粘贴、重命名、删除等操作。 + +### 基本操作 + +在桌面上,点击鼠标右键,点击 **“新建”**,选择新建文件类型或新建文件夹,输入新建文件/文件夹的名称。 +在桌面文件或文件夹上,点击鼠标右键,可以使用文件管理器的相关功能: + +| 名称 | 描述 | +|--------|-----------------------------| +| 打开 | 打开文件/文件夹 | +| 打开方式 | 选定系统默认打开方式,也可以选择其他关联应用程序来打开 | +| 反选 | 反向选择桌面文件/文件夹 | +| 复制 | 复制文件或文件夹 | +| 剪切 | 移动文件或文件夹 | +| 重命名 | 重命名文件或文件夹 | +| 删除到回收站 | 删除文件或文件夹到回收站 | +| 创建链接 | 创建一个快捷方式 | +| 属性 | 查看文件或文件夹的基本信息,共享方式,及其权限 | +| 设置背景 | 快捷打开设置-个性化-背景,可以进行背景的相关设置 | + +表 1-3 文件管理器 + +## 图标排列和大小 + +### 概述 + +桌面的图标大小可以进行调节,桌面上的图标按照需要进行排序。系统默认提供4种图标大小的设置,分别为小图标、中图标(默认)、大图标和超大图标。 + +### 基本操作 + +将鼠标悬停在应用图标上,按住鼠标左键不放,将应用图标拖拽到指定的位置松开鼠标左键释放图标。在桌面右键选择“视图类型”,选择一个合适的图标大小。点击鼠标右键,选择“排序方式”,系统提供如下4种排序方式: + +- 点击文件名称,将按文件的名称顺序显示; +- 点击文件大小,将按文件的大小顺序显示; +- 点击文件类型,将按文件的类型顺序显示; +- 点击修改时间,文件将按最近一次的修改日期顺序显示。 + +## 任务栏 + +### 概述 + +任务栏用于查看系统启动应用、系统托盘图标,位于桌面底部。任务栏默认放置开始菜单、多窗口、文件管理器、Firefox火狐浏览器、系统托盘图标。在任务栏可打开开始菜单、显示桌面、进入工作区,对应用程序进行打开、新建、关闭、强制退出等操作,还可以设置输入法,调节音量,连接 WiFi,查看日历,进入关机界面等。 + +| 图标 | 名称 | 描述 | +|--------|------------------|----| +|![](image/icon6.png)| 开始菜单 | 启动菜单,查看系统应用 | +|![](image/icon7.png)| 显示任务视图 | 显示多任务视图,切换多个桌面窗口 | +|![](image/icon8.png)| 文件管理器 | 文件及文件夹管理 | +|![](image/icon9.png)| 键盘 | 切换键盘输入法,输入语言 | +|![](image/icon10.png)| 麒麟天气 | 查看城市天气 | +|![](image/icon11.png)| 网络设置 | 设置网络连接 | +|![](image/icon12.png)| 通知中心 | 查看系统推送通知 | +|![](image/icon13.png)| 声音 | 调节声音大小 | +|![](image/icon14.png)| 夜间模式 | 切换系统夜间模式 | + +## 开始菜单 + +### 概述 + +开始菜单是![](image/icon15.png)使用系统的“起点”,查看并管理系统中已安装的所有应用,在菜单中使用分类导航或搜索功能可以快速定位需要的应用程序。 + +### 基本操作 + +#### 切换模式 + +菜单有全屏和小窗口两种模式。点击菜单界面右上角的图标来切换模式。 +两种模式均支持搜索应用、设置快捷方式等操作。 + +小窗口模式还支持快速打开文件管理器,控制中心和进入关机界面等功能。 + +![图 6 小窗口模式](image/6.png) + +![图 7 大窗口模式](image/7.png) + +#### 查找应用 + +在开始菜单中,可以使用鼠标滚轮或切换分类导航查找应用。如果已知应用名称,可直接在搜索框中输入应用名称或关键字快速定位。 + +#### 运行应用 + +对于已经创建了桌面快捷方式或固定到任务栏上的应用,可以通过以下途径来打开应用: + +双击桌面图标,或右键单击桌面图标选择打开。 + +直接点击任务栏上的应用图标,或右键单击任务栏上的应用图标选择打开。 + +单击打开开始菜单后,直接点击应用图标打开,或右键单击应用图标选择打开。 + +## 安装和卸载 + +### 概述 + +此操作系统提供便捷的应用软件安装卸载方式,可根据您的需求自主进行安装卸载操作。 + +### 基本操作 + +#### 安装应用 + +(1)软件商店安装 + +银河麒麟桌面操作系统自带麒麟软件商店,可支持一键下载安装应用,详情可参考3.2麒麟软件商店。 + +(2)安装器安装 + +方法一:双击所需要安装的deb,直接会弹窗安装器界面; + +方法二:通过终端敲命令,kylin-installer + 包名,例如麒麟影音kylin-installer + +kylin-video_3.1.0-71_amd64.deb,会弹出安装界面; + +上述所说的弹出安装界面,安装器会根据包的属性,自动识别往兼容环境中安装还是往系统里面安装,直接点 +击安装即可; + +注:当安装完成后,才可以进行下一个包的安装; + +#### 卸载应用 + +对于不再使用的应用,可以通过集中方式将其卸载以节省硬盘空间。 + +1. 在**“开始菜单”**中,右键单击应用图标。 + +2. 点击**“卸载”**。 + +软件商店卸载 + +打开软件商店点击“我的”,进入“应用卸载”,选择需要卸载的应用点击卸载即可。 + +## 侧边栏 + +### 概述 + +侧边栏包含三个模块,通知中心、剪切板、小插件。 + +![图 8 侧边栏](image/8.png) + +### 打开方式 +点击任务栏右下角“侧边栏”![](image/icon16.png)图标或通过快捷键“win+A”打开侧边栏。 + +### 基本操作 + +#### 通知中心 + +默认显示重要通知,点击右上角图标可以切换不同通知页签,点击设置按钮可以设置“来自应用和其他发送者的通知”,可以按照需求自行选定允许通知的软件。 + +![图 9 通知中心](image/9.png) + +#### 剪切板 + +近期复制的文字或者截图会显示在此处,如果需要可以自行查找或者选定需要粘贴的内容。 + +![图 10 通知中心](image/10.png) + +#### 小插件 + +默认包含三个便捷的小插件闹钟、便签贴、服务与支持,可以快速启动。 + +![图 11 小插件](image/11.png) + +## 显示任务视图 + +### 概述 + +通过显示任务视图可以切换使用多个桌面,以便对桌面窗口进行分组管理,窗口管理器可以在不同的工作区内展示不同的窗口内容。 + +![图 12 显示任务视图](image/12.png) + +### 打开方式 +点击任务栏“显示任务视图”![](image/icon17.png)图标,可以打开任务视图窗口管理,选择想要的桌面即可实现桌面窗口切换。 + +## 日历 + +### 概述 + +您可以通过日历功能查阅日期,了解节假日信息,查阅黄历禁忌。 + +### 打开方式 + +点击桌面右下角时间与日期即可弹出日历界面。 + +![图 13 日历](image/13.png) + +### 基本操作 + +- 月份切换:点击上下按钮即可实现单个月份跳转。 + +![图 14 月份切换](image/14.png) + +- 年份切换:点击“年”按钮即可跳转到选择年份日历页面,选择后实现相应跳转。 + +![图 15 年份切换](image/15.png) + +- 月份跳转:点击“月”按钮即可跳转到选择月份日历页面,选择后实现相应跳转。 + +![图 16 月份切换](image/16.png) + +- 今天跳转:点击“今天”按钮即可实现跳转到今天日期日历页面。 + +![图 17 今天跳转](image/17.png) + +- 黄历禁忌折叠:点击禁忌折叠按钮即可实现对黄历禁忌的折叠和展开。 + +![图 18 黄历展开](image/18.png) + +## 触控交互 + +### 概述 + +系统提供多场景的桌面触控交互,若您的设备支持触控功能,可使用多种手势操作完成与桌面的交互。 + +### 基本操作 + +#### 基础手势操作 + +基础手势操作如下表所示: + +| 基础手势操作 | 图示 | 操作说明 | +|--------------------------------|----------------------------------------|------| +|点击| ![](image/icon18.png) | 手指轻点触控设备,触发功能,例如:选择对象、打开菜单栏、执行按钮命令等 | +|双击| ![](image/icon19.png) | 手指快速点击两次触控设备,触发功能,例如:打开桌面应用、打开文件夹/文件、选择文字等 | +|滑动| ![](image/icon20.png) | 滑动以连续滚动列表和页面、切换页面/对象、滑动以调节滑动条数值 | +|拖动| ![](image/icon21.png) | 动对象移动其位置,例如:移动窗口、移动文件/图标位置
拖动进行批量操作,例如:框选文字等内容、框选图标等、刷新页面 | +|长按| ![](image/icon22.png) | 手指长按某个元素触发功能,例如:显示弹出菜单栏、右键菜单栏、多选、选择文字等 | +|捏合| ![](image/icon23.png) | 两个手指按住屏幕向外展开以放大内容,向内收拢以缩小内容,例如:网页、图片 | + +#### 触控交互手势 + +- 打开多任务视图 + +输入设备:触摸屏/平板,交互手势:单指从屏幕底部边缘向上滑动。 + +输入设备:触控板,交互手势:三指向上滑动。 + +- 切换应用视图 + +输入设备:触摸屏/平板,交互手势:四指左右滑动,手指左滑或者右滑显示所 + +有窗口,手指不离开触控设备继续左右滑动选择窗口,手指松开为切换成功。 + +输入设备:触控板,交互手势:三指左右滑动。 + +- 切换桌面 + +输入设备:触控板,交互手势:四指左右滑动,向左滑,切换右侧桌面,向右滑,切换左侧桌面。 + +显示桌面 + +输入设备:触摸屏/平板,交互手势:单指从屏幕顶端向下滑动。 + +输入设备:触控板,交互手势:三指向下滑。 + +- 显示菜单栏 + +输入设备:触摸屏/平板,交互手势:单指长按,手指接触时间≥800ms。 + +输入设备:触控板,交互手势:双指单击。 + +- 进入全局搜索 + +输入设备:触摸屏/平板,交互手势:四指屏幕任意位置下滑。 + +输入设备:触控板,交互手势:三指单击。 + +- 呼出侧边栏 + +输入设备:触摸屏/平板,交互手势:单指屏幕右侧滑入。 + +输入设备:触控板,交互手势:四指点击屏幕任意位置。 + +- 显示任务栏 + +输入设备:触摸屏/平板,交互手势:单指屏幕底部短距离上滑,显示任务栏。 + +- 打开/切换对象 + +输入设备:触控板/触摸屏/平板,交互手势:单指单击(打开菜单栏、侧边栏;选择工具栏、任务栏、应用内其他功能;点击按钮/开关)。 + +输入设备:触控板/触摸屏,交互手势:单指双击(启动应用、文件、文件夹等)。 + +- 缩放页面 + +输入设备:触控板/触摸屏/平板,交互手势:双指捏合放大或者缩小。 + +- 拖拽对象 + +输入设备:触摸屏/平板,交互手势:单指按住拖拽,时间:接触屏幕300ms-800ms,短按拖动。 + +输入设备:触控板,交互手势:单指按住拖拽。 + +- 滑动列表&页面&对象 + +输入设备:触摸屏/平板,交互手势:单双指均可接触屏幕上下/左右滑动,接触屏幕≤300ms并滑动。 + +输入设备:触控板,交互手势:双指上下滑动(向上滑动,页面向上;向下滑动,页面向下),双指左右滑动(向左滑动,页面向左;向右滑动,页面向右) 。 + +## 输入法 + +### 概述 + +系统集成了Fcitx输入法框架(小企鹅输入法),Fcitx 通过使用各种各样的输入法引擎来支持全世界大量不同种类的语言,包括五笔、拼音、二笔、区位、仓颉等输入模块,在输入法的自定义使用上也极为灵活。 + +### 打开方式 + +- 任务栏 > 选择 “![](image/icon24.png)” > 单击右键 > 打开“配置”; + +- “开始菜单”![](image/icon25.png) >“设置” > “键盘” > “输入法设置” + +### 基本操作 + +对任务栏中输入法图标右键单击后将弹出输入法菜单栏,可以进行切换输入法、配置输入法、选择/切换虚拟键盘、设置输入法皮肤、退出/重新启动输入法等设置。选择“开始菜单”>“设置”>“键盘”>“输入法设置”也可以打开输入法配置窗口。 + +![图 19 输入法菜单栏](image/19.png) + +在输入法配置窗口中,可以进行添加/删除输入法、设置输入法顺序和全局配置的操作。在输入法列表中,在点击底部的“+”可以选择并添加其他输入法,点击“-”可删除输入法。点击“↑”或“↓”可以设置输入法顺序。 + +![图 20 输入法配置窗口](image/20.png) + +![图 21 添加输入法](image/21.png) + +在全局配置窗口,可以设置切换输入法的快捷键,默认输入法状态、在窗口间共享的状态等配置。 + +![图 22 输入法全局配置](image/22.png) diff --git a/data/guide/ukui/zh_CN/index_GF.md b/data/guide/ukui/zh_CN/index_GF.md new file mode 100644 index 0000000..9cb99ee --- /dev/null +++ b/data/guide/ukui/zh_CN/index_GF.md @@ -0,0 +1,388 @@ +# 桌面环境 + +## 登录 + +### 概述 + +开机启动计算机后进入银河麒麟界面,根据设置系统会默认选择自动登录或停留在登录窗口等待登录。 + +![图 1 登录界面](image/1.png) +
+ +### 基本操作 + +当启动系统后,系统会提示输入密码,即系统中已创建的用户名和密码。通常用户名和密码在系统安装时进行设置,选择登录用户后,输入正确的密码,点击登录按钮即可登录桌面,点击隐藏/取消隐藏按钮即可实现密码隐藏/显示。 + +## 桌面环境 + +### 概述 + +桌面是登录后主要操作的屏幕区域。在桌面上可以通过外设的鼠标和键盘对操作系统进行基本的操作,比如新建文件/文件夹、排列文件、打开终端、设置壁纸和屏保、侧边栏等,还可以向桌面添加应用的快捷方式。 + +银河麒麟初始桌面由图标、任务栏、桌面背景组成,默认放置了计算机、回收站、主文件夹三个图标,鼠标左键双击即可打开 + +|图标| 说明 +| :------------ | :------------ | +|![](image/icon1.png)| 计算机:显示连接到本机的驱动器和硬件 +|![](image/icon2.png)| 回收站:显示被删除到回收站的文件 +|![](image/icon3.png)| 主文件夹:显示个人主目录 + +
+ +![图 2 默认界面](image/2.png) + +### 基本操作 + +(1)右键计算机点击属性,可以查看当前系统版本、内核版本、激活状态等相关信息 + +![图 3 系统概述](image/3.png) + +(2)在桌面右键,可以调出快捷菜单可以进行简单便捷的操作 + +![图 4 右键菜单](image/4.png) + +| 选项 | 说明 | +|---------|---------------------------| +| 在新窗口中打开 | 在新窗口打开当前指定的文件或目录 | +| 全选 | 全选当前目录的文件 | +| 新建 | 可新建文件夹、空文本、WPS文件 | +| 视图类型 | 提供四种视图类型:小图标、中图标、大图标、超大图标 | +| 排列方式 | 提供多种排列图标的方式 | +| 刷新 | 刷新界面 | +| 打开终端 | 打开终端软件 | +| 设置背景 | 快捷打开设置-个性化-背景,可以进行背景的相关设置 | + +表 1-2 右键菜单 + +## 电源管理 + +### 概述 + +电源管理是对桌面操作系统最基本的功能,能够实现对当前桌面操作系统电源状态及当前账户状态的修改,包括休眠、睡眠、锁屏、注销、重启、关机。 + +![图 5 电源](image/5.png) + +- “开始菜单”![](image/icon4.png)>“电源”![](image/icon5.png); + +- 关机 + +退出登录并关闭您的计算机。 + +- 重启 + +退出登录并重启您的计算机。 +- 注销 + +清除并登出当前使用的用户,并且返回至用户登录位置,主要用于其他用户账户登录时的场景。 + +- 锁屏 + +当您暂时不需要使用计算机时,可以选择锁屏(不会影响系统当前的运行状态),防止误操作。当您返回后,输入密码即可重新进入系统。在默认设置下,系统在一段空闲时间后,将自动锁定屏幕。 + +- 睡眠 + +睡眠状态时,将切断除内存外其他配件的电源,工作状态的数据将保存在内存中,这样在重新唤醒电脑时,就可以快速恢复睡眠前的工作状态。如果您在工作过程中需要短时间离开电脑,那么可以使用睡眠功能,一方面可以节电,另外一方面又可以快速恢复工作。睡眠唤醒可通过键鼠及休眠键,电源键。 + +- 休眠 + +系统会自动将内存中的数据全部转存到硬盘上一个休眠文件中,然后切断对所有设备的供电。这样当恢复的时候,系统会从硬盘上将休眠文件的内容直接读入内存,并恢复到休眠之前的状态。休眠唤醒需要通过电源键或休眠键。 + +## 文件及文件夹 + +### 概述 + +通过文件夹可以收纳整理您的资料,包含桌面应用、文件及文件夹等。在桌面可新建文件或文件夹,也可以对文件/文件夹进行常规的复制、粘贴、重命名、删除等操作。 + +### 基本操作 + +在桌面上,点击鼠标右键,点击 **“新建”**,选择新建文件类型或新建文件夹,输入新建文件/文件夹的名称。 +在桌面文件或文件夹上,点击鼠标右键,可以使用文件管理器的相关功能: + +| 名称 | 描述 | +|--------|-----------------------------| +| 打开 | 打开文件/文件夹 | +| 打开方式 | 选定系统默认打开方式,也可以选择其他关联应用程序来打开 | +| 反选 | 反向选择桌面文件/文件夹 | +| 复制 | 复制文件或文件夹 | +| 剪切 | 移动文件或文件夹 | +| 复制 | 复制文件或文件夹 | +| 重命名 | 重命名文件或文件夹 | +| 删除到回收站 | 删除文件或文件夹到回收站 | +| 创建链接 | 创建一个快捷方式 | +| 属性 | 查看文件或文件夹的基本信息,共享方式,及其权限 | +| 设置背景 | 快捷打开设置-个性化-背景,可以进行背景的相关设置 | + +表 1-3 文件管理器 + +## 图标排列和大小 + +### 概述 + +桌面的图标大小可以进行调节,桌面上的图标按照需要进行排序。系统默认提供4种图标大小的设置,分别为小图标、中图标(默认)、大图标和超大图标。 + +### 基本操作 + +将鼠标悬停在应用图标上,按住鼠标左键不放,将应用图标拖拽到指定的位置松开鼠标左键释放图标。在桌面右键选择“视图类型”,选择一个合适的图标大小。点击鼠标右键,选择“排序方式”,系统提供如下4种排序方式: + +- 点击文件名称,将按文件的名称顺序显示; +- 点击文件大小,将按文件的大小顺序显示; +- 点击文件类型,将按文件的类型顺序显示; +- 点击修改时间,文件将按最近一次的修改日期顺序显示。 + +## 任务栏 + +### 概述 + +任务栏用于查看系统启动应用、系统托盘图标,位于桌面底部。任务栏默认放置开始菜单、多窗口、文件管理器、Firefox火狐浏览器、系统托盘图标。在任务栏可打开开始菜单、显示桌面、进入工作区,对应用程序进行打开、新建、关闭、强制退出等操作,还可以设置输入法,调节音量,连接 WiFi,查看日历,进入关机界面等。 + +| 图标 | 名称 | 描述 | +|--------|------------------|----| +|![](image/icon6.png)| 开始菜单 | 启动菜单,查看系统应用 | +|![](image/icon7.png)| 显示任务视图 | 显示多任务视图,切换多个桌面窗口 | +|![](image/icon8.png)| 文件管理器 | 文件及文件夹管理 | +|![](image/icon9.png)| 键盘 | 切换键盘输入法,输入语言 | +|![](image/icon10.png)| 麒麟天气 | 查看城市天气 | +|![](image/icon11.png)| 网络设置 | 设置网络连接 | +|![](image/icon12.png)| 通知中心 | 查看系统推送通知 | +|![](image/icon13.png)| 声音 | 调节声音大小 | +|![](image/icon14.png)| 夜间模式 | 切换系统夜间模式 | + +## 开始菜单 + +### 概述 + +开始菜单是![](image/icon15.png)使用系统的“起点”,查看并管理系统中已安装的所有应用,在菜单中使用分类导航或搜索功能可以快速定位需要的应用程序。 + +### 基本操作 + +#### 切换模式 + +菜单有全屏和小窗口两种模式。点击菜单界面右上角的图标来切换模式。 +两种模式均支持搜索应用、设置快捷方式等操作。 + +小窗口模式还支持快速打开文件管理器,控制中心和进入关机界面等功能。 + +![图 6 小窗口模式](image/6.png) + +![图 7 大窗口模式](image/7.png) + +#### 查找应用 + +在开始菜单中,可以使用鼠标滚轮或切换分类导航查找应用。如果已知应用名称,可直接在搜索框中输入应用名称或关键字快速定位。 + +#### 运行应用 + +对于已经创建了桌面快捷方式或固定到任务栏上的应用,可以通过以下途径来打开应用: + +双击桌面图标,或右键单击桌面图标选择打开。 + +直接点击任务栏上的应用图标,或右键单击任务栏上的应用图标选择打开。 + +单击打开开始菜单后,直接点击应用图标打开,或右键单击应用图标选择打开。 + +## 安装和卸载 + +### 概述 + +此操作系统提供便捷的应用软件安装卸载方式,可根据您的需求自主进行安装卸载操作。 + +### 基本操作 + +#### 安装应用 + +(1)软件商店安装 + +银河麒麟桌面操作系统自带麒麟软件商店,可支持一键下载安装应用,详情可参考3.2麒麟软件商店。 + +(2)安装器安装 + +方法一:双击所需要安装的deb,直接会弹窗安装器界面; + +方法二:通过终端敲命令,kylin-installer + 包名,例如麒麟影音kylin-installer + +kylin-video_3.1.0-71_amd64.deb,会弹出安装界面; + +上述所说的弹出安装界面,安装器会根据包的属性,自动识别往兼容环境中安装还是往系统里面安装,直接点 +击安装即可; + +注:当安装完成后,才可以进行下一个包的安装; + +#### 卸载应用 + +对于不再使用的应用,可以通过集中方式将其卸载以节省硬盘空间。 + +1. 在**“开始菜单”**中,右键单击应用图标。 + +2. 点击**“卸载”**。 + +软件商店卸载 + +打开软件商店点击“我的”,进入“应用卸载”,选择需要卸载的应用点击卸载即可。 + +## 侧边栏 + +### 概述 + +侧边栏包含三个模块,通知中心、剪切板、小插件。 + +![图 8 侧边栏](image/8.png) + +### 打开方式 +点击任务栏右下角“侧边栏”![](image/icon16.png)图标或通过快捷键“win+A”打开侧边栏。 + +### 基本操作 + +#### 通知中心 + +默认显示重要通知,点击右上角图标可以切换不同通知页签,点击设置按钮可以设置“来自应用和其他发送者的通知”,可以按照需求自行选定允许通知的软件。 + +![图 9 通知中心](image/9.png) + +#### 剪切板 + +近期复制的文字或者截图会显示在此处,如果需要可以自行查找或者选定需要粘贴的内容。 + +![图 10 通知中心](image/10.png) + +#### 小插件 + +默认包含三个便捷的小插件闹钟、便签贴、服务与支持,可以快速启动。 + +![图 11 小插件](image/11.png) + +## 显示任务视图 + +### 概述 + +通过显示任务视图可以切换使用多个桌面,以便对桌面窗口进行分组管理,窗口管理器可以在不同的工作区内展示不同的窗口内容。 + +![图 12 显示任务视图](image/12.png) + +### 打开方式 +点击任务栏“显示任务视图”![](image/icon17.png)图标,可以打开任务视图窗口管理,选择想要的桌面即可实现桌面窗口切换。 + +## 日历 + +### 概述 + +您可以通过日历功能查阅日期,了解节假日信息,查阅黄历禁忌。 + +### 打开方式 + +点击桌面右下角时间与日期即可弹出日历界面。 + +![图 13 日历](image/13.png) + +### 基本操作 + +- 月份切换:点击上下按钮即可实现单个月份跳转。 + +![图 14 月份切换](image/14.png) + +- 年份切换:点击“年”按钮即可跳转到选择年份日历页面,选择后实现相应跳转。 + +![图 15 年份切换](image/15.png) + +- 月份跳转:点击“月”按钮即可跳转到选择月份日历页面,选择后实现相应跳转。 + +![图 16 月份切换](image/16.png) + +- 今天跳转:点击“今天”按钮即可实现跳转到今天日期日历页面。 + +![图 17 今天跳转](image/16.png) + +- 黄历禁忌折叠:点击禁忌折叠按钮即可实现对黄历禁忌的折叠和展开。 + +![图 17 黄历展开](image/18.png) + +## 触控交互 + +### 概述 + +系统提供多场景的桌面触控交互,若您的设备支持触控功能,可使用多种手势操作完成与桌面的交互。 + +### 基本操作 + +#### 基础手势操作 + +基础手势操作如下表所示: + +| 基础手势操作 | 图示 | 操作说明 | +|--------------------------------|----------------------------------------|------| +|点击| ![](image/icon18.png) | 手指轻点触控设备,触发功能,例如:选择对象、打开菜单栏、执行按钮命令等 | +|双击| ![](image/icon19.png) | 手指快速点击两次触控设备,触发功能,例如:打开桌面应用、打开文件夹/文件、选择文字等 | +|滑动| ![](image/icon20.png) | 滑动以连续滚动列表和页面、切换页面/对象、滑动以调节滑动条数值 | +|拖动| ![](image/icon21.png) | 动对象移动其位置,例如:移动窗口、移动文件/图标位置
拖动进行批量操作,例如:框选文字等内容、框选图标等、刷新页面 | +|长按| ![](image/icon22.png) | 手指长按某个元素触发功能,例如:显示弹出菜单栏、右键菜单栏、多选、选择文字等 | +|捏合| ![](image/icon23.png) | 两个手指按住屏幕向外展开以放大内容,向内收拢以缩小内容,例如:网页、图片 | + +#### 触控交互手势 + +- 打开多任务视图 + +输入设备:触摸屏/平板,交互手势:单指从屏幕底部边缘向上滑动。 + +输入设备:触控板,交互手势:三指向上滑动。 + +- 切换应用视图 + +输入设备:触摸屏/平板,交互手势:四指左右滑动,手指左滑或者右滑显示所 + +有窗口,手指不离开触控设备继续左右滑动选择窗口,手指松开为切换成功。 + +输入设备:触控板,交互手势:三指左右滑动。 + +- 切换桌面 + +输入设备:触控板,交互手势:四指左右滑动,向左滑,切换右侧桌面,向右滑,切换左侧桌面。 + +显示桌面 + +输入设备:触摸屏/平板,交互手势:单指从屏幕顶端向下滑动。 + +输入设备:触控板,交互手势:三指向下滑。 + +- 显示菜单栏 + +输入设备:触摸屏/平板,交互手势:单指长按,手指接触时间≥800ms。 + +输入设备:触控板,交互手势:双指单击。 + +- 进入全局搜索 + +输入设备:触摸屏/平板,交互手势:四指屏幕任意位置下滑。 + +输入设备:触控板,交互手势:三指单击。 + +- 呼出侧边栏 + +输入设备:触摸屏/平板,交互手势:单指屏幕右侧滑入。 + +输入设备:触控板,交互手势:四指点击屏幕任意位置。 + +- 显示任务栏 + +输入设备:触摸屏/平板,交互手势:单指屏幕底部短距离上滑,显示任务栏。 + +- 打开/切换对象 + +输入设备:触控板/触摸屏/平板,交互手势:单指单击(打开菜单栏、侧边栏;选择工具栏、任务栏、应用内其他功能;点击按钮/开关)。 + +输入设备:触控板/触摸屏,交互手势:单指双击(启动应用、文件、文件夹等)。 + +- 缩放页面 + +输入设备:触控板/触摸屏/平板,交互手势:双指捏合放大或者缩小。 + +- 拖拽对象 + +输入设备:触摸屏/平板,交互手势:单指按住拖拽,时间:接触屏幕300ms-800ms,短按拖动。 + +输入设备:触控板,交互手势:单指按住拖拽。 + +- 滑动列表&页面&对象 + +输入设备:触摸屏/平板,交互手势:单双指均可接触屏幕上下/左右滑动,接触屏幕≤300ms并滑动。 + +输入设备:触控板,交互手势:双指上下滑动(向上滑动,页面向上;向下滑动,页面向下),双指左右滑动(向左滑动,页面向左;向右滑动,页面向右) 。 + diff --git a/data/help.png b/data/help.png new file mode 100644 index 0000000..d1bd017 Binary files /dev/null and b/data/help.png differ diff --git a/data/icon-go-top.png b/data/icon-go-top.png new file mode 100644 index 0000000..99f37e0 Binary files /dev/null and b/data/icon-go-top.png differ diff --git a/data/mate-notification-properties.png b/data/mate-notification-properties.png new file mode 100644 index 0000000..0e1ae1f Binary files /dev/null and b/data/mate-notification-properties.png differ diff --git a/data/ukui-down-symbolic.svg b/data/ukui-down-symbolic.svg new file mode 100644 index 0000000..1720fa7 --- /dev/null +++ b/data/ukui-down-symbolic.svg @@ -0,0 +1,10 @@ + + + + + + diff --git a/data/ukui-end-symbolic.svg b/data/ukui-end-symbolic.svg new file mode 100644 index 0000000..3088a43 --- /dev/null +++ b/data/ukui-end-symbolic.svg @@ -0,0 +1,10 @@ + + + + + + diff --git a/doc/classfication b/doc/classfication new file mode 100644 index 0000000..515883d --- /dev/null +++ b/doc/classfication @@ -0,0 +1,6 @@ +手册分类四类: +1、系统:基础桌面环境(包括桌面、开始菜单、任务栏、登录、锁屏、冒泡通知、indicate、我的电脑、系统信息、工作区、窗口管理器、窗口切换、系统快捷键)、安卓兼容、控制面板 +2、应用:文件管理器、软件中心、麒麟影音、麒麟刻录、麒麟助手、麒麟传书、麒麟安全管理工具、麒麟生物识别、备份还原、音乐播放器、图像查看器、更新管理器、截图工具、FTP客户端、远程桌面、桌面共享、邮件客户端、计算器、蓝牙管理器、分区编辑器、屏幕键盘、茄子、打印机、扫描易、系统监视器、解压缩工具、音频录制器、终端 +3、基础开发环境:麒麟SDK、qtcretor、eclipse等 +4、软硬件适配列表: +打印机适配列表、显卡适配列表、扫描易适配列表、手写板适配列表等 diff --git a/doc/design/Body.png b/doc/design/Body.png new file mode 100644 index 0000000..b8f05cc Binary files /dev/null and b/doc/design/Body.png differ diff --git a/doc/design/lanhuapp_link b/doc/design/lanhuapp_link new file mode 100644 index 0000000..7979b6c --- /dev/null +++ b/doc/design/lanhuapp_link @@ -0,0 +1 @@ +https://lanhuapp.com/web/#/item/project/board/detail?pid=6478a94a-9018-4069-98d6-0948925cf171&project_id=6478a94a-9018-4069-98d6-0948925cf171&image_id=b47f9025-4cc4-4d01-a827-a4cc16acfc9b diff --git a/doc/design/manuel-home--minimize-window.png b/doc/design/manuel-home--minimize-window.png new file mode 100644 index 0000000..4227ae9 Binary files /dev/null and b/doc/design/manuel-home--minimize-window.png differ diff --git a/doc/design/manuel-home-display.png b/doc/design/manuel-home-display.png new file mode 100644 index 0000000..c2b1e05 Binary files /dev/null and b/doc/design/manuel-home-display.png differ diff --git a/doc/design/manuel-home-fullscreen2.png b/doc/design/manuel-home-fullscreen2.png new file mode 100644 index 0000000..7dc764b Binary files /dev/null and b/doc/design/manuel-home-fullscreen2.png differ diff --git a/doc/design/manuel-home-minimize-display.png b/doc/design/manuel-home-minimize-display.png new file mode 100644 index 0000000..dd74f46 Binary files /dev/null and b/doc/design/manuel-home-minimize-display.png differ diff --git a/doc/develope-record.docx b/doc/develope-record.docx new file mode 100644 index 0000000..46e36a4 Binary files /dev/null and b/doc/develope-record.docx differ diff --git a/doc/kylin-backup0106.docx b/doc/kylin-backup0106.docx new file mode 100644 index 0000000..1f59c6f Binary files /dev/null and b/doc/kylin-backup0106.docx differ diff --git a/doc/kylin-video.docx b/doc/kylin-video.docx new file mode 100644 index 0000000..0427fd8 Binary files /dev/null and b/doc/kylin-video.docx differ diff --git a/doc/manuel-correspond.xlsx b/doc/manuel-correspond.xlsx new file mode 100644 index 0000000..4e7fd64 Binary files /dev/null and b/doc/manuel-correspond.xlsx differ diff --git a/doc/manuel-format.doc b/doc/manuel-format.doc new file mode 100644 index 0000000..eeb6e0f Binary files /dev/null and b/doc/manuel-format.doc differ diff --git a/doc/manuel-frame.doc b/doc/manuel-frame.doc new file mode 100644 index 0000000..f4c922a Binary files /dev/null and b/doc/manuel-frame.doc differ diff --git a/doc/software-center-manuel.doc b/doc/software-center-manuel.doc new file mode 100644 index 0000000..ec13eea Binary files /dev/null and b/doc/software-center-manuel.doc differ diff --git a/icon/22x22/kylin-user-guide.png b/icon/22x22/kylin-user-guide.png new file mode 100644 index 0000000..c30d428 Binary files /dev/null and b/icon/22x22/kylin-user-guide.png differ diff --git a/icon/32x32/kylin-user-guide.png b/icon/32x32/kylin-user-guide.png new file mode 100644 index 0000000..6eb2155 Binary files /dev/null and b/icon/32x32/kylin-user-guide.png differ diff --git a/icon/56x56/kylin-user-guide.png b/icon/56x56/kylin-user-guide.png new file mode 100644 index 0000000..b98199d Binary files /dev/null and b/icon/56x56/kylin-user-guide.png differ diff --git a/icon/CMakeLists.txt b/icon/CMakeLists.txt new file mode 100644 index 0000000..63b82dd --- /dev/null +++ b/icon/CMakeLists.txt @@ -0,0 +1,4 @@ +## Installation +install(FILES 22x22/kylin-user-guide.png DESTINATION /usr/share/icons/hicolor/22x22/apps) +install(FILES 32x32/kylin-user-guide.png DESTINATION /usr/share/icons/hicolor/32x32/apps) +install(FILES 56x56/kylin-user-guide.png DESTINATION /usr/share/icons/hicolor/56x56/apps) diff --git a/man/kylin-user-guide.1 b/man/kylin-user-guide.1 new file mode 100644 index 0000000..06adce1 --- /dev/null +++ b/man/kylin-user-guide.1 @@ -0,0 +1,39 @@ +.\" kylin-user-guide manual page +.\" +.\" Copyright (C) 2020, KylinSoft Co., Ltd. +.\" +.\" This program is free software: you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License as published by +.\" the Free Software Foundation, either version 3 of the License, or +.\" (at your option) any later version. +.\" +.\" This program is distributed in the hope that it will be useful, +.\" but WITHOUT ANY WARRANTY; without even the implied warranty of +.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +.\" GNU General Public License for more details. +.\" +.\" You should have received a copy of the GNU General Public License +.\" along with this program. If not, see . +.\" +.TH KYLIN-USER-GUIDE 1 "26 Feb 2020" "UKUI Desktop Environment" +.\"Please adjust this date whenever revising the manpage. +.\" +.SH "NAME" +kylin-user-guide \- The UKUI Desktop manual +.SH "SYNOPSIS" +.P +This program also accepts the standard GTK options. +.SH "BUGS" +.SS Should you encounter any bugs, they may be reported at: +http://github.com/ubuntukylin/kylin-user-guide/issues +.SH "AUTHORS" +.SS kylin-user-guide is maintained by: +.nf +xiaoyiwu +.fi +.SS This Man Page has been updated for the UKUI Desktop Environment by: +xiaoyiwu (2020) +.SH "SEE ALSO" +.SS Further information may also be available at: +https://github.com/ubuntukylin/kylin-user-guide +.P diff --git a/man/user-guide-daemon.1 b/man/user-guide-daemon.1 new file mode 100644 index 0000000..cf006cc --- /dev/null +++ b/man/user-guide-daemon.1 @@ -0,0 +1,39 @@ +.\" kylin-user-guide manual page +.\" +.\" Copyright (C) 2020, KylinSoft Co., Ltd. +.\" +.\" This program is free software: you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License as published by +.\" the Free Software Foundation, either version 3 of the License, or +.\" (at your option) any later version. +.\" +.\" This program is distributed in the hope that it will be useful, +.\" but WITHOUT ANY WARRANTY; without even the implied warranty of +.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +.\" GNU General Public License for more details. +.\" +.\" You should have received a copy of the GNU General Public License +.\" along with this program. If not, see . +.\" +.TH KYLIN-USER-GUIDE 1 "26 Feb 2020" "UKUI Desktop Environment" +.\" Please adjust this date whenever revising the manpage. +.\" +.SH "NAME" +kylin-user-guide \- The UKUI Desktop manual +.SH "SYNOPSIS" +.P +This program also accepts the standard GTK options. +.SH "BUGS" +.SS Should you encounter any bugs, they may be reported at: +http://github.com/ubuntukylin/kylin-user-guide/issues +.SH "AUTHORS" +.SS kylin-user-guide is maintained by: +.nf +xiaoyiwu +.fi +.SS This Man Page has been updated for the UKUI Desktop Environment by: +xiaoyiwu (2020) +.SH "SEE ALSO" +.SS Further information may also be available at: +http://github.com/ubuntukylin/kylin-user-guide +.P diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..f53a660 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,115 @@ +project(kylin-user-guide C CXX) + +#add_subdirectory(ipc) +#add_subdirectory(resources) + +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_C_STANDARD 11) +set(CMAKE_C_STANDARD_REQUIRED ON) +set(CMAKE_INCLUDE_CURRENT_DIR ON) +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) +set(KF5_MIN_VERSION "5.66.0") + +#cmake -D CMAKE_BUILD_TYPE=Debug +#if (CMAKE_BUILD_TYPE MATCHES Debug) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Wall -Werror -Wextra") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -Werror -Wextra -fno-exceptions") + # Enable Qt builtin debug mode + add_definitions("-DQT_MESSAGELOGCONTEXT") +#else() +# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O2 -Wl,-O1 -Wl,--gc-sections") +# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O2 -Wl,-O1 -Wl,--gc-sections") +#endif() + +find_package(PkgConfig REQUIRED) +find_package(Qt5Core REQUIRED) +find_package(Qt5DBus REQUIRED) +find_package(Qt5Gui REQUIRED) +find_package(Qt5LinguistTools) +find_package(Qt5Sql REQUIRED) +find_package(Qt5Widgets REQUIRED) +find_package(Qt5LinguistTools REQUIRED) +#find_package(Qt5WebChannel REQUIRED) +find_package(Qt5WebKitWidgets REQUIRED) +#find_package(Qt5WebEngineWidgets REQUIRED) +#pkg_search_module(QCef REQUIRED libqcef) +#include_directories(${QCef_INCLUDE_DIRS}) +#find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS +# WindowSystem +#) + +find_package(Qt5X11Extras REQUIRED) +find_package(gsettings-qt COMPONENTS) + +#https://blog.csdn.net/qq_38410730/article/details/102797448 +#add_custom_command(OUTPUT _update-search-db + # COMMAND pwd +# COMMAND ${CMAKE_CURRENT_BINARY_DIR}/generate-search-db + # WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/ +# ) +#add_custom_target(update-search-db DEPENDS _update-search-db) +#add_dependencies(update-search-db generate-search-db) + +EXECUTE_PROCESS(COMMAND arch OUTPUT_VARIABLE + DEB_BUILD_GNU_CPU OUTPUT_STRIP_TRAILING_WHITESPACE) + +#头文件目录 +set(HRADERS_QT +${Qt5DBus_INCLUDE_DIRS} +${Qt5Gui_INCLUDE_DIRS} +${Qt5Quick_INCLUDE_DIRS} +${Qt5QuickWidgets_INCLUDE_DIRS} +${Qt5Widgets_INCLUDE_DIRS} +${Qt5WebChannel_INCLUDE_DIRS} +#${Qt5WebEngineWidgets_INCLUDE_DIRS}//crash +${Qt5WebKitWidgets_INCLUDE_DIRS} +${gsettings-qt_INCLUDE_DIRS} +) + +#message(${HRADERS_QT}) +include_directories(${HRADERS_QT} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) +#库目录 +#link_directories("../../lib/Linux/${DEB_BUILD_GNU_CPU}" ) + +file(GLOB CC_FILES *.cpp common-tool/*.cpp ipc/*.cpp) + +QT5_ADD_RESOURCES(kylin-user-guide_QRC kylin-user-guide.qrc) + +add_executable(kylin-user-guide ${CC_FILES} ${kylin-user-guide_QRC}) + +SET(LIBS_PRIVATE "-lrt -ldl -lpthread") +SET(QT_LIBS + Qt5::Core + Qt5::DBus + Qt5::Sql + Qt5::Widgets +# Qt5::WebChannel + Qt5::WebKitWidgets + ) +# Qt5::WebEngineWidgets +message(${QT_LIBS}) +target_link_libraries(kylin-user-guide ${QT_LIBS} ${LIBS_PRIVATE} Qt5::X11Extras -lX11 -lgsettings-qt -lukui-log4qt) + +set(pkgLibdir /usr/lib/${DEB_BUILD_GNU_CPU}) +set(pkgbindir /usr/bin/) +set(pkgdatadir /usr/share/kylin-user-guide) + +add_subdirectory(daemon) +## Installation +#install(TARGETS kylin-user-guide DESTINATION ${CMAKE_INSTALL_PREFIX}/share/kylin-user-guide) +install(TARGETS kylin-user-guide DESTINATION ${pkgbindir}) + + +#lupdate -recursive . -target-language en_US -ts src/translation/kylin-user-guide_en_US.ts +file(GLOB TS_FILES "${CMAKE_CURRENT_SOURCE_DIR}/translation/*.ts") + + +# cmake -DUPDATE_TRANSLATIONS=yes +if (UPDATE_TRANSLATIONS) + qt5_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES}) +else() + qt5_add_translation(QM_FILES ${TS_FILES}) +endif() +add_custom_target(translations ALL DEPENDS ${QM_FILES}) +install(FILES ${QM_FILES} DESTINATION "/usr/share/kylin-user-guide/translations/") diff --git a/src/aboutwidget.cpp b/src/aboutwidget.cpp new file mode 100644 index 0000000..aee3e8e --- /dev/null +++ b/src/aboutwidget.cpp @@ -0,0 +1,158 @@ +#include "aboutwidget.h" +#include "xatom-helper.h" + +AboutWidget::AboutWidget(QWidget *parent): + QDialog(parent) +{ + this->setFixedSize(420,400); + + if(QGSettings::isSchemaInstalled("org.ukui.style")){ + settings = new QGSettings("org.ukui.style"); + connect(settings,&QGSettings::changed,this,&AboutWidget::gsettingsChange); + } + + // 添加窗管协议 + MotifWmHints hints; + hints.flags = MWM_HINTS_FUNCTIONS|MWM_HINTS_DECORATIONS; + hints.functions = MWM_FUNC_ALL; + hints.decorations = MWM_DECOR_BORDER; + XAtomHelper::getInstance()->setWindowMotifHint(this->winId(), hints); + + initUI(); +} + +AboutWidget::~AboutWidget() +{ + +} + +void AboutWidget::initUI() +{ + title_icon = new QLabel(this); + title_icon->setGeometry(8,8,24,24); + + title_name = new QLabel(this); + title_name->setGeometry(40,8,300,25); + title_name->setAlignment(Qt::AlignLeft|Qt::AlignVCenter); + + close_btn = new QPushButton(this); + close_btn->setIcon(QIcon::fromTheme("window-close-symbolic")); + close_btn->setProperty("isWindowButton", 0x2); + close_btn->setProperty("useIconHighlightEffect", 0x8); + close_btn->setFlat(true); + close_btn->setFocusPolicy(Qt::NoFocus); + close_btn->setToolTip(tr("Close")); + close_btn->setCheckable(false); +// close_btn->setCursor(QCursor(Qt::ArrowCursor)); + close_btn->setGeometry(386,4,30,30); + connect(close_btn,&QPushButton::clicked,this,&AboutWidget::close); + + app_icon = new QLabel(this); + app_icon->setGeometry(162,72,96,96); + + QFont font; + font.setPixelSize(18); + + app_name = new QLabel(this); + app_name->setGeometry(10,184,400,28); + app_name->setAlignment(Qt::AlignCenter); +// app_name->setFont(font); + + font.setPixelSize(14); + app_version = new QLabel(this); + app_version->setGeometry(10,224,400,24); + app_version->setAlignment(Qt::AlignCenter); +// app_version->setFont(font); + +// palette.setColor(QPalette::WindowText,QColor(89,89,89)); +// app_version->setPalette(palette); + + app_description = new QLabel(this); + app_description->setGeometry(32,260,356,60); + app_description->setAlignment(Qt::AlignTop|Qt::AlignHCenter); + app_description->setWordWrap(true); + + app_support = new QLabel(this); + app_support->setGeometry(32,330,356,60); + app_support->setAlignment(Qt::AlignHCenter); + app_support->setOpenExternalLinks(true); + app_support->setWordWrap(true); + + QPalette palette; + if(settings->get("styleName").toString() == "ukui-black"|| settings->get("styleName").toString() == "ukui-dark"){ + palette.setBrush(QPalette::Background, QBrush(QColor(29,29,31))); + palette.setBrush(QPalette::Text, QBrush(QColor(Qt::white))); + app_support->setText(tr("Service & Support : support@kylinos.cn")); + }else{ + palette.setBrush(QPalette::Background, QBrush(QColor(Qt::white))); + palette.setBrush(QPalette::Text, QBrush(QColor(29,29,31))); + app_support->setText(tr("Service & Support : support@kylinos.cn")); + } + this->setPalette(palette); + +} + +void AboutWidget::setAppIcon(const QString &text) +{ + if(text.isEmpty() || text == ""){ + qDebug() << Q_FUNC_INFO << "arg is empty!!!"; + return; + }else{ + if(QIcon::hasThemeIcon(text)){ + title_icon->setPixmap(QIcon::fromTheme(text).pixmap(24,24)); + app_icon->setPixmap(QIcon::fromTheme(text).pixmap(96,96)); + }else{ + qDebug() << Q_FUNC_INFO << "No icon exists: " << text << " !!!"; + } + } +} + +void AboutWidget::setAppName(const QString &text) +{ + if(text.isEmpty() || text == ""){ + qDebug() << Q_FUNC_INFO << "APP name should not be empty!!!"; + return; + }else{ + title_name->setText(text); + title_name->update(); + app_name->setText(text); + } +} + +void AboutWidget::setAppVersion(const QString &text) +{ + if(text.isEmpty() || text == ""){ + qDebug() << Q_FUNC_INFO << "APP version should not be empty!!!"; + return; + }else{ + app_version->setText(tr("VERSION")+": "+text); + } +} + +void AboutWidget::setAppDescription(const QString &text) +{ + app_description->setText(text); +} + +void AboutWidget::gsettingsChange(const QString &key) +{ + QPalette palette; + if(key == "styleName"){ + if(settings->get("styleName").toString() == "ukui-black"|| settings->get("styleName").toString() == "ukui-dark"){ + palette.setBrush(QPalette::Background, QBrush(QColor(29,29,31))); + palette.setBrush(QPalette::Text, QBrush(QColor(Qt::white))); + app_support->setText(tr("Service & Support : support@kylinos.cn")); + }else{ + palette.setBrush(QPalette::Background, QBrush(QColor(Qt::white))); + palette.setBrush(QPalette::Text, QBrush(QColor(29,29,31))); + app_support->setText(tr("Service & Support : support@kylinos.cn")); + } + } + this->setPalette(palette); +} + +//void AboutWidget::closeEvent(QCloseEvent *event) +//{ +// Q_UNUSED(event); +// qDebug() << Q_FUNC_INFO; +//} diff --git a/src/aboutwidget.h b/src/aboutwidget.h new file mode 100644 index 0000000..60da4e9 --- /dev/null +++ b/src/aboutwidget.h @@ -0,0 +1,54 @@ +#ifndef ABOUTWIDGET_H +#define ABOUTWIDGET_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class AboutWidget : public QDialog +{ + Q_OBJECT +public: + explicit AboutWidget(QWidget *parent = nullptr); + ~AboutWidget(); + + void initUI(); + void setAppIcon(const QString &text); + void setAppName(const QString &text); + void setAppVersion(const QString &text); + void setAppDescription(const QString &text); +public slots: + void gsettingsChange(const QString& key); + +protected: +// void closeEvent(QCloseEvent *event); + +private: + QGSettings *settings = nullptr; + + QVBoxLayout *main_layout = nullptr; + + QLabel *title_icon = nullptr; + QLabel *title_name = nullptr; + QPushButton *close_btn = nullptr; + + QLabel *app_icon = nullptr; + QLabel *app_name = nullptr; + QLabel *app_version = nullptr; + QLabel *app_description = nullptr; + QLabel *app_support = nullptr; +}; + +#endif // ABOUTWIDGET_H diff --git a/src/common-tool/comm_func.h b/src/common-tool/comm_func.h new file mode 100644 index 0000000..973a0b2 --- /dev/null +++ b/src/common-tool/comm_func.h @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2020, KylinSoft Co., Ltd. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once +#include + +#define APPLICATION_NAME "用户手册" +#define APPLICATION_NAME_EN "Manual" +#define GUIDE_WINDOW_TITLE "用户手册" + +#define SERVICE_NAME_SIZE 64 +//daemon监听app的调用传给GUI +#define KYLIN_USER_GUIDE_PATH "/" +#define KYLIN_USER_GUIDE_SERVICE "com.kylinUserGuide.hotel" +#define KYLIN_USER_GUIDE_INTERFACE "com.guide.hotel" + +#define KYLIN_USER_GUIDE_GUI_PATH "/" +#define KYLIN_USER_GUIDE_GUI_SERVICE "com.kylinUserGuideGUI.hotel" +#define KYLIN_USER_GUIDE_GUI_INTERFACE "com.guide.hotel" + +#define SYSTEM_FILE "/etc/os-release" +#define OS_RELEASE "/etc/os-release" +#define LSB_RELEASE "/etc/lsb-release" + +#define LOCAL_FILE_PATH "/usr/share/kylin-user-guide/data/guide/" +#define LOCAL_URL_PATH "file://///usr/share/kylin-user-guide/web/" + + +#define LOCAL_FILE_PATH_UBUNTUKYLIN "/usr/share/kylin-user-guide/data/guide/" +#define LOCAL_URL_PATH_UBUNTUKYLIN "file://///usr/share/kylin-user-guide/web/" + +extern QString gLang; +extern QString gStartShowApp; diff --git a/src/daemon/CMakeLists.txt b/src/daemon/CMakeLists.txt new file mode 100644 index 0000000..289d94f --- /dev/null +++ b/src/daemon/CMakeLists.txt @@ -0,0 +1,9 @@ +#daemon ... +file(GLOB CC_FILES *.cpp ../common-tool/*.cpp ipc/*.cpp) + +add_executable(user-guide-daemon ${CC_FILES}) +set_target_properties(user-guide-daemon PROPERTIES AUTOMOC TRUE) + +target_link_libraries(user-guide-daemon ${QT_LIBS}) + +install(TARGETS user-guide-daemon RUNTIME DESTINATION ${pkgbindir}) diff --git a/src/daemon/daemon-main.cpp b/src/daemon/daemon-main.cpp new file mode 100644 index 0000000..79099e4 --- /dev/null +++ b/src/daemon/daemon-main.cpp @@ -0,0 +1,116 @@ +/* + * Copyright (C) 2020, KylinSoft Co., Ltd. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "daemon_main_controller.h" +#include "common-tool/comm_func.h" + +QString lang = "zh_CN"; +#define BUFF_SIZE 128 +static void crashHandler(int sig) +{ + signal(sig, SIG_IGN); + int size; + char **strings; + int i = 0; + + char path[BUFF_SIZE] = {0}; + static char *homePath = getenv("HOME"); + snprintf(path, BUFF_SIZE, "%s/.config/kylin-user-guide", homePath); + strcat(path,"/daemon-crash.log"); + FILE *fp = fopen(path,"a+"); + + void *array[20]; + size = backtrace (array, 20); + strings = (char **)backtrace_symbols (array, size); + + char logStr[BUFF_SIZE] = "0"; + sprintf(logStr,"!!!--- received signal: %d=%s! Stack trace\n", sig,strsignal(sig)); + fwrite(logStr,sizeof(char),BUFF_SIZE,fp); + for (i = 0; i < size; i++) + { + memset(logStr,0,BUFF_SIZE); + sprintf(logStr,"%d %s \n",i,strings[i]); + fwrite(logStr,sizeof(char),BUFF_SIZE,fp); + } + + fflush(fp); + fclose(fp); + free (strings); + + exit(128 + sig); +} + +int main(int argc, char *argv[]) +{ +#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)) + QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); + QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); +#endif + + QApplication app(argc, argv); + + QCoreApplication::setApplicationName("ubuntukylin user guide daemon"); + QCoreApplication::setApplicationVersion("0.0.0.0001"); + QStringList args = app.arguments(); + + if(signal(SIGCHLD,SIG_IGN)==SIG_ERR)//忽略子进程已经停止或退出 + { + //注册SIGSEGV信号失败 + perror("signal error"); + } + if(signal(SIGSEGV,crashHandler)==SIG_ERR)//无效内存段访问 + { + //注册SIGSEGV信号失败 + perror("signal error"); + } + if(signal(SIGILL,crashHandler)==SIG_ERR)//非法指令 + { + //注册SIGILL信号失败 + perror("signal error"); + } + if(signal(SIGHUP,crashHandler)==SIG_ERR)//系统挂断 + { + //注册SIGHUP信号失败 + perror("signal error"); + } + if(signal(SIGABRT,crashHandler)==SIG_ERR)//进程停止运行 + { + //注册SIGABRT信号失败 + perror("signal error"); + } + + app.setApplicationName(APPLICATION_NAME); +// app.setQuitOnLastWindowClosed(true); + + MainController *ctrl = MainController::self(); + app.exec(); + + delete ctrl; + return 0; + +} diff --git a/src/daemon/daemon_main_controller.cpp b/src/daemon/daemon_main_controller.cpp new file mode 100644 index 0000000..0c392ed --- /dev/null +++ b/src/daemon/daemon_main_controller.cpp @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2020, KylinSoft Co., Ltd. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "daemon_main_controller.h" +#include "ipc/daemon_ipc_dbus.h" + +MainController* MainController::mSelf = 0; +MainController* MainController::self() +{ + if (!mSelf) { + mSelf = new MainController; + } + return mSelf; +} + +MainController::MainController() +{ + daemonIpcDbus = new DaemonIpcDbus; + daemonIpcDbus->init(); +} + + +MainController::~MainController() +{ + +} + diff --git a/src/daemon/daemon_main_controller.h b/src/daemon/daemon_main_controller.h new file mode 100644 index 0000000..b3bf5d6 --- /dev/null +++ b/src/daemon/daemon_main_controller.h @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2020, KylinSoft Co., Ltd. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include +#include +#include +#include "ipc/daemon_ipc_dbus.h" + +class MainController : public QObject +{ + Q_OBJECT +public: + static MainController* self(); + virtual ~MainController(); +private: + explicit MainController(); +private: + static MainController *mSelf; + DaemonIpcDbus *daemonIpcDbus; +public: +}; + diff --git a/src/daemon/ipc/daemon_ipc_dbus.cpp b/src/daemon/ipc/daemon_ipc_dbus.cpp new file mode 100644 index 0000000..842e118 --- /dev/null +++ b/src/daemon/ipc/daemon_ipc_dbus.cpp @@ -0,0 +1,158 @@ +/* + * Copyright (C) 2020, KylinSoft Co., Ltd. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "daemon_ipc_dbus.h" +#include "main_controller.h" + +DaemonIpcDbus::DaemonIpcDbus() +{ + +} + +void DaemonIpcDbus::init() +{ + if(daemonIsNotRunning()) + { + creatDBusService(); + qDebug()<<"--------------creatDBusService"; + } + else + { + qDebug()<<"Daemon is Running"; + exit(0); + } + lastTime = QTime::currentTime(); +} + +DaemonIpcDbus::~DaemonIpcDbus() +{ + +} + +void DaemonIpcDbus::creatDBusService() +{ + // 用于建立到session bus的连接 + QDBusConnection bus = QDBusConnection::sessionBus(); + // 在session bus上注册名为"com.kylin_user_guide.hotel"的service + + char service_name[SERVICE_NAME_SIZE]; + memset(service_name, 0, SERVICE_NAME_SIZE); + snprintf(service_name, SERVICE_NAME_SIZE, "%s_%d",KYLIN_USER_GUIDE_SERVICE,getuid()); + + if (!bus.registerService(service_name)) { //注意命名规则-和_ + qDebug() << bus.lastError().message(); + exit(1); + } + // "QDBusConnection::ExportAllSlots"表示把类Hotel的所有Slot都导出为这个Object的method + bus.registerObject("/", this ,QDBusConnection::ExportAllSlots); +} + +int DaemonIpcDbus::daemonIsNotRunning() +{ + char service_name[SERVICE_NAME_SIZE]; + memset(service_name, 0, SERVICE_NAME_SIZE); + snprintf(service_name, SERVICE_NAME_SIZE, "%s_%d",KYLIN_USER_GUIDE_SERVICE,getuid()); + QDBusConnection conn = QDBusConnection::sessionBus(); + if (!conn.isConnected()) + return 0; + + QDBusReply reply = conn.interface()->call("GetNameOwner", service_name); + return reply.value() == ""; +} + +int DaemonIpcDbus::guiIsNotRunning() +{ + char service_name[SERVICE_NAME_SIZE]; + memset(service_name, 0, SERVICE_NAME_SIZE); + snprintf(service_name, SERVICE_NAME_SIZE, "%s_%d",KYLIN_USER_GUIDE_GUI_SERVICE,getuid()); + QDBusConnection conn = QDBusConnection::sessionBus(); + if (!conn.isConnected()) + return 0; + + QDBusReply reply = conn.interface()->call("GetNameOwner", service_name); + return reply.value() == ""; +} + +void DaemonIpcDbus::startGUI(QString appName) +{ + QString cmd = "/usr/bin/kylin-user-guide"; + QStringList list; + list<<"-A"<lastTime.msecsTo(QTime::currentTime()); + + if(appName == QString::fromLocal8Bit("peony")) + interval-=4000; + if(appName.contains("ukui-control-center",Qt::CaseInsensitive)) + interval-=10000; + + qDebug()<<"interval = "<. + */ + +#ifndef __DAEMON_IPC_DBUS_H__ +#define __DAEMON_IPC_DBUS_H__ + +#include +#include +#include "common-tool/comm_func.h" + +class DaemonIpcDbus : public QObject +{ + Q_OBJECT + Q_CLASSINFO("D-Bus Interface", KYLIN_USER_GUIDE_INTERFACE) +public: + DaemonIpcDbus(); + void init(); + virtual ~DaemonIpcDbus(); +private: + void creatDBusService(); + int daemonIsNotRunning(); + int guiIsNotRunning(); + void startGUI(QString ); + QTime lastTime; + +public slots: + void showGuide(QString appName); + void showGuide(int i); +}; + +#endif diff --git a/src/data/kylin-user-guide-daemon.desktop b/src/data/kylin-user-guide-daemon.desktop new file mode 100644 index 0000000..e7de353 --- /dev/null +++ b/src/data/kylin-user-guide-daemon.desktop @@ -0,0 +1,18 @@ +[Desktop Entry] +Name=KYLIN USER GUIDE +Name[zh_CN]=kylin-user-guide.desktop +Name[bo_CN]=སྤྱོད་མཁན་ལག་དེབ། +GenericName=kylin user guide +GenericName[zh_CN]=用户手册 +GenericName[bo_CN]=སྤྱོད་མཁན་ལག་དེབ། +Comment=kylin user guide +Comment[zh_CN]=银河麒麟用户手册 +Comment[bo_CN]=ཆི་ལིན་སྤྱོད་མཁན་ཡིག་དེབ། +Keywords=guide; +Exec=/usr/bin/user-guide-daemon +Icon=kylin-user-guide +Terminal=false +Type=Application +NoDisplay=true +Categories=System;Utility; +StartupNotify=false diff --git a/src/data/kylin-user-guide.desktop b/src/data/kylin-user-guide.desktop new file mode 100644 index 0000000..85445b0 --- /dev/null +++ b/src/data/kylin-user-guide.desktop @@ -0,0 +1,19 @@ +[Desktop Entry] +Name=Manual +Name[zh_CN]=用户手册 +Name[bo_CN]=སྤྱོད་མཁན་ལག་དེབ། +GenericName=Manual +GenericName[zh_CN]=用户手册 +GenericName[bo_CN]=སྤྱོད་མཁན་ལག་དེབ། +Comment=Manua; +Comment[zh_CN]=麒麟用户手册 +Comment[bo_CN]=ཆི་ལིན་སྤྱོད་མཁན་ཡིག་དེབ། +Keywords=guide; +Exec=/usr/bin/kylin-user-guide -A %u +Icon=kylin-user-guide +Terminal=false +Type=Application +NoDisplay=false +StartupNotify=true +Categories=UKUI;Qt;Documentation;Utility; +MimeType=x-scheme-handler/ghelp;x-scheme-handler/help;x-scheme-handler/info;x-scheme-handler/man; diff --git a/src/guide-widget.cpp b/src/guide-widget.cpp new file mode 100644 index 0000000..973a02f --- /dev/null +++ b/src/guide-widget.cpp @@ -0,0 +1,1227 @@ +/* + * Copyright (C) 2020, KylinSoft Co., Ltd. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "guide-widget.h" +#include "common-tool/comm_func.h" +#include "xatom-helper.h" + +GuideWidget::GuideWidget(QWidget *parent) :QWidget(parent) +{ + this->isTopLevel(); + this->setMinimumSize(835,650); + + if(QGSettings::isSchemaInstalled("org.ukui.style")){ + settings = new QGSettings("org.ukui.style"); + connect(settings,&QGSettings::changed,this,&GuideWidget::slot_SettingsChange); + } + + // 添加窗管协议 + MotifWmHints hints; + hints.flags = MWM_HINTS_FUNCTIONS|MWM_HINTS_DECORATIONS; + hints.functions = MWM_FUNC_ALL; + hints.decorations = MWM_DECOR_BORDER; + // hints.setWindowBorderRadius(this->winId(),12,12,12,12); + // hints.decorations = + XAtomHelper::getInstance()->setWindowMotifHint(this->winId(), hints); + + //去掉窗口管理器后设置边框不生效了,所以下面通过背景图标提供边框,并且支持最小化。 + + // QPalette palette; + // if(settings->get("styleName").toString() == "ukui-black"|| settings->get("styleName").toString() == "ukui-dark"){ + // palette.setBrush(QPalette::Background, QBrush(QColor(29,29,31))); + // // palette.setBrush(QPalette::Text, QBrush(QColor(Qt::white))); + // palette.setBrush(QPalette::Text, QBrush(QColor(Qt::red))); + + // }else{ + // //浅色模式 背景灰 字体黑 + // palette.setBrush(QPalette::Background, QBrush(QColor(Qt::red))); + // palette.setBrush(QPalette::Text, QBrush(QColor(29,29,31))); + // } + // palette.setBrush(QPalette::Background, QBrush(QColor(Qt::red))); + // palette.setBrush(QPalette::Text, QBrush(QColor(29,29,31))); + // this->setPalette(palette); + // this->setAutoFillBackground(true); +// desktop = QApplication::desktop(); + // QRect rect = QGuiApplication::screens().at(0)->availableGeometry(); + // this->move((rect.bottomRight().x()-this->width())/2,(rect.bottomRight().y()-this->height())/2); + + initSettings(); + initUI(); + getDirAndPng(); +} + +void GuideWidget::paintEvent(QPaintEvent *event) +{ +// QPainter painter(this); +// painter.setRenderHint(QPainter::Antialiasing); // 反锯齿; +// painter.setBrush(QBrush(Qt::white)); +// painter.setPen(QColor(79,79,79)); +// QRect rect = this->rect(); +//// qDebug()<<"====" <rect() << rect.width() << rect.height(); +// rect.setWidth(rect.width()-2); +// rect.setHeight(rect.height()-2); +// painter.drawRoundedRect(rect, 10, 10); + +// QStyleOption opt; +// opt.init(this); +// style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this); +// //也可用QPainterPath 绘制代替 painter.drawRoundedRect(rect, 15, 15); +// { +// QPainterPath painterPath; +// painterPath.addRoundedRect(rect, 15, 15); +// p.drawPath(painterPath); +// } + QWidget::paintEvent(event); +} + +void GuideWidget::resizeEvent(QResizeEvent *e) +{ + QWidget::resizeEvent(e); + //调整边距 + auto rect = this->rect(); + QPainterPath blurPath; + //增加圆角 + blurPath.addRoundedRect(rect, 12, 12); + //使用QPainterPath的api生成多边形Region + setProperty("blurRegion", QRegion(blurPath.toFillPolygon().toPolygon())); + this->update(); + + QTimer* timer = new QTimer(); + timer->start(10); //以毫秒为单位 + connect(timer,&QTimer::timeout,[=]{ + m_pWebView->page()->mainFrame()->evaluateJavaScript("Refresh_the_content_interface();"); + timer->stop(); + }); + + qDebug() << e->oldSize() << e->size() << QGuiApplication::screens().at(0)->availableGeometry(); + + QPushButton *button1 = this->findChild("maxOffButton"); + QList list = QGuiApplication::screens(); + if(e->oldSize() == QSize(list.at(0)->availableGeometry().width(),list.at(0)->availableGeometry().height())){ + + button1->setIcon(QIcon::fromTheme("window-maximize-symbolic")); + button1->setToolTip(tr("Maximize")); + windowsflag = true; + } + if(e->size() == QSize(list.at(0)->availableGeometry().width(),list.at(0)->availableGeometry().height())){ + + button1->setIcon(QIcon::fromTheme("window-restore-symbolic")); + button1->setToolTip(tr("Reduction")); + windowsflag = false; + } +} + +GuideWidget::~GuideWidget() +{ + +} + +void GuideWidget::initUI() +{ + // QSslConfiguration sslConf=QSslConfiguration::defaultConfiguration(); + // sslConf.setPeerVerifyMode(QSslSocket::VerifyNone); + // QSslConfiguration::setDefaultConfiguration(sslConf); + m_pWebView = new QWebView(this); + m_pWebView->installEventFilter(this); + qDebug() <<"------------"<< m_pWebView->width() << m_pWebView->height(); + + this->setObjectName("m_yWidget"); + QPushButton *backOffButton = new QPushButton(this); + QPushButton *minOffButton = new QPushButton(this); + QPushButton *maxOffButton = new QPushButton(this); + QPushButton *closeOffButton = new QPushButton(this); + menuOffButton = new QPushButton(this); + m_pIconLabel = new QLabel(this); + m_pTitleLabel = new QLabel(this); + + QHBoxLayout* queryWidLayout = new QHBoxLayout; + search_Line = new QLineEdit(this); + search_Line->setFocusPolicy(Qt::ClickFocus); + search_Line->installEventFilter(this); + // 占位防止偏移 + QLabel *m_placeHoldLabel = new QLabel(this); + m_placeHoldLabel->setFixedSize(30,30); + + // QIcon icon1; + // icon1.addFile(":/image/icon-search.png"); + QIcon searchIcon = QIcon::fromTheme("edit-find-symbolic"); + m_queryIcon = new QLabel(this); + m_queryIcon->setPixmap(searchIcon.pixmap(searchIcon.actualSize(QSize(16, 16)))); + m_queryIcon->setProperty("useIconHighlightEffect",0x2); +// QLocale localeNew; + +// m_queryIcon->setMargin(60); + + + queryWidLayout->addWidget(m_queryIcon); +// search_Line->addAction(QIcon::fromTheme("search-symbolic"),QLineEdit::LeadingPosition); + search_Line->setLayout(queryWidLayout); + + + search_Line->setMinimumSize(196,36); + search_Line->setMaximumSize(196,36); + // search_Line->setMaximumSize(800,30); + search_Line->setAlignment(Qt::AlignVCenter); + qDebug() << search_Line->alignment(); + // search_Line->setStyleSheet("background-color:#E6E6E6;border-radius:6px;"); + // search_Line->setFocus(); + // search_Line->hide();//第一个版本不支持搜索 + backOffButton->setObjectName("backOffButton"); + //backOffButton->setStyleSheet("background-color:#F5F5F5;border-radius:12px;"); + + m_placeHoldLabel->resize(120,30); + minOffButton->setObjectName("minOffButton"); + // minOffButton->setStyleSheet("background-color:#F5F5F5;"); + maxOffButton->setObjectName("maxOffButton"); + // maxOffButton->setStyleSheet("background-color:#F5F5F5;"); + closeOffButton->setObjectName("closeOffButton"); + // closeOffButton->setStyleSheet("background-color:#F5F5F5;"); + + m_pIconLabel->setFixedSize(24,24); + m_pIconLabel->setScaledContents(true); + m_pIconLabel->setPixmap(QIcon::fromTheme("kylin-user-guide").pixmap(24,24)); +// m_pTitleLabel->setIndent(10); + // m_pIconLabel->setStyleSheet("background-color:#F5F5F5;"); + + m_pTitleLabel->setText(tr("Manual")); + m_pTitleLabel->resize(120,30); + m_pTitleLabel->setIndent(4); + // m_pTitleLabel->setStyleSheet("background-color:#F5F5F5;"); + + backOffButton->setIcon(QIcon::fromTheme("go-home-symbolic")); //给按钮添加图标 + backOffButton->setFixedSize(30,30); + backOffButton->setProperty("isWindowButton", 0x1); + backOffButton->setProperty("useIconHighlightEffect", 0x2); + backOffButton->setFlat(true); + backOffButton->setFocusPolicy(Qt::NoFocus); + backOffButton->setVisible(false); + backOffButton->setToolTip(tr("Go back")); + backOffButton->setCursor(QCursor(Qt::ArrowCursor)); + backOffButton->hide(); + + + minOffButton->setIcon(QIcon::fromTheme("window-minimize-symbolic")); + minOffButton->setFixedSize(30,30); + minOffButton->setProperty("isWindowButton", 0x1); + minOffButton->setProperty("useIconHighlightEffect", 0x2); + minOffButton->setFlat(true); + minOffButton->setToolTip(tr("Minimize")); + minOffButton->setCursor(QCursor(Qt::ArrowCursor)); + + maxOffButton->setIcon(QIcon::fromTheme("window-maximize-symbolic")); + maxOffButton->setFixedSize(30,30); + maxOffButton->setProperty("isWindowButton", 0x1); + maxOffButton->setProperty("useIconHighlightEffect", 0x2); + maxOffButton->setFlat(true); + maxOffButton->setToolTip(tr("Maximize")); + maxOffButton->setCursor(QCursor(Qt::ArrowCursor)); + + closeOffButton->setIcon(QIcon::fromTheme("window-close-symbolic")); + closeOffButton->setFixedSize(30,30); + closeOffButton->setProperty("isWindowButton", 0x2); + closeOffButton->setProperty("useIconHighlightEffect", 0x8); + closeOffButton->setFlat(true); + closeOffButton->setToolTip(tr("Close")); + closeOffButton->setCursor(QCursor(Qt::ArrowCursor)); + + menuOffButton->setIcon(QIcon::fromTheme("open-menu-symbolic")); + menuOffButton->setFixedSize(30,30); + menuOffButton->setProperty("isWindowButton", 0x1); + menuOffButton->setProperty("useIconHighlightEffect", 0x2); + menuOffButton->setFlat(true); + menuOffButton->setToolTip(tr("Menu")); + menuOffButton->setCursor(QCursor(Qt::ArrowCursor)); + //判断日间夜间按钮样式 + // menuOffButton->setStyleSheet("background-color:#F5F5F5;"); + + m_menu = new QMenu(this); + m_menu->setMinimumWidth(160); + m_menu->addAction(tr("About")); + m_menu->addAction(tr("Quit")); + // m_menu->setStyleSheet("background-color:white;color:black"); + + connect(backOffButton,SIGNAL(released()),this,SLOT(slot_backOffButton())); + connect(closeOffButton,SIGNAL(released()),this,SLOT(slot_onClicked_closeOffButton())); + connect(minOffButton,SIGNAL(released()),this,SLOT(slot_onClicked_minOffButton())); + connect(maxOffButton,SIGNAL(released()),this,SLOT(slot_onClicked_maxOffButton())); + connect(menuOffButton,SIGNAL(released()),this,SLOT(slot_onClicked_MenuOffButton())); + connect(m_menu,SIGNAL(triggered(QAction*)),this,SLOT(slot_MenuActions(QAction*))); + // 绑定搜索的槽信号 +// search_Line->text() + connect(search_Line,SIGNAL(returnPressed()),this,SLOT(slot_searchLine())); +// connect(search_Line,SIGNAL(returnPressed()),this,SLOT(slot_searchLine())); + +// QVBoxLayout *main_layout = new QVBoxLayout(this); +// QGridLayout *widget_layout = new QGridLayout(this); +// QHBoxLayout *title_layout = new QHBoxLayout(this); +// widget_layout->setHorizontalSpacing(4); +// // title_layout->addStretch(); +// // title_layout->setSpacing(50); +// title_layout->addWidget(m_pIconLabel,0,Qt::AlignLeft); +// // title_layout->addSpacing(20); +// title_layout->addWidget(m_pTitleLabel,0,Qt::AlignLeft); +// title_layout->addWidget(m_placeHoldLabel,0,Qt::AlignLeft); +// title_layout->addWidget(backOffButton,0,Qt::AlignRight); +// // title_layout->addSpacing(20); +// title_layout->addWidget(search_Line,0,Qt::AlignCenter); +// // title_layout->addSpacing(20); +// title_layout->addWidget(menuOffButton,0,Qt::AlignRight); +// title_layout->addWidget(minOffButton,0,Qt::AlignRight); +// title_layout->addWidget(maxOffButton,0,Qt::AlignRight); +// title_layout->addWidget(closeOffButton,0,Qt::AlignRight); +// title_layout->setStretchFactor(search_Line,30); +// title_layout->setStretchFactor(m_pIconLabel,1); +// title_layout->setStretchFactor(m_pTitleLabel,3); +// title_layout->setStretchFactor(backOffButton,4); +//// title_layout->setStretchFactor(m_placeHoldLabel,4); +// title_layout->setStretchFactor(menuOffButton,1); +// title_layout->setStretchFactor(minOffButton,1); +// title_layout->setStretchFactor(maxOffButton,1); +// title_layout->setStretchFactor(closeOffButton,1); + + // title_layout->setStretchFactor(search_Line,4); + // title_layout->setStretchFactor(backOffButton,1); + + // widget_layout->addLayout(title_layout,0,0,1,110); +// widget_layout->addWidget(m_pIconLabel,0,1,1,3); +// widget_layout->addWidget(m_pTitleLabel,0,4,1,10); +// widget_layout->addWidget(m_placeHoldLabel,0,28,1,4); +// widget_layout->addWidget(backOffButton,0,28,1,4); +// widget_layout->addWidget(search_Line,0,50,1,30); +// widget_layout->addWidget(menuOffButton,0,90,1,4); +// widget_layout->addWidget(minOffButton,0,94,1,4); +// widget_layout->addWidget(maxOffButton,0,98,1,4); +// widget_layout->addWidget(closeOffButton,0,102,1,4); + +// widget_layout->setColumnStretch(50,7); +// widget_layout->setColumnStretch(6,3); +// widget_layout->setColumnStretch(39,1); +// widget_layout->setColumnStretch(89,2); + + QVBoxLayout *main_layout = new QVBoxLayout(this); + QGridLayout *widget_layout = new QGridLayout(this); + widget_layout->setHorizontalSpacing(4); + + widget_layout->addWidget(m_pIconLabel,0,1,1,3); + widget_layout->addWidget(m_pTitleLabel,0,4,1,5); + // 改成35试试 + widget_layout->addWidget(backOffButton,0,44,1,1); + widget_layout->addWidget(search_Line,0,45,1,30,Qt::AlignCenter); + // m_placeHoldLabel + widget_layout->addWidget(m_placeHoldLabel,0,80,1,1); + widget_layout->addWidget(menuOffButton,0,90,1,4); + widget_layout->addWidget(minOffButton,0,94,1,4); + widget_layout->addWidget(maxOffButton,0,98,1,4); + widget_layout->addWidget(closeOffButton,0,102,1,4); + widget_layout->setColumnStretch(50,2); +// widget_layout->setColumnStretch(6,2); +// widget_layout->setColumnStretch(39,1); +// widget_layout->setColumnStretch(89,2); + + widget_layout->addWidget(m_pWebView,1,0,1,106); + + // widget_layout->addWidget(m_pWebView,1,0,1,110); + +// QString name = system_name(); + QLocale localeNew; + QStringList word_List; + if(localeNew.language()==QLocale::Chinese) + { + m_pWebView->load(QUrl(QString(LOCAL_URL_PATH_UBUNTUKYLIN)+"index-ubuntukylin.html")); + search_Line->setPlaceholderText("搜索"); + for( std::map::iterator iter = this->keywordMap.begin();iter != this->keywordMap.end(); iter++){ + word_List.append(QString::fromStdString(iter->first)); + } + m_queryIcon->setMargin(60); + search_Line->setTextMargins(80,0,0,0); + } + else + { + m_pWebView->load(QUrl(QString(LOCAL_URL_PATH_UBUNTUKYLIN)+"index-ubuntukylin_en_US.html")); + //英文情况下修改搜索的placeholder + search_Line->setPlaceholderText("Search"); + for( std::map::iterator iter = this->keywordMap.begin();iter != this->keywordMap.end(); iter++){ + word_List.append(QString::fromStdString(iter->second)); + } + m_queryIcon->setMargin(46); + search_Line->setTextMargins(66,0,0,0); + } + QCompleter *m_completer_autoAdd = new QCompleter(word_List); + m_completer_autoAdd->setFilterMode(Qt::MatchContains);// 搜索候选框内容匹配 + m_completer_autoAdd->setCaseSensitivity(Qt::CaseInsensitive); // 搜索候选忽略大小写 + search_Line->setCompleter(m_completer_autoAdd); + connect(m_completer_autoAdd,SIGNAL(activated(const QString&)),this,SLOT(slot_onClicked_completerAutoAdd(const QString&))); +// connect(m_completer_autoAdd, SIGNAL(activated(const QString&)), search_Line->clear, Qt::QueuedConnection) + + //m_pWebView->load(QUrl(QString(LOCAL_URL_PATH)+"index.html")); + m_pWebView->setStyleSheet("border-radius:10px"); + m_pWebView->page()->setLinkDelegationPolicy(QWebPage::DelegateExternalLinks);//外链 + m_pWebView->settings()->setObjectCacheCapacities(0,0,0); +// m_pWebView->settings()->setAttribute(QWebSettings::WebSecurityEnabled, false);//关闭浏览器安全 +// m_pWebView->settings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true);//开发模式 关闭开发模式,检查功能对普通用户无太大意义,且怀疑安全会杀掉用户手册 + m_pWebView->settings()->setAttribute(QWebSettings::JavascriptEnabled,true); + m_pWebView->settings()->setAttribute(QWebSettings::JavaEnabled,true); + m_pWebView->settings()->setAttribute(QWebSettings::JavascriptCanOpenWindows, true); + m_pWebView->settings()->setAttribute(QWebSettings::JavascriptCanAccessClipboard,true); + m_pWebView->settings()->setAttribute(QWebSettings::LocalContentCanAccessRemoteUrls, true); + m_pWebView->settings()->setAttribute(QWebSettings::LocalContentCanAccessFileUrls, true);//设置能访问本地文件 + m_pWebView->settings()->setAttribute(QWebSettings::LocalStorageEnabled, true); + m_pWebView->settings()->setAttribute(QWebSettings::AutoLoadImages,true); +// m_pWebView->settings()->setAttribute(QWebSettings::PluginsEnabled, true);//关闭插件,开启插件可能会在宝德鲲鹏机器上崩溃#69666 + // m_pWebView->setContextMenuPolicy(Qt::NoContextMenu); //关闭右键菜单 + + QObject::connect(m_pWebView,SIGNAL(loadFinished(bool)),this,SLOT(slot_loadFinished(bool))); + QObject::connect(m_pWebView->page()->mainFrame(),SIGNAL(javaScriptWindowObjectCleared()),this,SLOT(slot_javaScriptFromWinObject())); + QObject::connect(m_pWebView->page(),SIGNAL(linkClicked(QUrl)),this,SLOT(slot_webGoto(QUrl))); + // m_pWebView->load(QUrl("https://www.w3school.com.cn/html5/html_5_video.asp")); + widget_layout->setContentsMargins(0, 0, 0, 0); + widget_layout->setVerticalSpacing(4); + + main_layout->addLayout(widget_layout); + + //设置窗体透明 +// this->setAttribute(Qt::WA_TranslucentBackground, true); + //设置无边框 +// this->setWindowFlags(Qt::Window | Qt::FramelessWindowHint); + +// QGraphicsDropShadowEffect *shadow_effect = new QGraphicsDropShadowEffect(this); +// shadow_effect->setBlurRadius(5); +// shadow_effect->setColor(QColor(0, 0, 0, 127)); +// shadow_effect->setOffset(2, 2); +// this->setGraphicsEffect(shadow_effect); + +// main_layout->setMargin(2); + main_layout->setContentsMargins(2,4,4,10); + + this->setLayout(main_layout); + // this->setColor(QPalette::Background, QBrush(QColor(245,245,245))); + // this->setStyleSheet("background-color:#F5F5F5;border-radius:12px;"); + + this->setMouseTracking(true); + + about_widget = new AboutWidget(this); + about_widget->setAppIcon("kylin-user-guide"); + about_widget->setAppName(tr("Manual")); + about_widget->setAppVersion(qApp->applicationVersion()); + about_widget->setAppDescription(tr("Manual one-stop help for the use of this machine software")); +} + +void GuideWidget::slot_webGoto(QUrl url) +{ + qDebug() << Q_FUNC_INFO << url; + if(url.toString().contains("http")||url.toString().contains("mailto")) // 添加mailto跳转 + QDesktopServices::openUrl(url); +} + +void GuideWidget::slot_MenuActions(QAction *action) +{ + if(action->text() == tr("About")){ + about_widget->setModal(true); + about_widget->show(); + }else if(action->text() == tr("Quit")){ + slot_onClicked_closeOffButton(); + }else{ + + } +} + +void GuideWidget::slot_SettingsChange(const QString &key) +{ + qDebug() << Q_FUNC_INFO << key << settings->get("styleName").toString(); + if(key == "styleName"){ + QPalette palette; + if(settings->get("styleName").toString() == "ukui-black" || settings->get("styleName").toString() == "ukui-dark"){ + palette.setBrush(QPalette::Background, QBrush(QColor(38,38,38))); + palette.setBrush(QPalette::Text, QBrush(QColor(Qt::white))); + this->setPalette(palette); + + m_pWebView->page()->mainFrame()->evaluateJavaScript("SwitchStyle(2);"); + m_pWebView->page()->mainFrame()->evaluateJavaScript("changebuttonicon(2);"); + }else{ + palette.setBrush(QPalette::Background, QBrush(QColor(245,245,245))); + palette.setBrush(QPalette::Text, QBrush(QColor(29,29,31))); + this->setPalette(palette); + + m_pWebView->page()->mainFrame()->evaluateJavaScript("SwitchStyle(1);"); + m_pWebView->page()->mainFrame()->evaluateJavaScript("changebuttonicon(1);"); + } + } + if ("iconThemeName" == key) { + m_pIconLabel->setPixmap(QIcon::fromTheme("kylin-user-guide").pixmap(24,24)); + } + + if("systemFont" == key || "systemFontSize" == key ){ + QFont font = this->font(); + for (auto widget: qApp->allWidgets()) { + qDebug() << Q_FUNC_INFO; + widget->setFont(font); + } + m_pTitleLabel->adjustSize(); + } +} + +bool GuideWidget::js_getCpuArchitecture() +{ + if (QSysInfo::currentCpuArchitecture() == "mips" || QSysInfo::currentCpuArchitecture() == "mips64") + return true; + else + return false; +} + +void GuideWidget::jump_app(QString appName) +{ + qDebug() << Q_FUNC_INFO << appName; + QString cmd = QString("qt_jumpApp(\"%1\");").arg(appName); + m_pWebView->page()->mainFrame()->evaluateJavaScript(cmd); +} + +void GuideWidget::slot_javaScriptFromWinObject() +{ + qDebug() << Q_FUNC_INFO; + m_pWebView->page()->mainFrame()->addToJavaScriptWindowObject("guideWebkit",this); +// m_pWebView->page()->mainFrame()->evaluateJavaScript("mywebkit.sig_backOff2js.connect(goBackMainUI());"); +} + +// 点击联想,进行搜索跳转 +void GuideWidget::slot_onClicked_completerAutoAdd(const QString& appName){ + search_Line->setText(appName); + slot_searchLine(); +// QCompleter信号触发后清理 + QTimer::singleShot(10,this,[=]{ + search_Line->clear(); + }); +} + +void GuideWidget::slot_searchLine() +{ + qDebug() << Q_FUNC_INFO; + //qWarning() << "111111111111111111111111111"; + QLocale localeNew; + QString appName =search_Line->text(); + std::string keyword = ""; + + //fprintf(stderr,"text = %s\n",appName.toStdString().c_str()); + + // 判断是否为能够跳转的页面 + for( std::map::iterator iter = this->keywordMap.begin();iter != this->keywordMap.end(); iter++){ + // 判断是否为英文环境下 + if(localeNew.language()==QLocale::Chinese) + { + // 中文 + if(iter->first==appName.trimmed().toStdString()){ + keyword = iter->second; + break; + } + }else{ + // 英文 + if(iter->second==appName.trimmed().toStdString()){ + keyword = iter->second; + break; + } + } + + } + + if(""!=keyword) + jump_app(QString::fromStdString(keyword)); + + search_Line->clear(); +// std::string str = keyWord.toStdString(); +// const char* p =str.c_str(); +// fprintf(stderr," %s ",str.c_str()); +// qWarning() << s; +// m_pWebView->page()->mainFrame()->evaluateJavaScript("goBackMainUI_ubuntu();"); +// QPushButton *button = this->findChild("backOffButton"); +// button->hide(); +} + +void GuideWidget::slot_backOffButton() +{ + qDebug() << Q_FUNC_INFO; + // 判断当前主题模式,返回主页时选择对应主题模式的页面 + QString style = "1"; + if(settings->get("styleName").toString() == "ukui-black" || settings->get("styleName").toString() == "ukui-dark"){ + style = "2"; + } + m_pWebView->page()->mainFrame()->evaluateJavaScript("goBackMainUI_ubuntu("+style+");"); + // m_pWebView->page()->mainFrame()->evaluateJavaScript("goBackMainUI_ubuntu();"); + QPushButton *button = this->findChild("backOffButton"); + button->hide(); +} + +void GuideWidget::slot_loadFinished(bool f) +{ + qDebug() << Q_FUNC_INFO << f ; + QTimer::singleShot(10,this,[=]{ + QPalette palette; + if(settings->get("styleName").toString() == "ukui-black" || settings->get("styleName").toString() == "ukui-dark"){ + palette.setBrush(QPalette::Background, QBrush(QColor(38,38,38))); + palette.setBrush(QPalette::Text, QBrush(QColor(Qt::white))); + this->setPalette(palette); + m_pWebView->page()->mainFrame()->evaluateJavaScript("SwitchStyle(2);"); + }else{ + palette.setBrush(QPalette::Background, QBrush(QColor(245,245,245))); + palette.setBrush(QPalette::Text, QBrush(QColor(29,29,31))); + this->setPalette(palette); + m_pWebView->page()->mainFrame()->evaluateJavaScript("SwitchStyle(1);"); + } + }); +} + +void GuideWidget::slot_onClicked_minOffButton() +{ + QWidget *m_pWindow = this->window(); + if(m_pWindow->isTopLevel()) + { + m_pWindow->showMinimized(); + } +} + +void GuideWidget::slot_onClicked_maxOffButton() +{ + QWidget *m_pWindow = this->window(); + if(m_pWindow->isTopLevel()) + { + QPushButton *button = this->findChild("maxOffButton"); + m_pWindow->isMaximized() ? m_pWindow->showNormal() : m_pWindow->showMaximized(); + m_pWindow->isMaximized() ? button->setIcon(QIcon::fromTheme("window-restore-symbolic")) :button->setIcon(QIcon::fromTheme("window-maximize-symbolic")); + m_pWindow->isMaximized() ? button->setToolTip(tr("Reduction")) : button->setToolTip(tr("Maximize")); + if(m_pWindow->isMaximized()) + windowsflag = false; + else + windowsflag = true; + } +} + +void GuideWidget::slot_onClicked_closeOffButton() +{ + QWidget *m_pWindow = this->window(); + if(m_pWindow->isTopLevel()) + { + m_pWindow->close(); + } +} + +void GuideWidget::slot_onClicked_MenuOffButton() +{ + m_menu->move(menuOffButton->geometry().left()+this->geometry().left(),menuOffButton->geometry().top()+this->geometry().top()+30); + m_menu->exec(); +} + +QString GuideWidget::system_name() +{ + QFile system (SYSTEM_FILE); + if(!system.exists()) + { + return ""; + } + if (!system.open(QIODevice::ReadOnly)) + { + return ""; + } + QString str = system.readLine(); + QString name = str.section("\"",1,1); + return name; + //return "Ubuntu Kylin"; +} + +QString GuideWidget::system_version() +{ + QFile system (SYSTEM_FILE); + if(!system.exists()) + { + return ""; + } + if (!system.open(QIODevice::ReadOnly)) + { + return ""; + } + + QString version = ""; + QTextStream aStream(&system); + //aStream.setAutoDetectUnicode(true); + for(int i = 0;!aStream.atEnd();i++){ + if(0==i){ + QString str = system.readLine(); + continue; + } + QString str = system.readLine(); + version = str.section("\"",1,1); + break; + } + system.close(); +// QString str = system(); +// QString version = ""; +// int lineNum = 0; +// while (system.atEnd() == false) { +// if(0==lineNum){ +// lineNum++; +// continue; +// } +// QString str = system.readLine(); +// version = str.section("\"",1,5); +// break; +// } + + return version; +// return "Ubuntu Kylin"; +} + +QStringList GuideWidget::getDirAndPng() +{ + QStringList list; + QString PathForSystem; + + PathForSystem = LOCAL_FILE_PATH_UBUNTUKYLIN; + + QDir path(PathForSystem); + if(!path.exists()) + { + qDebug()<< PathForSystem << "is not exists !!!"; + } + QStringList dirList = path.entryList(); + dirList.sort(); + for(int i=0;itype() == 9) { +// fprintf(stderr,"8888888888888888888888888888888888888888\n"); + if (search_Line->text().isEmpty()) { + QLocale localeNew; + if(localeNew.language()==QLocale::Chinese) + { + search_Line->setTextMargins(80,0,0,0); + m_queryIcon->setMargin(60); + }else{ + m_queryIcon->setMargin(46); + search_Line->setTextMargins(66,0,0,0); + } + + + // m_animation->stop(); + // m_animation->setStartValue(QRect((m_searchWidget->width()-(m_queryIcon->width()+m_queryText->width()+10))/2,0, + // m_queryIcon->width()+m_queryText->width()+30,(m_searchWidget->height()+32)/2)); + // m_animation->setEndValue(QRect(8, 0, m_queryIcon->width() + 5,(m_searchWidget->height()+32)/2)); + // m_animation->setEasingCurve(QEasingCurve::OutQuad); + // m_animation->start(); + // m_searchWidget->setTextMargins(30, 1, 0, 1); + }else{ + + } +// m_isSearching = true; + + }else if (event->type() == QEvent::MouseButtonPress) { +// fprintf(stderr,"99999999999999999999999999999999999\n"); + search_Line->setTextMargins(26,0,0,0); + m_queryIcon->setMargin(0); +// search_Line->clear(); +// if (search_Line->text().isEmpty()) { +// search_Line->addAction(QIcon::fromTheme("search-symbolic"),QLineEdit::LeadingPosition); +// } +// m_isSearching=false; + } + } + + + if (watched == m_pWebView && event->type() == QEvent::Resize) { + QPainterPath path; + path.addRoundedRect(0, 0, this->width()-3, this->height()-47, 5, 5); + m_pWebView->setMask(path.toFillPolygon().toPolygon()); + } + + if (watched == m_pWebView && event->type() == QEvent::Leave) { + return true; + } + +// if (watched == m_pWebView && event->type() == QEvent::Leave) { +// return true; +// } + +// if (event->type() == QEvent::MouseButtonPress) { +// QMouseEvent *mEvent = static_cast(event); +// QWidget *searchParentWid = static_cast(search_Line); +// QPoint searchPoint = searchParentWid->mapFromGlobal(mEvent->globalPos()); +//// //qDebug()<geometry()<< mWindowGlobalPoint << mouseGlobalPoint << tPoint; +// if (!search_Line->geometry().contains(searchPoint)) { +//// if (search_Line->text().isEmpty()) { +// search_Line->setFocus(); +// search_Line->clearFocus(); +//// } +// } +// } + + return false; +} + +QStringList GuideWidget::js_getIntoFilename() +{ + QStringList test=getDirAndPng(); + return test; +} + +QString GuideWidget::js_getIndexMdFilePath(QString appName) +{ + qDebug() << Q_FUNC_INFO << appName; + QString IndexMdFilePath; +// QString name = system_name(); +// if(name == "kylin") +// { +// IndexMdFilePath = LOCAL_FILE_PATH + appName + "/" + gLang + "/index.md"; +// } +// else if (name == "Ubuntu Kylin"){ + QString systemName = system_version(); +// if(strstr(systemName, "国防") == NULL || strstr(systemName, "GF") == NULL){ +// IndexMdFilePath = LOCAL_FILE_PATH_UBUNTUKYLIN + appName + "/" + gLang + "/index.md"; +// } + + IndexMdFilePath = LOCAL_FILE_PATH_UBUNTUKYLIN + appName + "/" + gLang + "/index.md"; + if(systemName.contains("国防",Qt::CaseSensitive) || systemName.contains("GF",Qt::CaseSensitive)){ +// if(systemName == QString::fromLocal8Bit("ukui")){ +// IndexMdFilePath = LOCAL_FILE_PATH_UBUNTUKYLIN + appName + "/" + gLang + "/index_GF.md"; +// } + if(appName.compare(QString::fromLocal8Bit("ukui")) == 0){ + IndexMdFilePath = LOCAL_FILE_PATH_UBUNTUKYLIN + appName + "/" + gLang + "/index_GF.md"; + } + } + + +// } + //QString IndexMdFilePath = LOCAL_FILE_PATH + appName + "/" + gLang + "/index.md"; +// QLabel *label = this->findChild("m_placeHoldLabel"); +// label->hide(); + QPushButton *button = this->findChild("backOffButton"); + button->show(); + return IndexMdFilePath; +} + +QString GuideWidget::js_getIndexMdFilePathOther(QString appName) +{ + qDebug() << Q_FUNC_INFO << appName; + QString IndexMdFilePath; +// QString name = system_name(); +// if(name == "kylin") +// { +// IndexMdFilePath = LOCAL_FILE_PATH + appName + "/" + gLang + "/index.md"; +// } +// else if (name == "Ubuntu Kylin"){ + IndexMdFilePath = LOCAL_FILE_PATH_UBUNTUKYLIN + appName + "/" + gLang + "/index.md"; +// } + return IndexMdFilePath; +} + +QString GuideWidget::js_getIndexMdFileContent(QString IndexMdFilePath) +{ + qDebug() << Q_FUNC_INFO << IndexMdFilePath; + QFile file (IndexMdFilePath); + if(!file.exists()) + return ""; + if(!file.open(QIODevice::ReadOnly)) + return ""; + return file.readAll(); +} + +QString GuideWidget::js_getIndexMdFileTitle(QString IndexMdFilePath) +{ + qDebug() << Q_FUNC_INFO << IndexMdFilePath; + QFile file (IndexMdFilePath); + if(!file.exists()) + return ""; + if(!file.open(QIODevice::ReadOnly)) + return ""; + QString title = file.readLine(); + title = title.mid(1,title.length()); + return title.trimmed(); +} + +QStringList GuideWidget::js_getBigPngSize(QString filePath) +{ + QStringList stringlist; + qDebug() << Q_FUNC_INFO << filePath<<"0-size:"; + QFile file (filePath); + if(file.exists()) + { + QImage image(filePath); + stringlist.append(QString::number(image.width())); + stringlist.append(QString::number(image.height())); + qDebug() << Q_FUNC_INFO << filePath<<"1-size:"<rect(); + QPoint tl = mapToGlobal(rect.topLeft()); + QPoint rb = mapToGlobal(rect.bottomRight()); + + int x = currentPoint.x(); + int y = currentPoint.y(); + + if (tl.x()+Padding >= x && tl.x() <= x && tl.y()+Padding >= y && tl.y() <= y) { + site_flag = left_top; + this->setCursor(QCursor(Qt::SizeFDiagCursor)); + } + else if (rb.x()-Padding<= x && rb.x() >= x && tl.y()+Padding >= y && tl.y() <= y) { + site_flag = right_top; + this->setCursor(QCursor(Qt::SizeBDiagCursor)); + } + else if (tl.x()+Padding >= x && tl.x() <= x && rb.y()-Padding <= y && rb.y() >= y) { + site_flag = left_bottm; + this->setCursor(QCursor(Qt::SizeBDiagCursor)); + } + else if (rb.x()-Padding <= x && rb.x() >= x && rb.y()-Padding <= y && rb.y() >= y) { + site_flag = right_botm; + this->setCursor(QCursor(Qt::SizeFDiagCursor)); + } + else if (tl.x()+Padding >= x && tl.x() <= x && tl.y()+Padding <= y && rb.y()-Padding >= y) { + site_flag = left; + this->setCursor(QCursor(Qt::SizeHorCursor)); + } + else if (rb.x()-Padding <= x && rb.x() >= x && rb.y()-Padding >= y && tl.y()+Padding <= y) { + site_flag = right; + this->setCursor(QCursor(Qt::SizeHorCursor)); + } + else if (tl.x()+Padding <= x && rb.x()-Padding >= x && tl.y()+Padding >= y && tl.y() <= y) { + site_flag = top; + this->setCursor(QCursor(Qt::SizeVerCursor)); + } + else if (tl.x()+Padding <= x && rb.x()-Padding >= x && rb.y()-Padding <= y && rb.y() >= y) { + site_flag = bottom; + this->setCursor(QCursor(Qt::SizeVerCursor)); + } + else { + site_flag = middle; + this->setCursor(QCursor(Qt::ArrowCursor)); + } +} + +void GuideWidget::mousePressEvent(QMouseEvent *event) +{ + mouseinwidget = false; //避免在其他控件上按下鼠标移动出现位置不正确问题 + if(event->pos().y()>=3&&event->pos().y()<=30) + mCanDrag = true; + else + mCanDrag = false; + if (event->button() == Qt::LeftButton) { + mouseinwidget = true; + this->setCursor(QCursor(Qt::OpenHandCursor)); + dragPos = event->globalPos() - frameGeometry().topLeft(); + } + event->accept(); +} + +void GuideWidget::mouseMoveEvent(QMouseEvent *event) +{ +// QPoint gloPoint = event->globalPos(); +// QRect rect = this->rect(); +// QPoint tl = mapToGlobal(rect.topLeft()); +// QPoint rb = mapToGlobal(rect.bottomRight()); +// if(windowsflag){ +// if (!mouseinwidget) +// { +// set_Cursor(gloPoint); +// } +// else +// { +// if (site_flag != middle ) +// { +// QRect rMove(tl, rb); +// switch (site_flag) +// { +// case left_top: +// if(rb.x()-gloPoint.x() >= this->minimumWidth()) +// rMove.setLeft(gloPoint.x()); + +// if(rb.y()-gloPoint.y() >= this->minimumHeight()) +// rMove.setTop(gloPoint.y()); +// break; +// case right_top: +// if(gloPoint.x()-tl.x() >= this->minimumWidth()) +// rMove.setRight(gloPoint.x()); + +// if(rb.y()-gloPoint.y() >= this->minimumHeight()) +// rMove.setTop(gloPoint.y()); +// break; +// case left_bottm: +// if(rb.x()-gloPoint.x() >= this->minimumWidth()) +// rMove.setLeft(gloPoint.x()); + +// if(gloPoint.y()-tl.y() >= this->minimumHeight()) +// rMove.setBottom(gloPoint.y()); +// break; +// case right_botm: +// if(gloPoint.x()-tl.x() >= this->minimumWidth()) +// rMove.setRight(gloPoint.x()); + +// if(gloPoint.y()-tl.y() >= this->minimumHeight()) +// rMove.setBottom(gloPoint.y()); +// break; +// case top: +// if(rb.y()-gloPoint.y() >= this->minimumHeight()) +// rMove.setTop(gloPoint.y()); +// break; +// case right: +// if(gloPoint.x()-tl.y() >= this->minimumWidth()) +// rMove.setRight(gloPoint.x()); +// break; +// case bottom: +// if(gloPoint.y()-tl.y() >= this->minimumHeight()) +// rMove.setBottom(gloPoint.y()); +// break; +// case left: +// if(rb.x()-gloPoint.x() >= this->minimumWidth()) +// rMove.setLeft(gloPoint.x()); +// break; +// default: +// break; +// } +// this->setGeometry(rMove); +// QTimer* timer = new QTimer(); +// timer->start(10); //以毫秒为单位 +// connect(timer,&QTimer::timeout,[=]{ +// m_pWebView->page()->mainFrame()->evaluateJavaScript("Refresh_the_content_interface();"); +// timer->stop(); +// }); + +// } +// } +// } + + if(mCanDrag && mouseinwidget){ + qreal dpiRatio = qApp->devicePixelRatio(); + if (QX11Info::isPlatformX11()) { + Display *display = QX11Info::display(); + Atom netMoveResize = XInternAtom(display, "_NET_WM_MOVERESIZE", False); + XEvent xEvent; + const auto pos = QCursor::pos(); + + memset(&xEvent, 0, sizeof(XEvent)); + xEvent.xclient.type = ClientMessage; + xEvent.xclient.message_type = netMoveResize; + xEvent.xclient.display = display; + xEvent.xclient.window = this->winId(); + xEvent.xclient.format = 32; + xEvent.xclient.data.l[0] = pos.x() * dpiRatio; + xEvent.xclient.data.l[1] = pos.y() * dpiRatio; + xEvent.xclient.data.l[2] = 8; + xEvent.xclient.data.l[3] = Button1; + xEvent.xclient.data.l[4] = 0; + + XUngrabPointer(display, CurrentTime); + XSendEvent(display, QX11Info::appRootWindow(QX11Info::appScreen()), + False, SubstructureNotifyMask | SubstructureRedirectMask, + &xEvent); + //XFlush(display); + + XEvent xevent; + memset(&xevent, 0, sizeof(XEvent)); + + xevent.type = ButtonRelease; + xevent.xbutton.button = Button1; + xevent.xbutton.window = this->winId(); + xevent.xbutton.x = event->pos().x() * dpiRatio; + xevent.xbutton.y = event->pos().y() * dpiRatio; + xevent.xbutton.x_root = pos.x() * dpiRatio; + xevent.xbutton.y_root = pos.y() * dpiRatio; + xevent.xbutton.display = display; + + XSendEvent(display, this->effectiveWinId(), False, ButtonReleaseMask, &xevent); + XFlush(display); + + if (event->source() == Qt::MouseEventSynthesizedByQt) { + if (!this->mouseGrabber()) { + this->grabMouse(); + this->releaseMouse(); + } + } + + mouseinwidget = false; + } else { + this->move((QCursor::pos() - dragPos) * dpiRatio); + } + } + event->accept(); +} + +void GuideWidget::mouseDoubleClickEvent(QMouseEvent *event) +{ + if(event->buttons()&Qt::LeftButton) + { + QWidget *m_yWindow = this->window(); + if(m_yWindow->isTopLevel()) + { + QPushButton *button1 = this->findChild("maxOffButton"); + m_yWindow->isMaximized() ? m_yWindow->showNormal() : m_yWindow->showMaximized(); + m_yWindow->isMaximized() ? button1->setIcon(QIcon::fromTheme("window-restore-symbolic")) :button1->setIcon(QIcon::fromTheme("window-maximize-symbolic")); + m_yWindow->isMaximized() ? button1->setToolTip(tr("Reduction")) : button1->setToolTip(tr("Maximize")); + if(m_yWindow->isMaximized()) + windowsflag = false; + else + windowsflag = true; + } + } + event->accept(); +} + +void GuideWidget::mouseReleaseEvent(QMouseEvent *event) +{ + if (event->button() == Qt::LeftButton) + { + mouseinwidget = false; + this->setCursor(Qt::ArrowCursor); + } + event->accept(); +} + +void GuideWidget::closeEvent(QCloseEvent *) +{ +// QApplication* app; +// app->quit(); +} + diff --git a/src/guide-widget.h b/src/guide-widget.h new file mode 100644 index 0000000..74ed9c2 --- /dev/null +++ b/src/guide-widget.h @@ -0,0 +1,166 @@ +#ifndef GUIDEWIDGET_H +#define GUIDEWIDGET_H +/* + * Copyright (C) 2020, KylinSoft Co., Ltd. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "aboutwidget.h" +//#include +class GuideWidget : public QWidget +{ + Q_OBJECT +public: + explicit GuideWidget(QWidget *parent = 0); + ~GuideWidget(); + void initUI(); + void initSettings(); + void showPosition(); + void jump_app(QString); + void set_Cursor(QPoint &event); + QString system_name(); + QString system_version(); + QStringList getDirAndPng(); + + bool eventFilter(QObject *watched, QEvent *event); + +protected: + void closeEvent(QCloseEvent *); + void mousePressEvent(QMouseEvent * ); + void mouseMoveEvent(QMouseEvent *); + void mouseReleaseEvent(QMouseEvent *); + void mouseDoubleClickEvent(QMouseEvent *); + void paintEvent(QPaintEvent *); + void resizeEvent(QResizeEvent *e); + QPoint dragPos; + bool mouseinwidget =false; + bool isClose = false; + bool mCanDrag = false; + enum LocaTion{top,bottom,left,right,left_top,left_bottm,right_top,right_botm,middle}; + LocaTion site_flag; + int Padding = 6; + bool windowsflag = true; + //原理上,只要英文名称和dbus调用参数一致,则可以自动读取,但目前并未进行统一。所以暂时采用指定的方式 + std::map keywordMap={ + {"系统安装","kylin-os-installer"}, + {"桌面环境","ukui"}, + {"设置","ukui-control-center"}, + {"快捷键","hot-key"}, + {"文件管理器","peony"}, + {"终端","mate-terminal"}, + {"系统监视器","kylin-system-monitor"}, + {"安全中心","ksc-defender"}, + {"备份还原","kybackup"}, + {"工具箱","toolkit"}, + {"归档管理器","engrampa"}, + {"刻录","kylin-burner"}, + {"日志查看器","kylin-log-viewer"}, + {"传书","messages"}, + {"分区编辑器","gparted"}, + {"软件商店","software-store"}, + {"远程桌面客户端","remmina"}, + // {"FTP客户端","filezilla"}, + {"生物特征管理工具","biometric-manager"}, + {"闹钟","ukui-clock"}, + {"天气","indicator-china-weather"}, + {"音乐","kylin-music"}, + {"影音","kylin-video"}, + {"看图","pictures"}, + {"录音","kylin-recorder"}, + {"摄像头","kylin-camera"}, + {"邮件客户端","evolution"}, + // {"黑白棋","othello"}, + // {"扫雷","mines"}, + // {"四邻","tetravex"}, + {"服务与支持","Services-and-Supports"}, + {"许可与隐私","kylinOS"}, + {"打印机","kylin-printer"}, + {"文档查看器","atril"}, + {"计算器","kylin-calculator"}, + {"扫描","kylin-scanner"}, + {"截图","kylin-screenshot"}, + {"u盘启动器","kylin-usb-creator"}, + {"便签贴","ukui-notebook"}, + // {"文件保护箱","box-manager"}, + // {"麒麟移动运行环境","kmre"}, + {"SEmail客户端","kylinsemail"}, + {"屏幕键盘","onboard"} + }; + QRect m_rect; + +private: + QWebView *m_pWebView = nullptr; + QLabel *m_pTitleLabel = nullptr; + QLabel *m_pIconLabel = nullptr; + QString mJumpAppName = nullptr; + QWidget *m_yWidget = nullptr; + QDesktopWidget *desktop = nullptr; + QPushButton *menuOffButton = nullptr; + QMenu *m_menu = nullptr; + AboutWidget *about_widget = nullptr; + QGSettings *settings; + QLineEdit *search_Line = nullptr; + QLabel *m_queryIcon = nullptr; +private slots: + void slot_backOffButton(); + void slot_javaScriptFromWinObject(); + void slot_loadFinished(bool); + void slot_onClicked_minOffButton(); + void slot_onClicked_maxOffButton(); + void slot_onClicked_closeOffButton(); + void slot_onClicked_MenuOffButton(); + void slot_webGoto(QUrl); + void slot_MenuActions(QAction *action); + void slot_SettingsChange(const QString &key); + void slot_searchLine(); + void slot_onClicked_completerAutoAdd(const QString& appName); +public slots: + Q_INVOKABLE QString js_getIndexMdFilePath(QString); + Q_INVOKABLE QString js_getIndexMdFilePathOther(QString); + Q_INVOKABLE QString js_getIndexMdFileContent(QString); + Q_INVOKABLE QString js_getIndexMdFileTitle(QString); + Q_INVOKABLE QStringList js_getIntoFilename(); + Q_INVOKABLE QStringList js_getBigPngSize(QString); + Q_INVOKABLE bool js_getCpuArchitecture(); + Q_INVOKABLE QString JudgmentSystrm(); + Q_INVOKABLE QString js_getFileSystemInformation(QString); +public: + +signals: + Q_INVOKABLE void sig_backOff2js(); +}; +#endif //GUIDEWIDGET_H + diff --git a/src/image/96x96.png b/src/image/96x96.png new file mode 100644 index 0000000..86014c4 Binary files /dev/null and b/src/image/96x96.png differ diff --git a/src/image/back.png b/src/image/back.png new file mode 100644 index 0000000..1c2a5a8 Binary files /dev/null and b/src/image/back.png differ diff --git a/src/image/close.png b/src/image/close.png new file mode 100644 index 0000000..4ddbb64 Binary files /dev/null and b/src/image/close.png differ diff --git a/src/image/fullscreen.png b/src/image/fullscreen.png new file mode 100644 index 0000000..2a1cc2e Binary files /dev/null and b/src/image/fullscreen.png differ diff --git a/src/image/icon-search.png b/src/image/icon-search.png new file mode 100644 index 0000000..9cd1b2a Binary files /dev/null and b/src/image/icon-search.png differ diff --git a/src/image/kylin-user-guide_16_24.png b/src/image/kylin-user-guide_16_24.png new file mode 100644 index 0000000..c30d428 Binary files /dev/null and b/src/image/kylin-user-guide_16_24.png differ diff --git a/src/image/kylin-user-guide_44_56.png b/src/image/kylin-user-guide_44_56.png new file mode 100644 index 0000000..b98199d Binary files /dev/null and b/src/image/kylin-user-guide_44_56.png differ diff --git a/src/image/minimize.png b/src/image/minimize.png new file mode 100644 index 0000000..8127342 Binary files /dev/null and b/src/image/minimize.png differ diff --git a/src/image/open-menu-symbolic.png b/src/image/open-menu-symbolic.png new file mode 100644 index 0000000..5ba63ab Binary files /dev/null and b/src/image/open-menu-symbolic.png differ diff --git a/src/image/restore.png b/src/image/restore.png new file mode 100644 index 0000000..744a08c Binary files /dev/null and b/src/image/restore.png differ diff --git a/src/image/return.png b/src/image/return.png new file mode 100644 index 0000000..e3f19a8 Binary files /dev/null and b/src/image/return.png differ diff --git a/src/ipc/ipc_dbus.cpp b/src/ipc/ipc_dbus.cpp new file mode 100644 index 0000000..b2f3877 --- /dev/null +++ b/src/ipc/ipc_dbus.cpp @@ -0,0 +1,150 @@ +/* + * Copyright (C) 2020, KylinSoft Co., Ltd. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "ipc_dbus.h" +#include "main_controller.h" + +IpcDbus::IpcDbus() +{ + +} + +void IpcDbus::init() +{ + if(IsNotRunning()) + { + creatDBusService(); + qDebug()<<"--------------creatDBusService"; + } + else + { + if(gStartShowApp == "") + notifyGuideWidgetActive(); + else + notifyGuideWidgetActive(gStartShowApp); + exit(0); + qDebug()<<"--------------notifySettingsWidgetActive"; + } + +} + +IpcDbus::~IpcDbus() +{ + +} + +void IpcDbus::creatDBusService() +{ + // 用于建立到session bus的连接 + QDBusConnection bus = QDBusConnection::sessionBus(); + // 在session bus上注册名为"com.kylin_user_guide.hotel"的service + + char service_name[SERVICE_NAME_SIZE]; + memset(service_name, 0, SERVICE_NAME_SIZE); + snprintf(service_name, SERVICE_NAME_SIZE, "%s_%d",KYLIN_USER_GUIDE_GUI_SERVICE,getuid()); + + if (!bus.registerService(service_name)) { //注意命名规则-和_ + qDebug() << bus.lastError().message(); + exit(1); + } + // "QDBusConnection::ExportAllSlots"表示把类Hotel的所有Slot都导出为这个Object的method + bus.registerObject("/", this ,QDBusConnection::ExportAllSlots); +} + +int IpcDbus::IsNotRunning() +{ + char service_name[SERVICE_NAME_SIZE]; + memset(service_name, 0, SERVICE_NAME_SIZE); + snprintf(service_name, SERVICE_NAME_SIZE, "%s_%d",KYLIN_USER_GUIDE_GUI_SERVICE,getuid()); + QDBusConnection conn = QDBusConnection::sessionBus(); + if (!conn.isConnected()) + return 0; + + QDBusReply reply = conn.interface()->call("GetNameOwner", service_name); + return reply.value() == ""; +} + +void IpcDbus::notifyGuideWidgetActive() +{ + char service_name[SERVICE_NAME_SIZE]; + memset(service_name, 0, SERVICE_NAME_SIZE); + snprintf(service_name, SERVICE_NAME_SIZE, "%s_%d",KYLIN_USER_GUIDE_GUI_SERVICE,getuid()); + + QDBusInterface iface(service_name, KYLIN_USER_GUIDE_GUI_PATH, KYLIN_USER_GUIDE_GUI_INTERFACE, QDBusConnection::sessionBus()); + if(!iface.isValid()){ + qDebug() << qPrintable(QDBusConnection::sessionBus().lastError().message()); + } + iface.call("ActiveGuideWidget"); +} + +void IpcDbus::notifyGuideWidgetActive(QString appName) +{ + char service_name[SERVICE_NAME_SIZE]; + memset(service_name, 0, SERVICE_NAME_SIZE); + snprintf(service_name, SERVICE_NAME_SIZE, "%s_%d",KYLIN_USER_GUIDE_GUI_SERVICE,getuid()); + // 用来构造一个在D-Bus上传递的Message + QDBusMessage m = QDBusMessage::createMethodCall(QString(service_name),KYLIN_USER_GUIDE_GUI_PATH,KYLIN_USER_GUIDE_GUI_INTERFACE,"ShowGuideGUI"); + // 给QDBusMessage增加一个参数; + // 这是一种比较友好的写法,也可以用setArguments来实现 + m << appName; + + bool bRet; + // 发送Message + QDBusMessage response = QDBusConnection::sessionBus().call(m); + // 判断Method是否被正确返回 + if (response.type()== QDBusMessage::ReplyMessage) + { + // QDBusMessage的arguments不仅可以用来存储发送的参数,也用来存储返回值; + bRet = response.arguments().at(0).toBool(); + } + else + { + qDebug()<<"showGuide In fail!\n"; + } + + qDebug()<<"bRet:"<showGuide(); + return true; +} + +bool IpcDbus::ShowGuideGUI(QString appName) +{ + qDebug() << Q_FUNC_INFO << appName; + MainController::self()->showGuide(appName); + return true; +} + +bool IpcDbus::ShowGuideGUI(int i) +{ + qDebug()<<"showGuide:"<. + */ + +#ifndef __IPC_DBUS_H__ +#define __IPC_DBUS_H__ + +#include +#include "common-tool/comm_func.h" + +class IpcDbus : public QObject +{ + Q_OBJECT + Q_CLASSINFO("D-Bus Interface", KYLIN_USER_GUIDE_INTERFACE) +public: + IpcDbus(); + void init(); + virtual ~IpcDbus(); +private: + void creatDBusService(); + int IsNotRunning(); + void notifyGuideWidgetActive(); + void notifyGuideWidgetActive(QString); +public slots: + bool ShowGuideGUI(QString appName); + bool ShowGuideGUI(int i); + bool ActiveGuideWidget(); +}; + +#endif // __IPC_DBUS_H__ diff --git a/src/kylin-user-guide.pro b/src/kylin-user-guide.pro new file mode 100644 index 0000000..e69620c --- /dev/null +++ b/src/kylin-user-guide.pro @@ -0,0 +1,31 @@ +###################################################################### +# Automatically generated by qmake (3.1) Sat Apr 18 11:17:25 2020 +###################################################################### +QT += core gui webkitwidgets dbus +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets +TEMPLATE = app +TARGET = src +INCLUDEPATH += . + +# The following define makes your compiler warn you if you use any +# feature of Qt which has been marked as deprecated (the exact warnings +# depend on your compiler). Please consult the documentation of the +# deprecated API in order to know how to port your code away from it. +DEFINES += QT_DEPRECATED_WARNINGS + +# You can also make your code fail to compile if you use deprecated APIs. +# In order to do so, uncomment the following line. +# You can also select to disable deprecated APIs only up to a certain version of Qt. +#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 + +# Input +HEADERS += guide-widget.h \ + main_controller.h \ + common-tool/comm_func.h \ + ipc/ipc_dbus.h +SOURCES += guide-widget.cpp \ + main.cpp \ + main_controller.cpp \ + common-tool/comm_func.cpp \ + ipc/ipc_dbus.cpp +RESOURCES += kylin-user-guide.qrc diff --git a/src/kylin-user-guide.qrc b/src/kylin-user-guide.qrc new file mode 100644 index 0000000..0c17a44 --- /dev/null +++ b/src/kylin-user-guide.qrc @@ -0,0 +1,18 @@ + + + image/kylin-user-guide_16_24.png + image/kylin-user-guide_44_56.png + image/icon-search.png + image/close.png + image/fullscreen.png + image/minimize.png + image/open-menu-symbolic.png + image/restore.png + image/return.png + image/back.png + translation/kylin-user-guide_zh_CN.qm + translation/kylin-user-guide_en_US.qm + translation/kylin-user-guide_bo_CN.qm + + + diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..0404e79 --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,239 @@ +/* + * Copyright (C) 2020, KylinSoft Co., Ltd. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include "main_controller.h" +#include "common-tool/comm_func.h" + + +#define BUFF_SIZE 128 +#define CHANGELOG_PATH "/usr/share/doc/kylin-user-guide/changelog.Debian.gz" + +QString gLang = "zh_CN"; +QString gStartShowApp = ""; +static void crashHandler(int sig) +{ + signal(sig, SIG_IGN); + int size; + char **strings; + int i = 0; + + char path[BUFF_SIZE] = {0}; + static char *homePath = getenv("HOME"); + snprintf(path, BUFF_SIZE, "%s/.config/kylin-user-guide", homePath); + strcat(path,"/config-crash.log"); + FILE *fp = fopen(path,"a+"); + + void *array[20]; + size = backtrace (array, 20); + strings = (char **)backtrace_symbols (array, size); + + char logStr[BUFF_SIZE] = "0"; + sprintf(logStr,"!!!--- received signal: %d=%s! Stack trace\n", sig,strsignal(sig)); + fwrite(logStr,sizeof(char),BUFF_SIZE,fp); + for (i = 0; i < size; i++) + { + memset(logStr,0,BUFF_SIZE); + sprintf(logStr,"%d %s \n",i,strings[i]); + fwrite(logStr,sizeof(char),BUFF_SIZE,fp); + } + + fflush(fp); + fclose(fp); + free (strings); + + exit(128 + sig); +} + +QString getAppVersion(){ + QProcess process; + QString cmd = "dpkg-parsechangelog"; + QStringList arg; + arg.clear(); + arg << "-l" << CHANGELOG_PATH << "--show-field" << "Version"; + process.start(cmd,arg); + process.waitForFinished(); + QByteArray result = process.readAllStandardOutput(); + result = result.left(result.length()-1); + return result; +} + +int main(int argc, char *argv[]) +{ + initUkuiLog4qt("kylin-user-guide"); + +#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)) + QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); + QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); +#endif + + qputenv("QT_QPA_PLATFORMTHEME", "ukui"); + QApplication app(argc, argv); + + app.setWindowIcon(QIcon::fromTheme("kylin-user-guide")); + + QCoreApplication::setApplicationName("Kylin User Guide"); + QCoreApplication::setApplicationVersion(getAppVersion()); + QStringList args = app.arguments(); + + QCommandLineOption jumpAppOption(QStringList()<< "A" << "appName","指定打开应用程序版本手册",""); +// QCommandLineOption asDaemonOption(QStringList()<< "D" << "daemon","作为后台demon,显示图形"); + QCommandLineParser cmdinParser; + + cmdinParser.setApplicationDescription("ubuntukylin user guide"); + cmdinParser.addHelpOption(); + cmdinParser.addVersionOption(); + cmdinParser.addOption(jumpAppOption); +// cmdinParser.addOption(asDaemonOption); + + cmdinParser.addPositionalArgument("--help","显示全部帮助选项"); + cmdinParser.addPositionalArgument("--version","显示安装的程序的版本并退出"); + cmdinParser.addPositionalArgument("--display","要使用的X显示"); + + cmdinParser.process(args); + bool bJumpApp = cmdinParser.isSet(jumpAppOption); +// QString jumpApp = cmdinParser.value("-A");//拿不到值 + QString jumpApp = ""; + if(argc>2&&bJumpApp) + { + jumpApp = args.at(2); +// if(1==jumpApp.split(":"))//dbus调用没有带: + if(2==jumpApp.split(":").length())//标准帮助URL help:xxx,部分开源app调用模式,新app可以统一用help:标准方式 + { + jumpApp = jumpApp.split(":").at(1); + } + + QStringList gamesList,toolsList,softwareStoreList,ukuiList; + // //games + // gamesList << "iagno" << "gnome-mines" << "gnome-tetravex"; + // //tools + /* toolsList << "onboard" << "atril" << "weather"<< "kylin-recorder" << "kylin-usb-creator" << "kylin-screenshot"\ + << "kylin-calculator" << "kylin-camera" << "kylin-scanner";*/ + //ukui + // ukuiList << "ukui_clock" << "ukui_notebook"; + //software-store + softwareStoreList << "error-code"; + if(softwareStoreList.contains(jumpApp)) + jumpApp = "software-store/"+jumpApp; + // if(ukuiList.contains(jumpApp)) + // jumpApp = "ukui/"+jumpApp; + // if(gamesList.contains(jumpApp)) + // jumpApp = "game/"+jumpApp; + // if(toolsList.contains(jumpApp)) + // jumpApp = "tools/"+jumpApp; +// QMessageBox::information(NULL, "Title", jumpApp, +// QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes); + } + +// qDebug()<<"args"<setStyleSheet(qss.readAll()); + qss.close(); +#endif + + QString qm_name = QLocale::system().name(); +// QString locale = "bo_CN"; + QTranslator translator; + if(qm_name == "zh_CN" || qm_name == "es" || qm_name == "fr" || qm_name == "de" || qm_name == "ru" || qm_name == "bo_CN") {//中文 西班牙语 法语 德语 俄语 +// if(!translator.load("kylin-user-guide_" + qm_name + ".qm", +// ":/translation/")) + if(!translator.load("kylin-user-guide_" + qm_name + ".qm", + "/usr/share/kylin-user-guide/translations/")) + qDebug() << "Load translation file:"<< "kylin-user-guide_" + qm_name + ".qm" << " failed!"; + else + app.installTranslator(&translator); + } + + //加载Qt对话框默认的国际化 + QTranslator qtTranslator; + qtTranslator.load("qt_" + qm_name, + QLibraryInfo::location(QLibraryInfo::TranslationsPath)); + app.installTranslator(&qtTranslator); + + gStartShowApp = jumpApp; + MainController *ctrl = MainController::self(); + app.exec(); + + delete ctrl; + return 0; + +} diff --git a/src/main_controller.cpp b/src/main_controller.cpp new file mode 100644 index 0000000..b523b17 --- /dev/null +++ b/src/main_controller.cpp @@ -0,0 +1,135 @@ +/* + * Copyright (C) 2020, KylinSoft Co., Ltd. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "main_controller.h" +#include "ipc/ipc_dbus.h" + +#include "xatom-helper.h" + +MainController* MainController::mSelf = 0; +MainController* MainController::self() +{ + if (!mSelf) { + mSelf = new MainController; + } + return mSelf; +} + +MainController::MainController() +{ + configFilePath = QDir::homePath()+"/.config/kylin-user-guide"; + qDebug() << Q_FUNC_INFO << QString::fromLocal8Bit(qgetenv("XDG_RUNTIME_DIR")); + if((""!=QString::fromLocal8Bit(qgetenv("XDG_RUNTIME_DIR")))||(""!=QString::fromLocal8Bit(qgetenv("DBUS_SESSION_BUS_ADDRESS")))) + { + ipcDbus = new IpcDbus; + qDebug() << "------------------" << configFilePath <<"\n"; + ipcDbus->init(); + guideWidget = new GuideWidget; + startShowApp(); + } +} + +void MainController::startShowApp() +{ + // if(isFirst){ + // showGuide(gStartShowApp); + // QString cmd = "echo 0 > /tmp/first"; + // QProcess process(this); + // process.start(cmd); + // isFirst = false; + // } + QFile file(configFilePath); + //判断是否首次打开 + if (!file.exists()){ + showGuide(gStartShowApp); + if(!file.open(QIODevice::WriteOnly)){ + qDebug()<<"首次打开创建文件"; + file.close(); + } + } + // qDebug() << "------------------" << isFirst <<"\n"; + QTimer::singleShot(800, this, SLOT(showGuide()));//消息循环起来后打通js和qt通信在执行跳转 +} + +void MainController::showGuide(QString appName) +{ + if(appName!="") + guideWidget->jump_app(appName); + +// qDebug() << Q_FUNC_INFO << guideWidget->isMinimized() << guideWidget->size(); + QList list = QGuiApplication::screens(); + if(guideWidget->isMinimized()){ + if(guideWidget->size() == QSize(list.at(0)->availableGeometry().width(),list.at(0)->availableGeometry().height())) + guideWidget->showMaximized(); + else + guideWidget->showNormal(); + } + + flags = guideWidget->windowFlags(); + guideWidget->setWindowFlags(flags|Qt::WindowStaysOnTopHint); + // guideWidget->setStyleSheet("background-color:rgb(234,234,234)");; + + MotifWmHints hints; + hints.flags = MWM_HINTS_FUNCTIONS|MWM_HINTS_DECORATIONS; + hints.functions = MWM_FUNC_ALL; + hints.decorations = MWM_DECOR_BORDER; + XAtomHelper::getInstance()->setWindowMotifHint(guideWidget->winId(), hints); + QTimer::singleShot(10, this, SLOT(setwindowFlags())); + guideWidget->show(); +} + +void MainController::showGuide() +{ + if(gStartShowApp!="") + { + qDebug() << Q_FUNC_INFO; + guideWidget->jump_app(gStartShowApp); + gStartShowApp = ""; + } + guideWidget->activateWindow(); + guideWidget->show(); +} + +void MainController::setwindowFlags() +{ + guideWidget->setWindowFlags(flags); + MotifWmHints hints; + hints.flags = MWM_HINTS_FUNCTIONS|MWM_HINTS_DECORATIONS; + hints.functions = MWM_FUNC_ALL; + hints.decorations = MWM_DECOR_BORDER; + XAtomHelper::getInstance()->setWindowMotifHint(guideWidget->winId(), hints); + XAtomHelper::getInstance()->setWindowBorderRadius(guideWidget->winId(), 6, 6, 6, 6); + guideWidget->show(); +} + +MainController::~MainController() +{ + +} + diff --git a/src/main_controller.h b/src/main_controller.h new file mode 100644 index 0000000..5b499f9 --- /dev/null +++ b/src/main_controller.h @@ -0,0 +1,51 @@ +#ifndef MAINCONTROLLER_H +#define MAINCONTROLLER_H +/* + * Copyright (C) 2020, KylinSoft Co., Ltd. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include "guide-widget.h" +#include "ipc/ipc_dbus.h" + +class MainController : public QObject +{ + Q_OBJECT +public: + static MainController* self(); + void startShowApp(); + virtual ~MainController(); +private: + explicit MainController(); +private: + static MainController *mSelf; + GuideWidget *guideWidget; + IpcDbus *ipcDbus; + Qt::WindowFlags flags; + QString configFilePath; +public slots: + void showGuide(QString appName); + void showGuide(); + void setwindowFlags(); +}; +#endif //MAINCONTROLLER_H diff --git a/src/translation/kylin-user-guide_bo_CN.qm b/src/translation/kylin-user-guide_bo_CN.qm new file mode 100644 index 0000000..78e7ab8 Binary files /dev/null and b/src/translation/kylin-user-guide_bo_CN.qm differ diff --git a/src/translation/kylin-user-guide_bo_CN.ts b/src/translation/kylin-user-guide_bo_CN.ts new file mode 100644 index 0000000..7f09b2d --- /dev/null +++ b/src/translation/kylin-user-guide_bo_CN.ts @@ -0,0 +1,66 @@ + + + + + GuideWidget + + Menu + འདེམས་བྱང་། + + + Quit + ཕྱིར་འབུད། + + + About + འབྲེལ་ཡོད། + + + Close + ཁ་རྒྱག་པ། + + + Minimize + ཆེས་ཆུང་འགྱུར། + + + Manual + ལག་སྒུལ། + + + Manual one-stop help for the use of this machine software + མགྲོན་པོའི་ལག་དེབ། + + + Maximize + ཆེས་ཆེ་བ་ཅན། + + + Reduction + སླར་གསོ། + + + Go back + ཕྱིར་ལོག + + + + AboutWidget + + Close + ཁ་རྒྱག་པ། + + + Service & Support : <a style='color: black;' href='mailto://support@kylinos.cn'>support@kylinos.cn</a> + <p>ཞབས་ཞུ་དང་རྒྱབ་སྐྱོར་ཚོགས་པ།: <a style='color: black;' href='mailto://support@kylinos.cn'>support@kylinos.cn</a></p> + + + VERSION + པར་གཞི། + + + Service & Support : <a style='color: white;' href='mailto://support@kylinos.cn'>support@kylinos.cn</a> + <p>ཞབས་ཞུ་དང་རྒྱབ་སྐྱོར་ཚོགས་པ། : <a style='color: white;' href='mailto://support@kylinos.cn'>support@kylinos.cn</a></p> + + + \ No newline at end of file diff --git a/src/translation/kylin-user-guide_en_US.qm b/src/translation/kylin-user-guide_en_US.qm new file mode 100644 index 0000000..9dad8df Binary files /dev/null and b/src/translation/kylin-user-guide_en_US.qm differ diff --git a/src/translation/kylin-user-guide_en_US.ts b/src/translation/kylin-user-guide_en_US.ts new file mode 100644 index 0000000..3ff4470 --- /dev/null +++ b/src/translation/kylin-user-guide_en_US.ts @@ -0,0 +1,90 @@ + + + + + AboutWidget + + + Close + + + + + + Service & Support : <a style='color: white;' href='mailto://support@kylinos.cn'>support@kylinos.cn</a> + + + + + + Service & Support : <a style='color: black;' href='mailto://support@kylinos.cn'>support@kylinos.cn</a> + + + + + VERSION + + + + + GuideWidget + + + + + + Maximize + + + + + + + Reduction + + + + + + Manual + + + + + Go back + + + + + Minimize + + + + + Close + + + + + Menu + + + + + + About + + + + + + Quit + + + + + Manual one-stop help for the use of this machine software + + + + diff --git a/src/translation/kylin-user-guide_zh_CN.qm b/src/translation/kylin-user-guide_zh_CN.qm new file mode 100644 index 0000000..012d6b8 Binary files /dev/null and b/src/translation/kylin-user-guide_zh_CN.qm differ diff --git a/src/translation/kylin-user-guide_zh_CN.ts b/src/translation/kylin-user-guide_zh_CN.ts new file mode 100644 index 0000000..822bcb8 --- /dev/null +++ b/src/translation/kylin-user-guide_zh_CN.ts @@ -0,0 +1,90 @@ + + + + + AboutWidget + + + Close + 关闭 + + + + + Service & Support : <a style='color: white;' href='mailto://support@kylinos.cn'>support@kylinos.cn</a> + <p>服务与支持团队 : <a style='color: white;' href='mailto://support@kylinos.cn'>support@kylinos.cn</a></p> + + + + + Service & Support : <a style='color: black;' href='mailto://support@kylinos.cn'>support@kylinos.cn</a> + <p>服务与支持团队 : <a style='color: black;' href='mailto://support@kylinos.cn'>support@kylinos.cn</a></p> + + + + VERSION + 版本号 + + + + GuideWidget + + + + + + Maximize + 最大化 + + + + + + Reduction + 还原 + + + + + Manual + 用户手册 + + + + Go back + 返回 + + + + Minimize + 最小化 + + + + Close + 关闭 + + + + Menu + 菜单 + + + + + About + 关于 + + + + + Quit + 退出 + + + + Manual one-stop help for the use of this machine software + 用户手册提供本机软件使用的一站式帮助 + + + diff --git a/src/web/css/guide-black.css b/src/web/css/guide-black.css new file mode 100644 index 0000000..2b04648 --- /dev/null +++ b/src/web/css/guide-black.css @@ -0,0 +1,525 @@ +*,body,div{ + background:#262626; + margin:0;padding:0; + /* 禁用图片选中 */ + -moz-user-select:none; + -webkit-user-select:none; + user-select:none; +} + +::-webkit-scrollbar +{ + width: 6px; +/* display: none;*/ +} + +div.hlist-div::-webkit-scrollbar-track +{ + background:#262626; +} + +::-webkit-scrollbar-thumb +{ + border-radius: 5px; + /* box-shadow: inset 0 0 5px rgb(128,128,128); */ + background: #37373B; +} + +::-webkit-scrollbar-thumb:hover{ + background: #47474B; +} + +::-webkit-scrollbar-thumb:active{ + background: #47474B; +} + +::-webkit-scrollbar-track +{ + border-radius: 5px; + background:#262626; +} + +#mainUI +{ + margin-left: 4.7%; + margin-right: 4.7%; + margin-bottom: 50px; + margin-top: 40px; +} + +#mainUI h2 +{ + margin-top: 12px; + margin-bottom: 15px; + color: white; + font-family:Noto Sans CJK SC; +} + +#pageContent li +{ + font-family:Noto Sans CJK SC; +} + +#content p a +{ + color:#0084FF; +} + +div.hlist-div +{ + float:left;/*目录框的位置*/ + overflow-y:auto;/*目录框添加滚动条*/ + position: fixed;/*目录框相对浏览器进行定位*/ + /*width:19%;*//*目录框的宽度*/ + width:200px; + height: 100%; /*目录框的高度*/ + top: 0; + left: 0; + margin: 0%; + /*padding-left: 1%;*/ + /* background-color:rgb(29,29,31); */ + color: #333; +} + +div.system-app { + width: 120px; + height: 120px; + /*padding: 0 10px;*/ + display: inline-block; + text-align: center; + vertical-align: bottom; + background:#262626; + cursor: pointer; + border-radius:4px; + margin-left: 22px; + margin-bottom: 24px; + /*box-shadow:5px 5px 2px rgb(35,35,35);*/ +} + +div.system-app img { + width: 36px; + height: 36px; + margin-top: 21px; + background:#262626; + /*margin-bottom: 10px;*/ +} + +div.system-app span,div { + font-size: 14px; + font-weight: normal; + color: white; + background:#262626; + font-family: Noto Sans CJK SC; +} + +div.system-app:hover +{ + /*transform: translateY(-10px);*/ + background:rgba(18, 18, 18, 1); +} + +div.system-app:hover span +{ + background:rgba(18, 18, 18, 1); + color: white; +} + +div.system-app:hover div +{ + background:rgba(18, 18, 18, 1); + color: white; +} + +div.system-app:hover img +{ + background:rgba(18, 18, 18, 1); +} + +div.system-app:active +{ + border-radius: 4px; + background:rgba(55, 144, 250, 1); + color: white; +} + +div.system-app:active span +{ + background:rgba(55, 144, 250, 1); + color: white; +} + +div.system-app:active div +{ + background:rgba(55, 144, 250, 1); + color: white; +} + +div.system-app:active img +{ + background:rgba(55, 144, 250, 1); +} + +div.container +{ + width: 100%; + height: 31px; + margin-bottom: 15px; +} + +div.container button +{ + width: 24px; + height: 24px; + outline: none; + border: none; + position: relative; + top: 2px; + background-image: url('/usr/share/kylin-user-guide/data/ukui-down-symbolic.svg'); + background-color: rgb(29, 29, 31); + background-size: 24px 24px; +} + +div.wrap +{ + width: 140px; + height: 31px; + z-index: 2; + background-color: rgb(29, 29, 31); + position: relative; +} + +/* div.line +{ + width: 95%; + border: 1px solid rgb(51, 52, 53); + position: relative; + left: 5%; + bottom: 16px; +} */ + +.line-main{ + margin:10rpx 0; + background: #262626; + text-align: center; + height: 10px; + padding: 0 30px; + line-height: 10px + } +.line:before{ + content: ''; + display: block; + height: 1px; + width: 100%; + background-color: #4D4D4D;/*颜色需与主题大背景色一致*/ + position: relative; + top: 6px;/*调节线高*/ + font-size: 14px; + left: 0; +} +.line-text{ + display: inline-block; + background: #262626; + padding: 0 36px 0 36px; + position: relative; + /* font-weight: 500; */ + color: #999999; + font-family: Noto Sans CJK SC; +} + +div.hlist-div a[class="name2"] +{ + font-size: 16px; +} + +div.hlist-div a[class="name3"] +{ + font-size: 12px; +} + +div.hlist-div dl +{ + margin-top: 12px; + font-weight:400; + font-family:Noto Sans CJK SC; + color: rgb(29,29,31); + line-height:32px; +} + +div.hlist-div dt +{ + margin-top: 4px; + margin-left: 12px; + margin-right: 12px; +} + +div.hlist-div a +{ + font-family:Noto Sans CJK SC; + /* font-family: sans-serif; */ + /*text-indent: 20px;*/ +} + +div.hlist-div a:link +{ + display: block; + width: 158px; + height: 100%; + /* background-color: #262626; */ + color: white; + text-decoration: none; + border-radius: 6px; + padding-left: 16px; + padding-right: 12px; + padding-top: 6px; + padding-bottom: 6px; + line-height: 1.75; +} + +div.hlist-div a:hover +{ + background: rgba(18, 18, 18, 1); + /* color: white; */ +} + +div.content-div +{ + font-size: 14px; + color: #333; + /* width:75%; */ + height: 100%; + float:right; + /*padding-left: 2%;*/ + overflow-x:hidden; + overflow-y:hidden; + margin-left: 240px; + /* margin-left: 3%; */ + /* margin-right: 3%; */ + margin-right: 20px; + line-height: 1.75; +} + +div.content-div h1 +{ + text-align: left; + font-family: Noto Sans CJK SC; + font-size: 24px; + color: rgba(211, 211, 211, 1); + line-height: 36px; + /* text-indent: 16px; */ +} + +div.content-div h2 +{ + line-height: 34px; + font-family: Noto Sans CJK SC; + font-size: 20px; + color: rgba(211, 211, 211, 1) ; +} + +div.content-div h3 +{ + line-height: 30px; + font-family: Noto Sans CJK SC; + font-size: 18px; + color: rgba(61, 107, 229, 1); +} + +div.content-div h4 +{ + line-height: 28px; + font-family: Noto Sans CJK SC; + font-size: 16px; + color: rgba(211, 211, 211, 1); +} + +div.content-div h5 +{ + line-height: 24px; + font-family: Noto Sans CJK SC; + font-size: 14px; + color: rgba(211, 211, 211, 1) ; +} + +div.content-div h6 +{ + line-height: 20px; + font-family: Noto Sans CJK SC; + font-size: 14px; + color: rgba(211, 211, 211, 1); +} + +/* div.content-div h5 +{ + font-size: 10px; +} */ + +div.content-div li +{ + list-style:inside; +} + +div.content-div img +{ + margin:3px; + border:1px solid #bebebe; + border-radius: 8px; + object-fit: cover; +} + +div.content-div p +{ + font-family: Noto Sans CJK SC; + /* text-indent: 32px; */ + text-align: left; + color:rgb(211,211,211); + /*text-justify:inter-ideograph; + /*line-height: 20px;*/ +} + +img#logo +{ + width: 48px; + height: 48px; + border:0px; + float: left; + margin-top: 4px; +} + +div.top_title +{ + margin-bottom: 25px; + margin-top: 20px; +} + +p.date +{ + text-align: left; + font-size: 12px; + color: #737373; +} + +div.supportContent +{ + width: 320px; + height: 60px; + display: inline-block; + font-family: sans-serif; + font-size: 12px; + margin-bottom: 25px; + line-height: 20px; + color: rgb(138, 138, 138); + margin-left: 20px; + vertical-align: middle; +} + +div.supportEmail +{ + width: 250px; + height: 60px; + display: inline-block; + font-family: sans-serif; + font-size: 12px; + margin-bottom: 25px; + line-height: 20px; + color: rgb(138, 138, 138); + vertical-align: middle; +} + +a[target="_blank"] +{ + color: rgb(138, 138, 138); + /*text-decoration: none;*/ +} + +/*div.content-div h6 +{ + text-align: center; +}*/ + +div.paga_top +{ + /*position: fixed; + right: 50px; + bottom: 50px; + z-index: 999;*/ + text-align: right; + margin-top: 24px; + margin-right: 10px; + margin-bottom: 50px; + vertical-align: middle; + font-family:Noto Sans CJK SC; + color: white; + float: right; +} + +div.paga_top img +{ + position: relative; + top: 5px; + width: 14px; + height: 10px; + object-fit: cover; + border-radius: 0px; + border: 0px; +} + +hr +{ + border: 0; + background-color: #47474B ; + height: 1px; +} + +table { + width: 100%; + max-width: 820px; + border: 1px solid black; + margin: 15px auto; + border-collapse: collapse; + empty-cells: show; + color:white; +} +table th{ + font-weight: bold; + border: 1px solid #E9E9E9; + background-color: rgb(39,40,42); + padding: 0 12px; +} +table td{ + height: 35px; + border: 1px solid #E9E9E9; + background-color: rgb(29,29,31); + padding: 0 12px; +} +/*div#top +{ + display: inline-block; + width: 30px; + height: 30px; + position: fixed; + right: 5px; + bottom: 20px; + z-index: 999; + border-radius: 0px; + /*border: 1px black;*/ + /*background-color: #3D6BE5; +}*/ + +ul +{ + color:white; +} + +div#top img +{ + width: 90%; + height: 90%; +} +/* +[img~=svg] +{ + width:100px; + height: 100px; +} + +*/ diff --git a/src/web/css/guide-default.css b/src/web/css/guide-default.css new file mode 100644 index 0000000..0010ee0 --- /dev/null +++ b/src/web/css/guide-default.css @@ -0,0 +1,500 @@ +*,body,div{ + /* background:#F5F5F5; */ + margin:0;padding:0; + /* 禁用图片选中 */ + -moz-user-select:none; + -webkit-user-select:none; + user-select:none; +} + +::-webkit-scrollbar +{ + width: 6px; +/* display: none;*/ +} + +div.hlist-div::-webkit-scrollbar-track +{ + /* background:rgb(231,231,231); */ + /* background:#F5F5F5; */ +} + +::-webkit-scrollbar-thumb +{ + border-radius: 3px; + /* box-shadow: inset 0 0 5px rgb(128,128,128); */ + background: #E6E6E6; +} + +::-webkit-scrollbar-thumb:hover{ + background: #C6C9C9; +} + +::-webkit-scrollbar-thumb:active{ + background: #C6C9C9; +} + +::-webkit-scrollbar-track +{ + border-radius: 5px; + /* background:#F5F5F5; */ +} + +#mainUI +{ + margin-left: 4.7%; + margin-right: 4.7%; + margin-bottom: 50px; + margin-top: 40px; +} + +#mainUI h2 +{ + margin-top: 12px; + margin-bottom: 15px; + font-family:Noto Sans CJK SC; +} + +#pageContent li +{ + font-family:Noto Sans CJK SC; +} + +div.hlist-div +{ + float:left;/*目录框的位置*/ + overflow-y:auto;/*目录框添加滚动条*/ + position: fixed;/*目录框相对浏览器进行定位*/ + width:19%;/*目录框的宽度*/ + height: 100%; /*目录框的高度*/ + top: 0; + left: 0; + margin: 0%; +} + +div.system-app { + width: 120px; + height: 120px; + /*padding: 0 10px;*/ + display: inline-block; + text-align: center; + vertical-align: bottom; + /* background:rgba(244,244,244,1); */ + cursor: pointer; + border-radius:6px; + margin-left: 22px; + margin-bottom: 24px; + /*box-shadow:5px 5px 2px rgb(231,231,231);*/ +} + +div.system-app img { + width: 56px; + height: 56px; + margin-top: 21px; + /* background:rgba(244,244,244,1); */ + /*margin-bottom: 10px;*/ +} + +div.system-app span { + font-size: 14px; + font-weight: normal; + /* color: black; */ + /* background:rgba(244,244,244,1); */ + font-family: Noto Sans CJK SC; +} + +div.system-app:hover +{ + /*transform: translateY(-10px);*/ + /* background:#FFFFFF; */ +} + +div.system-app:hover span +{ + /* background:#FFFFFF; */ +} + +div.system-app:hover img +{ + /* background:#FFFFFF; */ +} + +div.system-app:active +{ + border-radius: 4px; + /* background:#FFFFFF; */ + color: white; +} + +div.system-app:active span +{ + /* background:#FFFFFF; */ + /* color: white; */ +} + +div.system-app:active img +{ + /* background:#FFFFFF; */ +} + +div.container +{ + width: 100%; + height: 31px; + margin-bottom: 15px; +} + +div.container button +{ + width: 24px; + height: 24px; + outline: none; + border: none; + position: relative; + top: 2px; + background-image: url('/usr/share/icons/ukui-icon-theme-default/scalable/actions/pan-down-symbolic.svg'); + background-color: #D8D8D8; + background-size: 24px 24px; + border-radius: 4px; +} + +div.container button:hover +{ + /* background-color: #FFFFFF; */ +} + +div.container button:active +{ + /* background-color: #FFFFFF; */ +} + +div.wrap +{ + width: 140px; + height: 31px; + z-index: 2; + /* background-color: #FFFFFF; */ + position: relative; +} + +/* div.line +{ + width: 95%; + border: 1px solid rgb(230, 230, 230); + position: relative; + left: 5%; + bottom: 16px; +} */ + +.line-main{ + margin:10rpx 0; + /* background: #F5F5F5; */ + text-align: center; + height: 10px; + padding: 0 30px; + line-height: 10px + } +.line:before{ + content: ''; + display: block; + height: 1px; + width: 100%; + background-color: rgba(0,0,0,0.06);/*颜色需与主题大背景色一致*/ + position: relative; + top: 6px;/*调节线高*/ + font-size: 14px; + left: 0; +} +.line-text{ + display: inline-block; + /* background: #F5F5F5; */ + padding: 0 36px 0 36px; + position: relative; + font-weight: 500; + color: #999999; +} + +div.hlist-div a[class="name2"] +{ + font-size: 16px; +} + +div.hlist-div a[class="name3"] +{ + font-size: 12px; +} + +div.hlist-div dl +{ + margin-top: 12px; + font-weight:400; + font-family:Noto Sans CJK SC; + line-height:32px; +} + +div.hlist-div dt +{ + margin-top: 4px; + margin-left: 2px; + margin-right: 4px; +} + +div.hlist-div a +{ + font-family:Noto Sans CJK SC; + /* font-family: sans-serif; */ + /*text-indent: 20px;*/ +} + +div.hlist-div a:link +{ + display: block; + width: 95%; + height: 100%; + color: black; + text-decoration: none; + border-radius: 4px; + padding-left: 10px; +} + +div.hlist-div a:hover +{ + /* background: rgba(218, 227, 250, 1); */ + /* color: white; */ +} + +div.content-div +{ + font-size: 14px; + color: #333; + width:75%; + height: 100%; + float:right; + /*padding-left: 2%;*/ + overflow-x:hidden; + overflow-y:hidden; + margin-left: 16px; + margin-left: 3%; + margin-right: 3%; + line-height: 1.75; +} + +div.content-div h1 +{ + text-align: left; + font-family: Noto Sans CJK SC; + font-size: 24px; + color: rgba(38, 38, 38, 1); + line-height: 36px; + /* text-indent: 16px; */ +} + +div.content-div h2 +{ + line-height: 34px; + font-family: Noto Sans CJK SC; + font-size: 20px; + color: rgba(64, 64, 64, 1) ; +} + +div.content-div h3 +{ + line-height: 30px; + font-family: Noto Sans CJK SC; + font-size: 18px; + color: rgba(61, 107, 229, 1); +} + +div.content-div h4 +{ + line-height: 28px; + font-family: Noto Sans CJK SC; + font-size: 16px; + color: rgba(89, 89, 89, 1); +} + +div.content-div h5 +{ + line-height: 24px; + font-family: Noto Sans CJK SC; + font-size: 14px; + color: rgba(89, 89, 89, 1) ; +} + +div.content-div h6 +{ + line-height: 20px; + font-family: Noto Sans CJK SC; + font-size: 14px; + color: rgba(89, 89, 89, 1); +} + +/* div.content-div h5 +{ + font-size: 10px; +} */ + +div.content-div li +{ + list-style:inside; +} + +div.content-div img +{ + margin:3px; + border:1px solid ; + border-radius: 8px; + object-fit: cover; +} + +div.content-div p +{ + font-family: Noto Sans CJK SC; + /* text-indent: 32px; */ + text-align: left; + /*text-justify:inter-ideograph; + /*line-height: 20px;*/ +} + +img#logo +{ + width: 48px; + height: 48px; + border:0px; + float: left; + margin-top: 4px; +} + +div.top_title +{ + margin-bottom: 25px; + margin-top: 20px; +} + +p.date +{ + text-align: left; + font-size: 12px; + color: #737373; + /* text-indent: 10px; */ +} + +div.supportContent +{ + width: 320px; + height: 60px; + display: inline-block; + font-family: sans-serif; + font-size: 12px; + margin-bottom: 25px; + line-height: 20px; + color: rgb(138, 138, 138); + margin-left: 20px; + vertical-align: middle; +} + +div.supportEmail +{ + width: 250px; + height: 60px; + display: inline-block; + font-family: sans-serif; + font-size: 12px; + margin-bottom: 25px; + line-height: 20px; + color: rgb(138, 138, 138); + vertical-align: middle; +} + +a[target="_blank"] +{ + color: rgb(138, 138, 138); + /*text-decoration: none;*/ +} + +/*div.content-div h6 +{ + text-align: center; +}*/ + +div.paga_top +{ + /*position: fixed; + right: 50px; + bottom: 50px; + z-index: 999;*/ + text-align: right; + margin-top: 24px; + margin-right: 10px; + margin-bottom: 50px; + vertical-align: middle; + font-family:Noto Sans CJK SC; + color: #6b8eeb; + float: right; +} + +div.paga_top img +{ + position: relative; + top: 5px; + width: 14px; + height: 10px; + object-fit: cover; + border-radius: 0px; + border: 0px; +} + +hr +{ + border: 0; + /* background-color: #E9E9E9 ; */ + height: 1px; +} + +table { + width: 100%; + max-width: 820px; + /* border: 1px solid #dedede; */ + margin: 15px auto; + border-collapse: collapse; + empty-cells: show; +} +table th{ + font-weight: bold; + /* border: 1px solid #E9E9E9; + background-color: #F7F7F7 ; */ + padding: 0 12px; +} +table td{ + height: 35px; + /* border: 1px solid #E9E9E9; + background-color: #FCFCFC ; */ + padding: 0 12px; +} +/*div#top +{ + display: inline-block; + width: 30px; + height: 30px; + position: fixed; + right: 5px; + bottom: 20px; + z-index: 999; + border-radius: 0px; + /*border: 1px black;*/ + /*background-color: #3D6BE5; +}*/ + +div#top img +{ + width: 90%; + height: 90%; +} +/* +[img~=svg] +{ + width:100px; + height: 100px; +} + +*/ diff --git a/src/web/css/guide-white.css b/src/web/css/guide-white.css new file mode 100644 index 0000000..fe9c767 --- /dev/null +++ b/src/web/css/guide-white.css @@ -0,0 +1,513 @@ +*,body,div{ + background:#F5F5F5; + margin:0;padding:0; + /* 禁用图片选中 */ + -moz-user-select:none; + -webkit-user-select:none; + user-select:none; +} + +::-webkit-scrollbar +{ + width: 6px; +/* display: none;*/ +} + +div.hlist-div::-webkit-scrollbar-track +{ + /* background:rgb(231,231,231); */ + background:#F5F5F5; +} + +::-webkit-scrollbar-thumb +{ + border-radius: 3px; + /* box-shadow: inset 0 0 5px rgb(128,128,128); */ + background: #E6E6E6; +} + +::-webkit-scrollbar-thumb:hover{ + background: #C6C9C9; +} + +::-webkit-scrollbar-thumb:active{ + background: #C6C9C9; +} + +::-webkit-scrollbar-track +{ + border-radius: 5px; + background:#F5F5F5; +} + +#mainUI +{ + margin-left: 4.7%; + margin-right: 4.7%; + margin-bottom: 50px; + margin-top: 40px; +} + +#mainUI h2 +{ + margin-top: 12px; + margin-bottom: 15px; + font-family:Noto Sans CJK SC; +} + +#pageContent li +{ + font-family:Noto Sans CJK SC; +} + +div.hlist-div +{ + float:left;/*目录框的位置*/ + overflow-y:auto;/*目录框添加滚动条*/ + position: fixed;/*目录框相对浏览器进行定位*/ + width: 200px;/*目录框的宽度*/ + height: 100%; /*目录框的高度*/ + top: 0; + left: 0; + margin: 0%; +} + +div.system-app { + width: 120px; + height: 120px; + /*padding: 0 10px;*/ + display: inline-block; + text-align: center; + vertical-align: bottom; + background:rgba(244,244,244,1); + cursor: pointer; + border-radius:6px; + margin-left: 22px; + margin-bottom: 24px; + /*box-shadow:5px 5px 2px rgb(231,231,231);*/ +} + +div.system-app img { + width: 36px; + height: 36px; + margin-top: 21px; + background:rgba(244,244,244,1); + /*margin-bottom: 10px;*/ +} + +div.system-app div { + /* width: 90px; + */ + font-size: 14px; + font-weight: normal; + color: black; + background:rgba(244,244,244,1); + font-family: Noto Sans CJK SC; + /* text-align: center; + margin-left: 14px; + margin-right: 14px; + display: block; */ + /* line-height: 80px; */ +} + +div.system-app:hover +{ + /*transform: translateY(-10px);*/ + background:#FFFFFF; +} + +div.system-app:hover div +{ + background:#FFFFFF; +} + +div.system-app:hover img +{ + background:#FFFFFF; +} + +div.system-app:active +{ + border-radius: 4px; + background:#FFFFFF; + color: white; +} + +div.system-app:active div +{ + background:#FFFFFF; + /* color: white; */ +} + +div.system-app:active img +{ + background:#FFFFFF; +} + +div.container +{ + width: 100%; + height: 31px; + margin-bottom: 15px; +} + +div.container button +{ + width: 24px; + height: 24px; + outline: none; + border: none; + position: relative; + top: 2px; + background-image: url('/usr/share/icons/ukui-icon-theme-default/scalable/actions/pan-down-symbolic.svg'); + background-color: #D8D8D8; + background-size: 24px 24px; + border-radius: 4px; +} + +div.container button:hover +{ + background-color: #FFFFFF; +} + +div.container button:active +{ + background-color: #FFFFFF; +} + +div.wrap +{ + width: 140px; + height: 31px; + z-index: 2; + background-color: #ffffff; + position: relative; +} + +/* div.line +{ + width: 95%; + border: 1px solid rgb(230, 230, 230); + position: relative; + left: 5%; + bottom: 16px; +} */ + +.line-main{ + margin:10rpx 0; + background: #F5F5F5; + text-align: center; + height: 10px; + padding: 0 30px; + line-height: 10px + } +.line:before{ + content: ''; + display: block; + height: 1px; + width: 100%; + background-color: rgba(0,0,0,0.06);/*颜色需与主题大背景色一致*/ + position: relative; + top: 6px;/*调节线高*/ + font-size: 14px; + left: 0; +} +.line-text{ + display: inline-block; + background: #F5F5F5; + padding: 0 36px 0 36px; + position: relative; + /* font-weight: 500; */ + color: #999999; + font-family: Noto Sans CJK SC; +} + +div.hlist-div a[class="name2"] +{ + font-size: 16px; +} + +div.hlist-div a[class="name3"] +{ + font-size: 12px; +} + +div.hlist-div dl +{ + margin-top: 12px; + font-weight:400; + font-family:Noto Sans CJK SC; + line-height:32px; +} + +div.hlist-div dt +{ + margin-top: 4px; + margin-left: 12px; + margin-right: 12px; +} + +div.hlist-div a +{ + font-family:Noto Sans CJK SC; + /* font-family: sans-serif; */ + /*text-indent: 20px;*/ +} + +div.hlist-div a:link +{ + display: block; + width: 158px; + height: 100%; + color: black; + text-decoration: none; + border-radius: 6px; + padding-left: 16px; + padding-right: 12px; + padding-top: 6px; + padding-bottom: 6px; + line-height: 1.75; +} + +div.hlist-div a:hover +{ + background: rgba(218, 227, 250, 1); + /* color: white; */ +} + +div.content-div +{ + font-size: 14px; + color: #333; + /* width:75%; */ + /* width: 560px; */ + height: 100%; + float:right; + /*padding-left: 2%;*/ + overflow-x:hidden; + overflow-y:hidden; + margin-left: 240px; + /* margin-left: 3%; */ + margin-right: 20px; + line-height: 1.75; +} + +div.content-div h1 +{ + text-align: left; + font-family: Noto Sans CJK SC; + font-size: 24px; + color: rgba(38, 38, 38, 1); + line-height: 36px; + /* text-indent: 16px; */ +} + +div.content-div h2 +{ + line-height: 34px; + font-family: Noto Sans CJK SC; + font-size: 20px; + color: rgba(64, 64, 64, 1) ; +} + +div.content-div h3 +{ + line-height: 30px; + font-family: Noto Sans CJK SC; + font-size: 18px; + color: rgba(61, 107, 229, 1); +} + +div.content-div h4 +{ + line-height: 28px; + font-family: Noto Sans CJK SC; + font-size: 16px; + color: rgba(89, 89, 89, 1); +} + +div.content-div h5 +{ + line-height: 24px; + font-family: Noto Sans CJK SC; + font-size: 14px; + color: rgba(89, 89, 89, 1) ; +} + +div.content-div h6 +{ + line-height: 20px; + font-family: Noto Sans CJK SC; + font-size: 14px; + color: rgba(89, 89, 89, 1); +} + +/* div.content-div h5 +{ + font-size: 10px; +} */ + +div.content-div li +{ + list-style:inside; +} + +div.content-div img +{ + margin:3px; + border:1px solid #bebebe; + border-radius: 8px; + object-fit: cover; +} + +div.content-div p +{ + font-family: Noto Sans CJK SC; + /* text-indent: 32px; */ + text-align: left; + /*text-justify:inter-ideograph; + /*line-height: 20px;*/ +} + +img#logo +{ + width: 48px; + height: 48px; + border:0px; + float: left; + margin-top: 4px; +} + +div.top_title +{ + margin-bottom: 25px; + margin-top: 20px; +} + +p.date +{ + text-align: left; + font-size: 12px; + color: #737373; + /* text-indent: 10px; */ +} + +div.supportContent +{ + width: 320px; + height: 60px; + display: inline-block; + font-family: sans-serif; + font-size: 12px; + margin-bottom: 25px; + line-height: 20px; + color: rgb(138, 138, 138); + margin-left: 20px; + vertical-align: middle; +} + +div.supportEmail +{ + width: 250px; + height: 60px; + display: inline-block; + font-family: sans-serif; + font-size: 12px; + margin-bottom: 25px; + line-height: 20px; + color: rgb(138, 138, 138); + vertical-align: middle; +} + +a[target="_blank"] +{ + color: rgb(138, 138, 138); + /*text-decoration: none;*/ +} + +/*div.content-div h6 +{ + text-align: center; +}*/ + +div.paga_top +{ + /*position: fixed; + right: 50px; + bottom: 50px; + z-index: 999;*/ + text-align: right; + margin-top: 24px; + margin-right: 10px; + margin-bottom: 50px; + vertical-align: middle; + font-family:Noto Sans CJK SC; + color: #6b8eeb; + float: right; +} + +div.paga_top img +{ + position: relative; + top: 5px; + width: 14px; + height: 10px; + object-fit: cover; + border-radius: 0px; + border: 0px; +} + +hr +{ + border: 0; + background-color: #E9E9E9 ; + height: 1px; +} + +table { + width: 100%; + max-width: 820px; + border: 1px solid #dedede; + margin: 15px auto; + border-collapse: collapse; + empty-cells: show; +} +table th{ + font-weight: bold; + border: 1px solid #E9E9E9; + background-color: #F7F7F7 ; + padding: 0 12px; +} +table td{ + height: 35px; + border: 1px solid #E9E9E9; + background-color: #FCFCFC ; + padding: 0 12px; +} +/*div#top +{ + display: inline-block; + width: 30px; + height: 30px; + position: fixed; + right: 5px; + bottom: 20px; + z-index: 999; + border-radius: 0px; + /*border: 1px black;*/ + /*background-color: #3D6BE5; +}*/ + +div#top img +{ + width: 90%; + height: 90%; +} +/* +[img~=svg] +{ + width:100px; + height: 100px; +} + +*/ diff --git a/src/web/index-ubuntukylin.html b/src/web/index-ubuntukylin.html new file mode 100644 index 0000000..517bfed --- /dev/null +++ b/src/web/index-ubuntukylin.html @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + +
+
+
+
+
系统环境
+
+
+
+
+ +
+ kylin-os-installer +
+
系统安装
+
+
+ ukui +
+
桌面环境
+
+
+ ukui-control-center +
+
设置
+
+
+ hot-key +
+
快捷键
+
+ +
+ peony +
+
文件管理器
+
+
+ mate-terminal +
+
终端
+
+
+ kylin-system-monitor +
+
系统监视器
+
+
+
+
+
+
应用工具
+
+
+
+
+
+
+
+
+
影音图像
+
+
+
+
+
+
+
+
+
办公娱乐
+
+
+
+
+
+
+
+
+
其他
+
+
+
+
+
+ + + +
+ + + + + + \ No newline at end of file diff --git a/src/web/index-ubuntukylin_black.html b/src/web/index-ubuntukylin_black.html new file mode 100644 index 0000000..d9fa6ec --- /dev/null +++ b/src/web/index-ubuntukylin_black.html @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + +
+
+
+
+
系统环境
+
+
+
+
+ +
+ kylin-os-installer +
+
系统安装
+
+
+ ukui +
+
桌面环境
+
+
+ ukui-control-center +
+
设置
+
+
+ hot-key +
+
快捷键
+
+ +
+ peony +
+
文件管理器
+
+
+ mate-terminal +
+
终端
+
+
+ kylin-system-monitor +
+
系统监视器
+
+
+
+
+
+
应用工具
+
+
+
+
+
+
+
+
+
影音图像
+
+
+
+
+
+
+
+
+
办公娱乐
+
+
+
+
+
+
+
+
+
其他
+
+
+
+
+
+ + + +
+ + + + + + \ No newline at end of file diff --git a/src/web/index-ubuntukylin_en_US.html b/src/web/index-ubuntukylin_en_US.html new file mode 100644 index 0000000..d7d3e4d --- /dev/null +++ b/src/web/index-ubuntukylin_en_US.html @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + +
+
+
+
+
System Environment
+
+
+
+
+ +
+ kylin-os-installer +
+
Kylin Os Installer
+
+
+ ukui +
+
UKUI
+
+
+ ukui-control-center +
+
Ukui Control Center
+
+
+ hot-key +
+
Hot key
+
+ +
+ peony +
+
Peony
+
+
+ mate-terminal +
+
Terminal
+
+
+ kylin-system-monitor +
+
System Monitor
+
+
+
+
+
+
Applications
+
+
+
+
+
+
+
+
+
Audio and Video
+
+
+
+
+
+
+
+
+
Office and Entertainment
+
+
+
+
+
+
+
+
+
Other
+
+
+
+
+
+ + + +
+ + + + + + \ No newline at end of file diff --git a/src/web/index-ubuntukylin_en_US_black.html b/src/web/index-ubuntukylin_en_US_black.html new file mode 100644 index 0000000..4cd8603 --- /dev/null +++ b/src/web/index-ubuntukylin_en_US_black.html @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + +
+
+
+
+
System Environment
+
+
+
+
+ +
+ kylin-os-installer +
+
Kylin Os Installer
+
+
+ ukui +
+
UKUI
+
+
+ ukui-control-center +
+
Ukui Control Center
+
+
+ hot-key +
+
Hot key
+
+ +
+ peony +
+
Peony
+
+
+ mate-terminal +
+
Terminal
+
+
+ kylin-system-monitor +
+
System Monitor
+
+
+
+
+
+
Applications
+
+
+
+
+
+
+
+
+
Audio and Video
+
+
+
+
+
+
+
+
+
Office and Entertainment
+
+
+
+
+
+
+
+
+
Other
+
+
+
+
+
+ + + +
+ + + + + + \ No newline at end of file diff --git a/src/web/js/guide.js b/src/web/js/guide.js new file mode 100644 index 0000000..17dd3fa --- /dev/null +++ b/src/web/js/guide.js @@ -0,0 +1,802 @@ +require.config({ + paths: { + "marked": "/usr/share/javascript/marked/marked.min", + } +}); +require(['marked'], function (markedSetCustom) { + + // alert('add marked'); + var marked = require('marked'); + marked.setOptions({ + renderer: new marked.Renderer(), + gfm: true, + tables: true, + breaks: false, + pedantic: false, + sanitize: false, + smartLists: true, + smartypants: false + }); + + console.log(marked('I am using __markdown__.')); + addhtmlapp(); +}); + +//readFile = function (fileName, callback) { +// var xhr = new XMLHttpRequest(); +// xhr.open('GET', fileName); +// xhr.onload = function () { +// if (xhr.responseText != '') { +// callback(xhr.responseText); +// } +// }; +// xhr.send(); +//}; + +var html_list = { + // onboard: "list_h1", + // atril: "list_h2", + // indicator_china_weather: "list_h4", + // kylin_recorder: "list_h5", + // kylin_usb_creator: "list_h6", + // kylin_screenshot: "list_h7", + // kylin_calculator: "list_h8", + // kylin_camera: "list_h9", + // kylin_scanner: "list_h10", + // ukui_notebook: "h14", + // ukui_clock: "h13", + // gnome_tetravex: "list_h1", + // gnome_mines: "list_h2", + // iagno: "list_h3", + error_code: "list_h18", +}; + +var jump_dict = { + display: "显示器|display", + audio: "声音|audio", + power: "电源|power", + notice: "通知|notice", + vino: "远程桌面|vino", + about: "关于|about", + bluetooth: "蓝牙|bluetooth", + printer: "打印机|printer", + mouse: "鼠标|mouse", + touchpad: "触控板|touchpad", + keyboard: "键盘|keyboard", + shortcut: "快捷键|shortcut", + touchscreen: "触摸屏|touchscreen", + projection: "多屏协同|projection", + netconnect: "有线网络|wiredconnect", + wlanconnect: "无线局域网|wlanconnect", + proxy: "代理|proxy", + vpn: "vpn|vpn", + mobilehotspot: "移动热点|mobilehotspot", + wallpaper: "背景|background", + theme: "主题|theme", + screenlock: "锁屏|screenlock", + screensaver: "屏保|screensaver", + fonts: "字体|fonts", + userinfo: "帐户信息|userinfo", + biometrics: "登录选项|biometrics", + cloudaccount: "云帐户|cloudaccount", + date: "时间和日期|date", + area: "区域语言|area", + backup: "备份|backup", + upgrade: "更新|upgrade", + securitycenter: "安全中心|securitycenter", + defaultapp: "默认应用|defaultapp", + autoboot: "开机启动|autoboot", + search: "搜索|search", +} + +//手册dbus跳转页面js接口函数 +function qt_jumpApp(appName) { + // 跳转页面后展示顶端内容 + $(window).scrollTop(0); + //去掉传过来字段两端的空格 + appName = appName.trim() + //判断是否是需要跳转标题的字段 + if (appName.search("/") >= 0) { + //处理字段可能开头就是"/"的情况 + if (appName.indexOf("/") == 0) { + appName = appName.slice(1, appName.length) + } + //截取跳转的app手册内容和显示app内容后的标题 + var list = appName.split("/") + if (list.length == 2) { + + //跳转app手册内容页面 + onclickButton(list[0]) + + //将“-”转换成“_” + if (list[1].search("-") >= 0) { + list[1] = list[1].replace(/-/g, "_"); + } + + //页面的资源都加载完成后跳转需要的标题 + $(document).ready(function () { + // 控制面板走新逻辑 + if ("ukui-control-center" == list[0]) { + // 中文状态取值、英文暂时不管 + var key = (list[1].replace(" ", "").toLowerCase()); + var value = jump_dict[key]; + // 检索匹配 + // 只做三级标题的匹配 + for (let heading of $('h3[id]')) { + const $heading = $(heading); + //去除空格 + var title = $heading.text().replace(" ", ""); + //英文模式下转小写 + title = title.toLowerCase(); + if (value.split('|').includes(title)) { + // 多个相同标题,选中第一个 + // onclickA("list_" + $heading.attr("id")); + // 滚动导航栏位置 + aim = "list_" + $heading.attr("id"); + // var t = $("#list_" + $heading.attr("id")).offset().top;// 获取需要跳转到标签的top值 + // document.getElementById('hlist').scrollTop = t; + break; + } + } + + if (aim.search("list_") >= 0) { + // document.getElementById('hlist').scrollTop = 0; + titleTOp = document.getElementById(aim).offsetTop; + // alert(mm); + // var titleTOp = $("#" + aim).offset().top;// 获取需要跳转到标签的top值 + // alert(t) + document.getElementById('hlist').scrollTop = titleTOp; + document.getElementById(aim).click() + } + // } else { + // var t = $("#" + aim).offset().top;// 获取需要跳转到标签的top值 + // document.getElementById('hlist').scrollTop = t; + // $(window).scrollTop(t);// 跳转到指定位置 + // } + + } else { + var target = html_list[list[1]] + if (target.search("list_") >= 0) { + document.getElementById(target).click() + } else { + var t = $("#" + target).offset().top;// 获取需要跳转到标签的top值 + $(window).scrollTop(t);// 跳转到指定位置 + } + } + }); + } + } + else { + onclickButton(appName); + document.getElementById('hlist').scrollTop = 0; + } +} + + +// 默认侧边栏展示比例 +var oriScrollbarW = 24; +function onclickButton(str) { + // alert(str) + //console.log(str+"======"+window.pageYOffset); + + //console.log(str,mdPath); + // alert(mdDate) + // getDocTOp在渲染的时候,可能会有报错 + // var m2ht = getDocTop(mdPath,mdDate); + try { + document.getElementById("mainUI").style.display = "none"; + document.getElementById("pageContent").style.display = "inline"; + + var mdPath = window.guideWebkit.js_getIndexMdFilePath(str) + var mdDate = window.guideWebkit.js_getIndexMdFileContent(mdPath) + var mdData = window.guideWebkit.js_getFileSystemInformation(mdPath) + var iconName = mdPath.split("/").slice(0, mdPath.split("/").length - 2) + iconName.push(iconName[iconName.length - 1] + ".png") + iconName = iconName.join("/") + //console.log(str,mdPath); + // alert(mdDate) + var m2ht = getDocTop(mdPath, mdDate) + } catch (err) { + console.log(err); + document.getElementById("mainUI").style.display = "none"; + document.getElementById("pageContent").style.display = "inline"; + + var mdPath = window.guideWebkit.js_getIndexMdFilePath(str) + var mdDate = window.guideWebkit.js_getIndexMdFileContent(mdPath) + var mdData = window.guideWebkit.js_getFileSystemInformation(mdPath) + var iconName = mdPath.split("/").slice(0, mdPath.split("/").length - 2) + iconName.push(iconName[iconName.length - 1] + ".png") + iconName = iconName.join("/") + m2ht = getDocTop(mdPath, mdDate); + } + var html = m2ht.html + var hlist = m2ht.hlist + var info = m2ht.info + //console.log(html); + //console.log("--------------------------------------hlist"); + //console.log(hlist); + //console.log("--------------------------------------info"); + //console.log(info); + var hlist_str = ""; + for (i = 0; i < hlist.length; i++) { + /*name_text=hlist[i].text.slice(hlist[i].text.indexOf(" "),hlist[i].text.length); + console.log(hlist[i].type+"======"+name_text); + if(hlist[i].type == "h1") + hlist_str += "

\n" + "" + name_text + " \n

" ; + else if(hlist[i].type == "h2") + hlist_str += "

\n" + "" + name_text + " \n

" ; + else if(hlist[i].type == "h3") + { + hlist_str += "

\n" + "" + name_text + " \n

" ; + console.log(hlist_str); + }*/ + var pattren = /[0-9]/; + var name_text = ""; + for (j = 0; j < hlist[i].text.length; j++) { + if (hlist[i].text[j] != "." && !pattren.test(hlist[i].text[j])) { + name_text += hlist[i].text[j]; + } + } + //console.log(hlist[i].type+"======"+name_text); + if (hlist[i].type == "h1") + hlist_str += "
\n" + "" + name_text + " \n
"; + else if (hlist[i].type == "h2") + if (name_text.length >= 11) { + hlist_str += "
\n" + "" + name_text + " \n
"; + } + else { + hlist_str += "
\n" + "" + name_text + " \n
"; + } + else if (hlist[i].type == "h3") { + //console.log(name_text.length); + if (name_text.length >= 11) { + hlist_str += "
\n" + "" + name_text + " \n
"; + } + else { + hlist_str += "
\n" + "" + name_text + " \n
"; + } + //console.log(hlist_str); + } + } + hlist_str = "
" + hlist_str + "
"; + // console.log(hlist_str); + str_name = str.replace(/-/g, "_"); + if (navigator.language == "zh-CN") { + var update = "更新时间:" + var goTop = "返回顶部" + } + else { + var update = "Update time:" + var goTop = "Go Top" + } + html_new = "
" + // " + + "

" + info.title + "

" + + "

" + + update + + mdData + + "

" + + "
" + + html + + "
" + + "
" + + "" + + "" + + goTop + + "" + + "
" + //+"
" + //+"" + //+"
" + + document.getElementById("hlist").innerHTML = hlist_str + document.getElementById("content").scrollTop = 0; + document.getElementById("content").innerHTML = html_new + + + $(window).scroll(scrollFun) + onclickA("list_h1") + + //var h= document.body.scrollHeight; + var ScrollBarHeight = window.innerHeight; + // 浮动添加div用以变化两边大小,滚动栏拖动函数 - 导航栏拖动暂时禁用 + // document.getElementById("content").innerHTML += "
"; + // document.getElementById("content").innerHTML += "
"; + // document.getElementById("content").innerHTML += "
"; + // 设置事件 + // dragScrollBar(); +} + +// home 返回顶部 +$(document).keydown(function (event) { + if (event.keyCode == 36) { + // 跳转页面后展示顶端内容 + $(window).scrollTop(0); + document.getElementById("hlist").scrollTop = 0; + onclickA('') + return; + } +}); + + +function scrollFun() { + for (let heading of $('h2[id],h3[id]')) { + const $heading = $(heading); + // console.log($heading.length+"==="+$heading.text()+"==="+($heading.offset().top - $(document).scrollTop())) + if ($heading.offset().top - $(document).scrollTop() > 10) { + break; + } + // console.log($("#list_"+$heading.attr("id")).offset().top+"===="+$(window).height()) + onclickA("list_" + $heading.attr("id")) + // if ($("#list_"+$heading.attr("id")).top - $(document).scrollTop()> $(window).height()) { + // $("#hlist").scrollTop($("#list_"+$heading.attr("id")).top); + // } + } +} + +function getapp_name(qpp) { + var dirforapp + var mdPath = window.guideWebkit.js_getIndexMdFilePathOther(qpp) + var mdDate = window.guideWebkit.js_getIndexMdFileContent(mdPath) + + console.log(mdPath) + + if (mdPath.search("/guide/") > 0) { + dirforapp = "guide" + } + else if (mdPath.search("/guide-ubuntukylin/") > 0) { + dirforapp = "guide-ubuntukylin" + } + + var info = window.guideWebkit.js_getIndexMdFileTitle(mdPath) + // console.log(window.guideWebkit.js_getIndexMdFileTitle(mdPath)) + //console.log(info+"======"+qpp) + if (info.search("帮助手册") < 0) { + return info + "|" + dirforapp; + } + else { + //console.log(info.title.slice(0,info.title.search("帮助手册"))) + return info.slice(0, info.search("帮助手册")) + "|" + dirforapp + } +} + +function addhtmlapp() { + var test = window.guideWebkit.js_getIntoFilename(); + var systemName = window.guideWebkit.JudgmentSystrm(); + if (systemName !== "Kylin") { + document.getElementById("support").style.display = "none"; + document.getElementById("sup").style.display = "none"; + document.getElementById("kylinOS").style.display = "none"; + } + // if(window.guideWebkit.js_getCpuArchitecture()){ + // document.getElementById("kydroid").style.display="none"; + // } + for (i = 0; i < test.length; i++) { + var dirname = test[i].slice(0, test[i].indexOf("|")) + var pngname = test[i].slice(test[i].indexOf("|") + 1, test[i].length) + if (dirname == "software-compatibility" || dirname == "technical-assistance" + || dirname == "ukui" || dirname == "ukui-control-center" + || dirname == "hot-key" + || dirname == "hardware-compatibility" + || dirname == "kylin-os-installer" + || dirname == "peony" + || dirname == "kylin-system-monitor" + || dirname == "mate-terminal" + ) { + continue + } + else { + if (navigator.language == "zh-CN") { + var NameAndDir = getapp_name(dirname); + var realname = NameAndDir.slice(0, NameAndDir.indexOf("|")); + var dir = NameAndDir.slice(NameAndDir.indexOf("|") + 1, NameAndDir.length) + // 这里对隐私与声明进行单独处理 + if ('银河麒麟最终用户使用许可协议和隐私政策声明' == realname) { + realname = '隐私与声明'; + } + } + else { + var NameAndDir = getapp_name(dirname); + var realname = NameAndDir.slice(0, NameAndDir.indexOf("|")); + var dir = NameAndDir.slice(NameAndDir.indexOf("|") + 1, NameAndDir.length) + + if (realname.search("-") >= 0) + realname = (realname.split("-").map(item => item[0].toUpperCase() + item.slice(1, item.length))).join(" ") + realname = (realname.split(" ").map(item => item[0].toUpperCase() + item.slice(1, item.length))).join(" ") + } + var element = document.getElementById("app"); + // 判断类型(应用工具/影音图像/办公娱乐/其他) + var officeElement = document.getElementById("office-entertainment-app"); + var otherElement = document.getElementById("other-app"); + var audioElement = document.getElementById("audio-video-app"); + + var para = document.createElement("div") + var node1 = document.createElement("br") + var node2 = document.createElement("img") + var node3 = document.createElement("div") + var apptext = document.createTextNode(realname) + var attr = document.createAttribute("onclick") + attr.value = "onclickButton('" + dirname + "')" + node3.appendChild(apptext) + node3.style.lineHeight = "22px" + node3.style.paddingLeft = "15px" + node3.style.paddingRight = "15px" + node2.src = "file:////usr/share/kylin-user-guide/data/" + dir + "/" + dirname + "/" + pngname + "" + node2.alt = dirname + para.id = "user"; + para.style.marginLeft = "26px"; + para.className = "system-app"; + //para.onclick(onclickButton('biometric-manager')) + para.setAttributeNode(attr) + para.appendChild(node2) + para.appendChild(node1) + para.appendChild(node3) + + otherList = ['Services-and-Supports', "kylinOS"]; + audioList = ['kylin-music', 'pictures', 'kylin-video', 'kylin-recorder', 'kylin-screenshot', 'kylin-scanner', 'kylin-camera']; + officeList = ['evolution', 'reversi', 'mines', 'tetravex', 'atril', 'kylin-calculator']; + + if (otherList.includes(dirname)) { + otherElement.appendChild(para); + } else if (audioList.includes(dirname)) { + audioElement.appendChild(para); + } else if (officeList.includes(dirname)) { + officeElement.appendChild(para); + } else { + element.appendChild(para); + } + + + } + } +} + +var style_name +function SwitchStyle(id) { + var css = document.getElementById("css") + if (id == 1) { + css.setAttribute("href", "css/guide-white.css"); + style_name = 1 + clearAllDtAttr() + } else { + css.setAttribute("href", "css/guide-black.css"); + style_name = 2 + clearAllDtAttr() + } +} + +function changebuttonicon(val) { + for (let i = 0; i < 3; i++) { + let buttonName = "button" + i.toString() + if (arrows_png[buttonName] == 0) { + if (val == 1) { + document.getElementById(buttonName).style.backgroundImage = 'url("/usr/share/icons/ukui-icon-theme-default/scalable/actions/pan-down-symbolic.svg")'; + } + if (val == 2) { + document.getElementById(buttonName).style.backgroundImage = 'url("/usr/share/kylin-user-guide/data/ukui-down-symbolic.svg")'; + + } + } + if (arrows_png["button" + i.toString()] == 1) { + if (val == 1) { + document.getElementById(buttonName).style.backgroundImage = 'url("/usr/share/icons/ukui-icon-theme-default/scalable/actions/pan-end-symbolic.svg")'; + } + if (val == 2) { + document.getElementById(buttonName).style.backgroundImage = 'url("/usr/share/kylin-user-guide/data/ukui-end-symbolic.svg")'; + } + } + document.getElementById(buttonName).style.backgroundSize = "24px 24px"; + } +} + +function clearAllDtAttr() { + var dt_list = document.getElementsByTagName("dt") + if (dt_list.length > 0) { + for (let i = 0; i < dt_list.length; i++) { + let elem = dt_list[i].children + if (elem[0].hasAttribute("style")) { + elem[0].removeAttribute("style") + Refresh_the_content_interface() + } + + } + } +} + +function goBackMainUI_ubuntu(style) { + if (navigator.language == "zh-CN") { + if ("2" == style) + window.location.href = "index-ubuntukylin_black.html" + else + window.location.href = "index-ubuntukylin.html" + } + else { + if ("2" == style) + window.location.href = "index-ubuntukylin_en_US_black.html" + else + window.location.href = "index-ubuntukylin_en_US.html" + } +} + +var arrows_div = { + system: 0, + app: 0, + support: 0, +} + +var arrows_big_png = { + width: 0, + height: 0, +} + +var arrows_png = { + button1: 0, + button2: 0, + button3: 0, +} + +function change_arrows(button_name) { + if (arrows_png[button_name] == 0) { + if (style_name == 1) { + document.getElementById(button_name).style.backgroundImage = "url(" + "/usr/share/icons/ukui-icon-theme-default/scalable/actions/pan-end-symbolic.svg" + ")"; + } + if (style_name == 2) { + document.getElementById(button_name).style.backgroundImage = "url(" + "/usr/share/kylin-user-guide/data/ukui-end-symbolic.svg" + ")"; + } + document.getElementById(button_name).style.backgroundSize = "24x 24px"; + arrows_png[button_name] = 1; + return + } + if (arrows_png[button_name] == 1) { + if (style_name == 1) { + document.getElementById(button_name).style.backgroundImage = "url(" + "/usr/share/icons/ukui-icon-theme-default/scalable/actions/pan-down-symbolic.svg" + ")"; + } + if (style_name == 2) { + document.getElementById(button_name).style.backgroundImage = "url(" + "/usr/share/kylin-user-guide/data/ukui-down-symbolic.svg" + ")"; + } + document.getElementById(button_name).style.backgroundSize = "24x 24px"; + arrows_png[button_name] = 0; + return + } +} + +function onclickarrows(str) { + //console.log(str) + if (str == 'system') { + if (arrows_div[str] == 0) { + document.getElementById(str).style.display = "none" + arrows_div.system = 1; + } + else { + document.getElementById(str).style.display = "inline" + arrows_div.system = 0; + } + } + else if (str == 'app') { + if (arrows_div[str] == 0) { + document.getElementById(str).style.display = "none" + arrows_div.app = 1; + } + else { + document.getElementById(str).style.display = "inline" + arrows_div.app = 0; + } + } + else if (str == 'support') { + if (arrows_div[str] == 0) { + document.getElementById(str).style.display = "none" + arrows_div.support = 1; + } + else { + document.getElementById(str).style.display = "inline" + arrows_div.support = 0; + } + } + +} + +var old_str = ""; +function onclickA(str) { + + resizeEvent(); + + // 返回首页逻辑调整 + if (str == "") { + str = "list_h1"; + // // alert(1); + // document.getElementById("hlist").scrollTop = 0; + // // onclickA("list_h1") + // $("#list_h1").css({ "backgroundColor": "#3D6BE5", "color": "white" }) + // old_str = "list_h1"; + } else { + for (let heading of $('h2[id],h3[id]')) { + const $heading = $(heading); + if ($heading.offset().top - $(document).scrollTop() > 20) { + break; + } + // 检测页面滚动后当前页面距离顶部最近的标题 + str = "list_" + $heading.attr("id"); + } + } + //console.log(old_str,str) + if (old_str != "") { + $("#" + old_str).removeAttr("style") + } + if (str != "") { + $("#" + str).css({ "backgroundColor": "#3790FA", "color": "white" }) + old_str = str + } + if (str == "") { + document.getElementById("hlist").scrollTop = 0; + } +} + +function Refresh_the_content_interface() { + if (old_str != "") { + document.getElementById(old_str).click() + } +} + +function getDocTop(mdFile, mdData) { + var hlist = []; + var info = {}; + var html = ''; + + var path = mdFile.slice(0, mdFile.lastIndexOf('/') + 1); + var count = 0; + var renderer = new marked.Renderer(); + renderer.heading = function (text, level) { + var id = 'h' + count; + count++; + if (level == 1) { + var title = text.split('|')[0]; + var logo = text.split('|')[1]; + logo = path + logo; + //console.log(logo); + info = { "title": title, "logo": logo }; + return ""; + } + if (level == 2) { + text = text.split('|')[0]; + //console.log(text); + } + var type = 'h' + level; + if (level == 2 || level == 3) { + hlist.push({ "id": id, "text": text, "type": type }); + //console.log(id); + //console.log(text); + //console.log(type); + } + return "<" + type + " id=" + id + " text=" + text + " class='html_h5'>" + text + "\n"; + }; + + // 内容页面图片展示 + renderer.image = function (href, title, text) { + var hrefX2 = href; + //console.log(hrefX2); + // if (devicePixelRatio >= 1.5 && href.indexOf('.svg') == -1) { + // var path = href.split('.'); + // var ext = path.pop(); + // // hrefX2 = `${path.join('.')}x2.${ext}`; + // hrefX2 = path.join('.')+ "x2." + ext; + // } + if (text == "") + // return `${text}`; + return ' + text + '; + else { + if (text.lastIndexOf("-big") < 0) { + // return `
${text}
${text}
`; + return '
 + text +
' + text + '
'; + } + else { + text1 = text.slice(0, text.lastIndexOf("-big")) + //路径需要用双引号,单引号无法解析相对路径 + // return `
${text}
${text1}
`; + var size = window.guideWebkit.js_getBigPngSize(path + hrefX2); + if (size[0] != 0 && size[1] != 0) + return '
 + text +
' + text1 + '
'; + else + return '
 + text +
' + text1 + '
'; + } + } + }; + renderer.table = function (header, body) { + //console.log(header,body) + if (body) body = '' + body + ''; + return '
\n' + + '\n' + + header + + '\n' + + body + + '
\n
'; + } + html = marked(mdData, { "renderer": renderer }).replace(/src="/g, '$&' + path); + return { "html": html, "hlist": hlist, "info": info }; +} + +// function $(id) { +// return document.getElementById(id) +// } + +function dragScrollBar() { + // var oPageWidth = $("box"), + // alert(1); + // 左侧导航栏宽度 + oTop = document.getElementById("hlist"); + // 右侧内容宽度 + oBottom = document.getElementById("content"); + //页面宽度 + oPageWidth = oTop.offsetWidth + oBottom.offsetWidth; + oScrollBar = document.getElementById("line"); + // 左侧最小宽度 + lMinWidth = 196; + // 右侧最小宽度(注意内外边距) + rMinWidth = 476; + oScrollBar.onmousedown = function (e) { + var disX = (e || event).clientX; + oScrollBar.left = oScrollBar.offsetLeft; + document.onmousemove = function (e) { + var iT = oScrollBar.left + ((e || event).clientX - disX); + var e = e || window.event, + tarnameb = e.target || e.srcElement; + var maxT = oPageWidth - oScrollBar.offsetWidth; + oScrollBar.style.margin = 0; + iT < lMinWidth && (iT = lMinWidth); + iT > maxT - rMinWidth && (iT = maxT - rMinWidth); + // 优化成百分比 + oriScrollbarW = oScrollBar.style.left = oTop.style.width = (iT / oPageWidth) * 100 + "%"; + oBottom.style.width = (oPageWidth - iT) / oPageWidth * 100 - 6 + "%"; + // 如果实时更新则可以采用像素跟随鼠标 + // oScrollBar.style.left = oTop.style.width = iT + "px"; + // oBottom.style.width = oPageWidth - iT) + "px"; + // $("msg").innerText = 'top.width:' + oScrollBar.style.width + '---bottom.width:' + oBottom.style.width + '---oScrollBar.offsetLeft:' + oScrollBar.offsetLeft + '---disX:' + disX + '---tarnameb:' + tarnameb.tagName; + return false + }; + document.onmouseup = function () { + document.onmousemove = null; + document.onmouseup = null; + oScrollBar.releaseCapture && oScrollBar.releaseCapture() + }; + oScrollBar.setCapture && oScrollBar.setCapture(); + return false + }; +}; + +var normalWidth = window.innerWidth; +var windowsWidth = $(window).width(); +var normalHeight = window.innerHeight; +window.onresize = function () { + // var windowsWidth = window.innerHeight; + // // 左侧导航栏宽度 + // oTop = document.getElementById("hlist"); + // oTop.style.width = 120 / windowsWidth * 100 + "%"; + // // 右侧内容宽度 + // oBottom = document.getElementById("content"); + // oBottom.style.width = (windowsWidth - 120) / windowsWidth * 100 + "%"; + // // alert(windowsWidth); + // // alert((windowsWidth - 120) / windowsWidth * 100); + // alert(oTop.style.width); + // alert(oBottom.style.width); + // 侧边栏拖动功能暂时停用 + // if (normalWidth > window.innerWidth || normalHeight < window.innerHeight) { + // //这里是发生放大缩小之后执行的方法 + // // 重绘 + // document.getElementBy + // Id("content").innerHTML += "
"; + // // 设置事件 + // dragScrollBar(); + // } + + resizeEvent(); + +} + +function resizeEvent() { + // 优化窗口放大时,左边宽度 + var contentWidth = document.documentElement.offsetWidth; + var leftNavWidth = 260; + document.getElementById("content").style.width = (contentWidth - leftNavWidth) + "px"; + // alert((contentWidth - 240) + "px"); +} diff --git a/src/web/js/readme b/src/web/js/readme new file mode 100644 index 0000000..a755a16 --- /dev/null +++ b/src/web/js/readme @@ -0,0 +1 @@ +i5ting-ztree diff --git a/src/xatom-helper.cpp b/src/xatom-helper.cpp new file mode 100644 index 0000000..5331e19 --- /dev/null +++ b/src/xatom-helper.cpp @@ -0,0 +1,214 @@ +/* + * KWin Style UKUI + * + * Copyright (C) 2020, KylinSoft Co., Ltd. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * Authors: Yue Lan + * + */ + +#include "xatom-helper.h" + +#include + +#include + +#include +#include + +static XAtomHelper *global_instance = nullptr; + +XAtomHelper *XAtomHelper::getInstance() +{ + if (!global_instance) + global_instance = new XAtomHelper; + return global_instance; +} + +bool XAtomHelper::isFrameLessWindow(int winId) +{ + auto hints = getInstance()->getWindowMotifHint(winId); + if (hints.flags == MWM_HINTS_DECORATIONS && hints.functions == 1) { + return true; + } + return false; +} + +bool XAtomHelper::isWindowDecorateBorderOnly(int winId) +{ + return isWindowMotifHintDecorateBorderOnly(getInstance()->getWindowMotifHint(winId)); +} + +bool XAtomHelper::isWindowMotifHintDecorateBorderOnly(const MotifWmHints &hint) +{ + bool isDeco = false; + if (hint.flags & MWM_HINTS_DECORATIONS && hint.flags != MWM_HINTS_DECORATIONS) { + if (hint.decorations == MWM_DECOR_BORDER) + isDeco = true; + } + return isDeco; +} + +bool XAtomHelper::isUKUICsdSupported() +{ + // fixme: + return false; +} + +bool XAtomHelper::isUKUIDecorationWindow(int winId) +{ + if (m_ukuiDecorationAtion == None) + return false; + + Atom type; + int format; + ulong nitems; + ulong bytes_after; + uchar *data; + + bool isUKUIDecoration = false; + + XGetWindowProperty(QX11Info::display(), winId, m_ukuiDecorationAtion, + 0, LONG_MAX, false, + m_ukuiDecorationAtion, &type, + &format, &nitems, + &bytes_after, &data); + + if (type == m_ukuiDecorationAtion) { + if (nitems == 1) { + isUKUIDecoration = data[0]; + } + } + + return isUKUIDecoration; +} + +UnityCorners XAtomHelper::getWindowBorderRadius(int winId) +{ + UnityCorners corners; + + Atom type; + int format; + ulong nitems; + ulong bytes_after; + uchar *data; + + if (m_unityBorderRadiusAtom != None) { + XGetWindowProperty(QX11Info::display(), winId, m_unityBorderRadiusAtom, + 0, LONG_MAX, false, + XA_CARDINAL, &type, + &format, &nitems, + &bytes_after, &data); + + if (type == XA_CARDINAL) { + if (nitems == 4) { + corners.topLeft = static_cast(data[0]); + corners.topRight = static_cast(data[1*sizeof (ulong)]); + corners.bottomLeft = static_cast(data[2*sizeof (ulong)]); + corners.bottomRight = static_cast(data[3*sizeof (ulong)]); + } + XFree(data); + } + } + + return corners; +} + +void XAtomHelper::setWindowBorderRadius(int winId, const UnityCorners &data) +{ + if (m_unityBorderRadiusAtom == None) + return; + + ulong corners[4] = {data.topLeft, data.topRight, data.bottomLeft, data.bottomRight}; + + XChangeProperty(QX11Info::display(), winId, m_unityBorderRadiusAtom, XA_CARDINAL, + 32, XCB_PROP_MODE_REPLACE, (const unsigned char *) &corners, sizeof (corners)/sizeof (corners[0])); +} + +void XAtomHelper::setWindowBorderRadius(int winId, int topLeft, int topRight, int bottomLeft, int bottomRight) +{ + if (m_unityBorderRadiusAtom == None) + return; + + ulong corners[4] = {(ulong)topLeft, (ulong)topRight, (ulong)bottomLeft, (ulong)bottomRight}; + + XChangeProperty(QX11Info::display(), winId, m_unityBorderRadiusAtom, XA_CARDINAL, + 32, XCB_PROP_MODE_REPLACE, (const unsigned char *) &corners, sizeof (corners)/sizeof (corners[0])); +} + +void XAtomHelper::setUKUIDecoraiontHint(int winId, bool set) +{ + if (m_ukuiDecorationAtion == None) + return; + + XChangeProperty(QX11Info::display(), winId, m_ukuiDecorationAtion, m_ukuiDecorationAtion, 32, XCB_PROP_MODE_REPLACE, (const unsigned char *) &set, 1); +} + +void XAtomHelper::setWindowMotifHint(int winId, const MotifWmHints &hints) +{ + if (m_unityBorderRadiusAtom == None) + return; + + XChangeProperty(QX11Info::display(), winId, m_motifWMHintsAtom, m_motifWMHintsAtom, + 32, XCB_PROP_MODE_REPLACE, (const unsigned char *)&hints, sizeof (MotifWmHints)/ sizeof (ulong)); +} + +MotifWmHints XAtomHelper::getWindowMotifHint(int winId) +{ + MotifWmHints hints; + + if (m_unityBorderRadiusAtom == None) + return hints; + + uchar *data; + Atom type; + int format; + ulong nitems; + ulong bytes_after; + + XGetWindowProperty(QX11Info::display(), winId, m_motifWMHintsAtom, + 0, sizeof (MotifWmHints)/sizeof (long), false, AnyPropertyType, &type, + &format, &nitems, &bytes_after, &data); + + if (type == None) { + return hints; + } else { + hints = *(MotifWmHints *)data; + XFree(data); + } + return hints; +} + +XAtomHelper::XAtomHelper(QObject *parent) : QObject(parent) +{ + if (!QX11Info::isPlatformX11()) + return; + + m_motifWMHintsAtom = XInternAtom(QX11Info::display(), "_MOTIF_WM_HINTS", true); + m_unityBorderRadiusAtom = XInternAtom(QX11Info::display(), "_UNITY_GTK_BORDER_RADIUS", false); + m_ukuiDecorationAtion = XInternAtom(QX11Info::display(), "_KWIN_UKUI_DECORAION", false); +} + +Atom XAtomHelper::registerUKUICsdNetWmSupportAtom() +{ + // fixme: + return None; +} + +void XAtomHelper::unregisterUKUICsdNetWmSupportAtom() +{ + // fixme: +} diff --git a/src/xatom-helper.h b/src/xatom-helper.h new file mode 100644 index 0000000..0ef847c --- /dev/null +++ b/src/xatom-helper.h @@ -0,0 +1,110 @@ +/* + * KWin Style UKUI + * + * Copyright (C) 2020, KylinSoft Co., Ltd. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * Authors: Yue Lan + * + */ + +#ifndef XATOMHELPER_H +#define XATOMHELPER_H + +#include + +#include + +struct UnityCorners { + ulong topLeft = 0; + ulong topRight = 0; + ulong bottomLeft = 0; + ulong bottomRight = 0; +}; + +typedef struct { + ulong flags = 0; + ulong functions = 0; + ulong decorations = 0; + long input_mode = 0; + ulong status = 0; +} MotifWmHints, MwmHints; + +#define MWM_HINTS_FUNCTIONS (1L << 0) +#define MWM_HINTS_DECORATIONS (1L << 1) +#define MWM_HINTS_INPUT_MODE (1L << 2) +#define MWM_HINTS_STATUS (1L << 3) + +#define MWM_FUNC_ALL (1L << 0) +#define MWM_FUNC_RESIZE (1L << 1) +#define MWM_FUNC_MOVE (1L << 2) +#define MWM_FUNC_MINIMIZE (1L << 3) +#define MWM_FUNC_MAXIMIZE (1L << 4) +#define MWM_FUNC_CLOSE (1L << 5) + +#define MWM_DECOR_ALL (1L << 0) +#define MWM_DECOR_BORDER (1L << 1) +#define MWM_DECOR_RESIZEH (1L << 2) +#define MWM_DECOR_TITLE (1L << 3) +#define MWM_DECOR_MENU (1L << 4) +#define MWM_DECOR_MINIMIZE (1L << 5) +#define MWM_DECOR_MAXIMIZE (1L << 6) + +#define MWM_INPUT_MODELESS 0 +#define MWM_INPUT_PRIMARY_APPLICATION_MODAL 1 +#define MWM_INPUT_SYSTEM_MODAL 2 +#define MWM_INPUT_FULL_APPLICATION_MODAL 3 +#define MWM_INPUT_APPLICATION_MODAL MWM_INPUT_PRIMARY_APPLICATION_MODAL + +#define MWM_TEAROFF_WINDOW (1L<<0) + +namespace UKUI { +class Decoration; +} + +class XAtomHelper : public QObject +{ + friend class UKUI::Decoration; + Q_OBJECT +public: + static XAtomHelper *getInstance(); + + static bool isFrameLessWindow(int winId); + + bool isWindowDecorateBorderOnly(int winId); + bool isWindowMotifHintDecorateBorderOnly(const MotifWmHints &hint); + bool isUKUICsdSupported(); + bool isUKUIDecorationWindow(int winId); + + UnityCorners getWindowBorderRadius(int winId); + void setWindowBorderRadius(int winId, const UnityCorners &data); + void setWindowBorderRadius(int winId, int topLeft, int topRight, int bottomLeft, int bottomRight); + void setUKUIDecoraiontHint(int winId, bool set = true); + + void setWindowMotifHint(int winId, const MotifWmHints &hints); + MotifWmHints getWindowMotifHint(int winId); + +private: + explicit XAtomHelper(QObject *parent = nullptr); + + Atom registerUKUICsdNetWmSupportAtom(); + void unregisterUKUICsdNetWmSupportAtom(); + + Atom m_motifWMHintsAtom = None; + Atom m_unityBorderRadiusAtom = None; + Atom m_ukuiDecorationAtion = None; +}; + +#endif // XATOMHELPER_H