使用 MDwiki 将 Markdown 发布成 HTML
用这个有用工具从 Markdown 文件创建一个基础的网站。Media
via https://linux.cn/article-10300-1.html
用这个有用工具从 Markdown 文件创建一个基础的网站。Media
via https://linux.cn/article-10300-1.html
使用 MDwiki 将 Markdown 发布成 HTML
用这个有用工具从 Markdown 文件创建一个基础的网站。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/01/220902kk0zo9hk0ky9k9zt.jpg">Media</a>有很多理由喜欢 Markdown,这是一门简单的语言,有易于学习的语法,它可以与任何文本编辑器一起使用。使用像 <a href="https://pandoc.org/">Pandoc</a> 这样的工具,你可以将 Markdown 文本转换为<a href="https://opensource.com/downloads/pandoc-cheat-sheet">各种流行格式</a>,包括 HTML。你还可以在 Web 服务器中自动执行转换过程。由 TimoDörr 创建的名为 <a href="http://dynalon.github.io/mdwiki/#!index.md">MDwiki</a> 的 HTML5 和 JavaScript 应用可以将一堆 Markdown 文件在浏览器请求它们时转换为网站。MDwiki 网站包含一个操作指南和其他信息可帮助你入门:<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/01/220906kbymvumjv990jymp.png">MDwiki site getting started</a><em>Mdwiki 网站的样子。</em>在 Web 服务器内部,基本的 MDwiki 站点如下所示:<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/01/220907v9v21t2qq629tzkn.png">MDwiki site inside web server</a><em>该站点的 web 服务器文件夹的样子</em>我将此项目的 MDwiki HTML 文件重命名为 START.HTML。还有一个处理导航的 Markdown 文件和一个 JSON 文件来保存一些配置设置。其他的都是网站内容。虽然整个网站设计被 MDwiki 固定了,但内容、样式和页面数量却没有。你可以在 <a href="http://dynalon.github.io/mdwiki/#!examples.md">MDwiki 站点</a>查看由 MDwiki 生成的一系列不同站点。公平地说,MDwiki 网站缺乏网页设计师可以实现的视觉吸引力 —— 但它们是功能性的,用户应该平衡其简单的外观与创建和编辑它们的速度和简易性。Markdown 有不同的风格,可以针对不同的特定目的扩展稳定的核心功能。MDwiki 使用 GitHub 风格…
用这个有用工具从 Markdown 文件创建一个基础的网站。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/01/220902kk0zo9hk0ky9k9zt.jpg">Media</a>有很多理由喜欢 Markdown,这是一门简单的语言,有易于学习的语法,它可以与任何文本编辑器一起使用。使用像 <a href="https://pandoc.org/">Pandoc</a> 这样的工具,你可以将 Markdown 文本转换为<a href="https://opensource.com/downloads/pandoc-cheat-sheet">各种流行格式</a>,包括 HTML。你还可以在 Web 服务器中自动执行转换过程。由 TimoDörr 创建的名为 <a href="http://dynalon.github.io/mdwiki/#!index.md">MDwiki</a> 的 HTML5 和 JavaScript 应用可以将一堆 Markdown 文件在浏览器请求它们时转换为网站。MDwiki 网站包含一个操作指南和其他信息可帮助你入门:<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/01/220906kbymvumjv990jymp.png">MDwiki site getting started</a><em>Mdwiki 网站的样子。</em>在 Web 服务器内部,基本的 MDwiki 站点如下所示:<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/01/220907v9v21t2qq629tzkn.png">MDwiki site inside web server</a><em>该站点的 web 服务器文件夹的样子</em>我将此项目的 MDwiki HTML 文件重命名为 START.HTML。还有一个处理导航的 Markdown 文件和一个 JSON 文件来保存一些配置设置。其他的都是网站内容。虽然整个网站设计被 MDwiki 固定了,但内容、样式和页面数量却没有。你可以在 <a href="http://dynalon.github.io/mdwiki/#!examples.md">MDwiki 站点</a>查看由 MDwiki 生成的一系列不同站点。公平地说,MDwiki 网站缺乏网页设计师可以实现的视觉吸引力 —— 但它们是功能性的,用户应该平衡其简单的外观与创建和编辑它们的速度和简易性。Markdown 有不同的风格,可以针对不同的特定目的扩展稳定的核心功能。MDwiki 使用 GitHub 风格…
Systemd 定时器:三种使用场景
继续 systemd 教程,这些特殊的例子可以展示给你如何更好的利用 systemd 定时器单元。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/02/093439gam6n0m35b3hibic.jpg">Media</a>在这个 systemd 系列教程中,我们<a href="https://linux.cn/article-10182-1.html">已经在某种程度上讨论了 systemd 定时器单元</a>。不过,在我们开始讨论 sockets 之前,我们先来看三个例子,这些例子展示了如何最佳化利用这些单元。简单的类 cron 行为我每周都要去收集 <a href="https://popcon.debian.org/">Debian popcon 数据</a>,如果每次都能在同一时间收集更好,这样我就能看到某些应用程序的下载趋势。这是一个可以使用 cron 任务来完成的典型事例,但 systemd 定时器同样能做到:<pre class="prettyprint linenums"># 类 cron 的 popcon.timer[Unit]Description= 这里描述了下载并处理 popcon 数据的时刻[Timer]OnCalendar= Thu *-*-* 05:32:07Unit= popcon.service[Install]WantedBy= basic.target</pre>实际的 popcon.service 会执行一个常规的 wget 任务,并没有什么特别之处。这里的新内容是 OnCalendar= 指令。这个指令可以让你在一个特定日期的特定时刻来运行某个服务。在这个例子中,Thu 表示 “在周四运行”,*-*-* 表示“具体年份、月份和日期无关紧要”,这些可以翻译成 “不管年月日,只在每周四运行”。这样,你就设置了这个服务的运行时间。我选择在欧洲中部夏令时区的上午 5:30 左右运行,那个时候服务器不是很忙。如果你的服务器关闭了,而且刚好错过了每周的截止时间,你还可以在同一个计时器中使用像 anacron 一样的功能。<pre class="prettyprint linenums"># 具备类似 anacron 功能的…
继续 systemd 教程,这些特殊的例子可以展示给你如何更好的利用 systemd 定时器单元。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/02/093439gam6n0m35b3hibic.jpg">Media</a>在这个 systemd 系列教程中,我们<a href="https://linux.cn/article-10182-1.html">已经在某种程度上讨论了 systemd 定时器单元</a>。不过,在我们开始讨论 sockets 之前,我们先来看三个例子,这些例子展示了如何最佳化利用这些单元。简单的类 cron 行为我每周都要去收集 <a href="https://popcon.debian.org/">Debian popcon 数据</a>,如果每次都能在同一时间收集更好,这样我就能看到某些应用程序的下载趋势。这是一个可以使用 cron 任务来完成的典型事例,但 systemd 定时器同样能做到:<pre class="prettyprint linenums"># 类 cron 的 popcon.timer[Unit]Description= 这里描述了下载并处理 popcon 数据的时刻[Timer]OnCalendar= Thu *-*-* 05:32:07Unit= popcon.service[Install]WantedBy= basic.target</pre>实际的 popcon.service 会执行一个常规的 wget 任务,并没有什么特别之处。这里的新内容是 OnCalendar= 指令。这个指令可以让你在一个特定日期的特定时刻来运行某个服务。在这个例子中,Thu 表示 “在周四运行”,*-*-* 表示“具体年份、月份和日期无关紧要”,这些可以翻译成 “不管年月日,只在每周四运行”。这样,你就设置了这个服务的运行时间。我选择在欧洲中部夏令时区的上午 5:30 左右运行,那个时候服务器不是很忙。如果你的服务器关闭了,而且刚好错过了每周的截止时间,你还可以在同一个计时器中使用像 anacron 一样的功能。<pre class="prettyprint linenums"># 具备类似 anacron 功能的…
如何在 Linux 上对驱动器进行分区和格式化
这里有所有你想知道的关于设置存储器而又不敢问的一切。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/02/101229zxxr151pajxwzj45.jpg">Media</a>在大多数的计算机系统上,Linux 或者是其它,当你插入一个 USB 设备时,你会注意到一个提示驱动器存在的警告。如果该驱动器已经按你想要的进行分区和格式化,你只需要你的计算机在文件管理器或桌面上的某个地方列出驱动器。这是一个简单的要求,而且通常计算机都能满足。然而,有时候,驱动器并没有按你想要的方式进行格式化。对于这些,你必须知道如何查找准备连接到您计算机上的存储设备。什么是块设备?硬盘驱动器通常被称为“块设备”,因为硬盘驱动器以固定大小的块进行读写。这就可以区分硬盘驱动器和其它可能插入到您计算机的一些设备,如打印机、游戏手柄、麦克风,或相机。一个简单的方法用来列出连接到你 Linux 系统上的块设备就是使用 lsblk (list block devices)命令:<pre class="prettyprint linenums">NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsda 8:0 0 238.5G 0 disk ├─sda1 8:1 0 1G 0 part /boot└─sda2 8:2 0 237.5G 0 part └─luks-e2bb...e9f8 253:0 0 237.5G 0 crypt ├─fedora-root 253:1 0 50G 0 lvm / ├─fedora-swap 253:2 0 5.8G 0 lvm [SWAP] └─fedora-home 253:3 0 181.7G 0 lvm /homesdb 8:16 1 14.6G 0 disk └─sdb1 8:17 1 14.6G 0 part</pre>最左列是设备标识符,每个都是以 sd 开头,并以一个字母结尾,字母从 a 开始。每个块设备上的分区分配一个数字,从 1 开始。例如,第一个设备上的第二个分区用 sda2 表示。如果你不确定到底是哪个分区,&…
这里有所有你想知道的关于设置存储器而又不敢问的一切。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/02/101229zxxr151pajxwzj45.jpg">Media</a>在大多数的计算机系统上,Linux 或者是其它,当你插入一个 USB 设备时,你会注意到一个提示驱动器存在的警告。如果该驱动器已经按你想要的进行分区和格式化,你只需要你的计算机在文件管理器或桌面上的某个地方列出驱动器。这是一个简单的要求,而且通常计算机都能满足。然而,有时候,驱动器并没有按你想要的方式进行格式化。对于这些,你必须知道如何查找准备连接到您计算机上的存储设备。什么是块设备?硬盘驱动器通常被称为“块设备”,因为硬盘驱动器以固定大小的块进行读写。这就可以区分硬盘驱动器和其它可能插入到您计算机的一些设备,如打印机、游戏手柄、麦克风,或相机。一个简单的方法用来列出连接到你 Linux 系统上的块设备就是使用 lsblk (list block devices)命令:<pre class="prettyprint linenums">NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsda 8:0 0 238.5G 0 disk ├─sda1 8:1 0 1G 0 part /boot└─sda2 8:2 0 237.5G 0 part └─luks-e2bb...e9f8 253:0 0 237.5G 0 crypt ├─fedora-root 253:1 0 50G 0 lvm / ├─fedora-swap 253:2 0 5.8G 0 lvm [SWAP] └─fedora-home 253:3 0 181.7G 0 lvm /homesdb 8:16 1 14.6G 0 disk └─sdb1 8:17 1 14.6G 0 part</pre>最左列是设备标识符,每个都是以 sd 开头,并以一个字母结尾,字母从 a 开始。每个块设备上的分区分配一个数字,从 1 开始。例如,第一个设备上的第二个分区用 sda2 表示。如果你不确定到底是哪个分区,&…
使用 Selenium 自动化 Web 浏览器
Selenium 是浏览器自动化的绝佳工具。使用 Selenium IDE,你可以录制命令序列(如单击、拖动和输入),验证结果并最终存储此自动化测试供日后使用。Media
via https://linux.cn/article-10303-1.html
Selenium 是浏览器自动化的绝佳工具。使用 Selenium IDE,你可以录制命令序列(如单击、拖动和输入),验证结果并最终存储此自动化测试供日后使用。Media
via https://linux.cn/article-10303-1.html
使用 Selenium 自动化 Web 浏览器
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/02/221155nvsjusbroxsaj2r2.jpg">Media</a><a href="https://www.seleniumhq.org/">Selenium</a> 是浏览器自动化的绝佳工具。使用 Selenium IDE,你可以录制命令序列(如单击、拖动和输入),验证结果并最终存储此自动化测试供日后使用。这非常适合在浏览器中进行活跃开发。但是当你想要将这些测试与 CI/CD 流集成时,是时候使用 Selenium WebDriver 了。WebDriver 公开了一个绑定了许多编程语言的 API,它允许你将浏览器测试与其他测试集成。这篇文章向你展示了如何在容器中运行 WebDriver 并将其与 Python 程序一起使用。使用 Podman 运行 SeleniumPodman 是下面例子的容器运行时。有关如何开始使用 Podman 的信息,请参见<a href="https://linux.cn/article-10156-1.html">此前文章</a>。此例使用了 Selenium 的独立容器,其中包含 WebDriver 服务器和浏览器本身。要在后台启动服务器容器,请运行以下命令:<pre class="prettyprint linenums">$ podman run -d --network host --privileged --name server docker.io/selenium/standalone-firefox</pre>当你使用特权标志和主机网络运行容器时,你可以稍后从在 Python 中连接到此容器。你不需要使用 sudo。在 Python 中使用 Selenium现在你可以提供一个使用此服务器的简单程序。这个程序很小,但应该会让你知道可以做什么:<pre class="prettyprint linenums">from selenium.webdriver.common.desired_capabilities import DesiredCapabilitiesserver ="http://127.0.0.1:4444/wd/hub"driver = webdriver.Remote(command_executor=server, desired_capabilities=DesiredCapabilities.FIREFOX)print("Loading page...")driver.get("https://fedoramagazine.org/")print("Loaded")assert "Fedora" in driver.titledriver.quit()print("Done.")</pre>首先,程序连接到你已经启动的容器。然后它加载 Fedora Magazine 网页并判断 “Fedora” 是页面标题的一部分。最后,它退出会话。…
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/02/221155nvsjusbroxsaj2r2.jpg">Media</a><a href="https://www.seleniumhq.org/">Selenium</a> 是浏览器自动化的绝佳工具。使用 Selenium IDE,你可以录制命令序列(如单击、拖动和输入),验证结果并最终存储此自动化测试供日后使用。这非常适合在浏览器中进行活跃开发。但是当你想要将这些测试与 CI/CD 流集成时,是时候使用 Selenium WebDriver 了。WebDriver 公开了一个绑定了许多编程语言的 API,它允许你将浏览器测试与其他测试集成。这篇文章向你展示了如何在容器中运行 WebDriver 并将其与 Python 程序一起使用。使用 Podman 运行 SeleniumPodman 是下面例子的容器运行时。有关如何开始使用 Podman 的信息,请参见<a href="https://linux.cn/article-10156-1.html">此前文章</a>。此例使用了 Selenium 的独立容器,其中包含 WebDriver 服务器和浏览器本身。要在后台启动服务器容器,请运行以下命令:<pre class="prettyprint linenums">$ podman run -d --network host --privileged --name server docker.io/selenium/standalone-firefox</pre>当你使用特权标志和主机网络运行容器时,你可以稍后从在 Python 中连接到此容器。你不需要使用 sudo。在 Python 中使用 Selenium现在你可以提供一个使用此服务器的简单程序。这个程序很小,但应该会让你知道可以做什么:<pre class="prettyprint linenums">from selenium.webdriver.common.desired_capabilities import DesiredCapabilitiesserver ="http://127.0.0.1:4444/wd/hub"driver = webdriver.Remote(command_executor=server, desired_capabilities=DesiredCapabilities.FIREFOX)print("Loading page...")driver.get("https://fedoramagazine.org/")print("Loaded")assert "Fedora" in driver.titledriver.quit()print("Done.")</pre>首先,程序连接到你已经启动的容器。然后它加载 Fedora Magazine 网页并判断 “Fedora” 是页面标题的一部分。最后,它退出会话。…
对网站进行归档
本文介绍了对传统网站进行归档的过程,并阐述在面对最新流行单页面应用程序(SPA)的现代网站时,它有哪些不足。Media
via https://linux.cn/article-10304-1.html
本文介绍了对传统网站进行归档的过程,并阐述在面对最新流行单页面应用程序(SPA)的现代网站时,它有哪些不足。Media
via https://linux.cn/article-10304-1.html
对网站进行归档
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/03/100652pwnujw5w8iwnuifn.jpg">Media</a>我最近深入研究了网站归档,因为有些朋友担心遇到糟糕的系统管理或恶意删除时失去对放在网上的内容的控制权。这使得网站归档成为系统管理员工具箱中的重要工具。事实证明,有些网站比其他网站更难归档。本文介绍了对传统网站进行归档的过程,并阐述在面对最新流行单页面应用程序(SPA)的现代网站时,它有哪些不足。转换为简单网站手动编码 HTML 网站的日子早已不复存在。现在的网站是动态的,并使用最新的 JavaScript、PHP 或 Python 框架即时构建。结果,这些网站更加脆弱:数据库崩溃、升级出错或者未修复的漏洞都可能使数据丢失。在我以前是一名 Web 开发人员时,我不得不接受客户这样的想法:希望网站基本上可以永久工作。这种期望与 web 开发“快速行动和破除陈规”的理念不相符。在这方面,使用 <a href="https://drupal.org">Drupal</a> 内容管理系统(CMS)尤其具有挑战性,因为重大更新会破坏与第三方模块的兼容性,这意味着客户很少承担的起高昂的升级成本。解决方案是将这些网站归档:以实时动态的网站为基础,将其转换为任何 web 服务器可以永久服务的纯 HTML 文件。此过程对你自己的动态网站非常有用,也适用于你想保护但无法控制的第三方网站。对于简单的静态网站,古老的 <a href="https://www.gnu.org/software/wget/">Wget</a> 程序就可以…
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/03/100652pwnujw5w8iwnuifn.jpg">Media</a>我最近深入研究了网站归档,因为有些朋友担心遇到糟糕的系统管理或恶意删除时失去对放在网上的内容的控制权。这使得网站归档成为系统管理员工具箱中的重要工具。事实证明,有些网站比其他网站更难归档。本文介绍了对传统网站进行归档的过程,并阐述在面对最新流行单页面应用程序(SPA)的现代网站时,它有哪些不足。转换为简单网站手动编码 HTML 网站的日子早已不复存在。现在的网站是动态的,并使用最新的 JavaScript、PHP 或 Python 框架即时构建。结果,这些网站更加脆弱:数据库崩溃、升级出错或者未修复的漏洞都可能使数据丢失。在我以前是一名 Web 开发人员时,我不得不接受客户这样的想法:希望网站基本上可以永久工作。这种期望与 web 开发“快速行动和破除陈规”的理念不相符。在这方面,使用 <a href="https://drupal.org">Drupal</a> 内容管理系统(CMS)尤其具有挑战性,因为重大更新会破坏与第三方模块的兼容性,这意味着客户很少承担的起高昂的升级成本。解决方案是将这些网站归档:以实时动态的网站为基础,将其转换为任何 web 服务器可以永久服务的纯 HTML 文件。此过程对你自己的动态网站非常有用,也适用于你想保护但无法控制的第三方网站。对于简单的静态网站,古老的 <a href="https://www.gnu.org/software/wget/">Wget</a> 程序就可以…
提高 Linux 的网络浏览器安全性的 5 个建议
这些简单的步骤可以大大提高您的在线安全性。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/03/101700z05r3m0r3jp4r1q4.jpg">Media</a>如果你使用 Linux 桌面但从来不使用网络浏览器,那你算得上是百里挑一。网络浏览器是绝大多数人最常用的工具之一,无论是工作、娱乐、看新闻、社交、理财,对网络浏览器的依赖都比本地应用要多得多。因此,我们需要知道如何使用网络浏览器才是安全的。一直以来都有不法的犯罪分子以及他们建立的网页试图窃取私密的信息。正是由于我们需要通过网络浏览器收发大量的敏感信息,安全性就更是至关重要。对于用户来说,需要采取什么措施呢?在下文中,我会提出一些基本的建议,让你的重要数据不会被他人轻易窃取。尽管我用于演示的是 Firefox 网络浏览器,但其中大部分建议在任何一种网络浏览器当中都可以适用。正确选择浏览器尽管我提出的建议具有普适性,但是正确选择网络浏览器也是很必要的。网络浏览器的更新频率是它安全性的一个重要体现。网络浏览器会不断暴露出新的问题,因此版本越新的网络浏览器修复的问题就越多,也越安全。在主流的网络浏览器当中,2017 年版本更新的发布量排行榜如下:Chrome 发布了 8 个更新(Chromium 全年跟进发布了大量安全补丁)。Firefox 发布了 7 个更新。Edge 发布了 2 个更新。Safari 发&…
这些简单的步骤可以大大提高您的在线安全性。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/03/101700z05r3m0r3jp4r1q4.jpg">Media</a>如果你使用 Linux 桌面但从来不使用网络浏览器,那你算得上是百里挑一。网络浏览器是绝大多数人最常用的工具之一,无论是工作、娱乐、看新闻、社交、理财,对网络浏览器的依赖都比本地应用要多得多。因此,我们需要知道如何使用网络浏览器才是安全的。一直以来都有不法的犯罪分子以及他们建立的网页试图窃取私密的信息。正是由于我们需要通过网络浏览器收发大量的敏感信息,安全性就更是至关重要。对于用户来说,需要采取什么措施呢?在下文中,我会提出一些基本的建议,让你的重要数据不会被他人轻易窃取。尽管我用于演示的是 Firefox 网络浏览器,但其中大部分建议在任何一种网络浏览器当中都可以适用。正确选择浏览器尽管我提出的建议具有普适性,但是正确选择网络浏览器也是很必要的。网络浏览器的更新频率是它安全性的一个重要体现。网络浏览器会不断暴露出新的问题,因此版本越新的网络浏览器修复的问题就越多,也越安全。在主流的网络浏览器当中,2017 年版本更新的发布量排行榜如下:Chrome 发布了 8 个更新(Chromium 全年跟进发布了大量安全补丁)。Firefox 发布了 7 个更新。Edge 发布了 2 个更新。Safari 发&…
如何在 Linux 中为每个屏幕设置不同的壁纸
如果你想在 Ubuntu 18.04 或任何其他 Linux 发行版上使用 GNOME、MATE 或 Budgie 桌面环境在多个显示器上显示不同的壁纸,这个小工具将帮助你实现这一点。Media
via https://linux.cn/article-10306-1.html
如果你想在 Ubuntu 18.04 或任何其他 Linux 发行版上使用 GNOME、MATE 或 Budgie 桌面环境在多个显示器上显示不同的壁纸,这个小工具将帮助你实现这一点。Media
via https://linux.cn/article-10306-1.html
如何在 Linux 中为每个屏幕设置不同的壁纸
如果你想在 Ubuntu 18.04 或任何其他 Linux 发行版上使用 GNOME、MATE 或 Budgie 桌面环境在多个显示器上显示不同的壁纸,这个小工具将帮助你实现这一点。多显示器设置通常会在 Linux 上出现多个问题,但我不打算在本文中讨论这些问题。我有另外一篇关于 Linux 上多显示器支持的文章。如果你使用多台显示器,也许你想为每台显示器设置不同的壁纸。我不确定其他 Linux 发行版和桌面环境,但是 <a href="https://www.gnome.org/">GNOME 桌面</a> 的 Ubuntu 本身并不提供此功能。不要烦恼!在本教程中,我将向你展示如何使用 GNOME 桌面环境为 Linux 发行版上的每个显示器设置不同的壁纸。在 Ubuntu 18.04 和其他 Linux 发行版上为每个显示器设置不同的壁纸<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/03/102549hroplu5pol5cc2oq.jpg">Different wallaper on each monitor in Ubuntu</a>我将使用一个名为 <a href="https://github.com/GabMus/HydraPaper">HydraPaper</a> 的小工具在不同的显示器上设置不同的背景。HydraPaper 是一个基于 <a href="https://www.gtk.org/">GTK</a> 的应用,用于为 <a href="https://itsfoss.com/gnome-tricks-ubuntu/">GNOME 桌面环境</a>中的每个显示器设置不同的背景。它还支持 <a href="https://mate-desktop.org/">MATE</a> 和 <a href="https://budgie-desktop.org/home/">Budgie</a> 桌面环境。这意味着 Ubuntu MATE 和 <a href="https://itsfoss.com/ubuntu-budgie-18-review/">Ubuntu Budgie</a> 用户也可以从这个应用中受益。使用 FlatPak 在 Linux 上安装 HydraPaper使用 <a href="https://flatpak.org">FlatPak</a> 可以轻松安装 HydraPaper。Ubuntu 18.04 已 经提供对 FlatPaks 的支持,所以你需要做的就是下载应用文件并双击在 GNOME 软件中心中打开它。你可以参考这篇文章来了解如何在你的ࡡ…
如果你想在 Ubuntu 18.04 或任何其他 Linux 发行版上使用 GNOME、MATE 或 Budgie 桌面环境在多个显示器上显示不同的壁纸,这个小工具将帮助你实现这一点。多显示器设置通常会在 Linux 上出现多个问题,但我不打算在本文中讨论这些问题。我有另外一篇关于 Linux 上多显示器支持的文章。如果你使用多台显示器,也许你想为每台显示器设置不同的壁纸。我不确定其他 Linux 发行版和桌面环境,但是 <a href="https://www.gnome.org/">GNOME 桌面</a> 的 Ubuntu 本身并不提供此功能。不要烦恼!在本教程中,我将向你展示如何使用 GNOME 桌面环境为 Linux 发行版上的每个显示器设置不同的壁纸。在 Ubuntu 18.04 和其他 Linux 发行版上为每个显示器设置不同的壁纸<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/03/102549hroplu5pol5cc2oq.jpg">Different wallaper on each monitor in Ubuntu</a>我将使用一个名为 <a href="https://github.com/GabMus/HydraPaper">HydraPaper</a> 的小工具在不同的显示器上设置不同的背景。HydraPaper 是一个基于 <a href="https://www.gtk.org/">GTK</a> 的应用,用于为 <a href="https://itsfoss.com/gnome-tricks-ubuntu/">GNOME 桌面环境</a>中的每个显示器设置不同的背景。它还支持 <a href="https://mate-desktop.org/">MATE</a> 和 <a href="https://budgie-desktop.org/home/">Budgie</a> 桌面环境。这意味着 Ubuntu MATE 和 <a href="https://itsfoss.com/ubuntu-budgie-18-review/">Ubuntu Budgie</a> 用户也可以从这个应用中受益。使用 FlatPak 在 Linux 上安装 HydraPaper使用 <a href="https://flatpak.org">FlatPak</a> 可以轻松安装 HydraPaper。Ubuntu 18.04 已 经提供对 FlatPaks 的支持,所以你需要做的就是下载应用文件并双击在 GNOME 软件中心中打开它。你可以参考这篇文章来了解如何在你的ࡡ…
Caffeinated 6.828:实验 3:用户环境
在本实验中,你将要实现一个基本的内核功能,要求它能够保护运行的用户模式环境(即:进程)。Media
via https://linux.cn/article-10307-1.html
在本实验中,你将要实现一个基本的内核功能,要求它能够保护运行的用户模式环境(即:进程)。Media
via https://linux.cn/article-10307-1.html
Caffeinated 6.828:实验 3:用户环境
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/03/225323hpu3rwup1ivwqp4v.jpg">Media</a>简介在本实验中,你将要实现一个基本的内核功能,要求它能够保护运行的用户模式环境(即:进程)。你将去增强这个 JOS 内核,去配置数据结构以便于保持对用户环境的跟踪、创建一个单一用户环境、将程序镜像加载到用户环境中、并将它启动运行。你也要写出一些 JOS 内核的函数,用来处理任何用户环境生成的系统调用,以及处理由用户环境引进的各种异常。<strong>注意:</strong> 在本实验中,术语<strong>“环境”</strong> 和<strong>“进程”</strong> 是可互换的 —— 它们都表示同一个抽象概念,那就是允许你去运行的程序。我在介绍中使用术语<strong>“环境”</strong>而不是使用传统术语<strong>“进程”</strong>的目的是为了强调一点,那就是 JOS 的环境和 UNIX 的进程提供了不同的接口,并且它们的语义也不相同。预备知识使用 Git 去提交你自实验 2 以后的更改(如果有的话),获取课程仓库的最新版本,以及创建一个命名为 lab3 的本地分支,指向到我们的 lab3 分支上 origin/lab3 :<pre class="prettyprint linenums">athena% cd ~/6.828/labathena% add gitathena% git commit -am 'changes to lab2 after handin'Created commit 734fab7: changes to lab2 after handin 4 files changed, 42 insertions(+), 9 deletions(-)athena% git pullAlready up-to-date.athena% git checkout -b lab3 origin/lab3Branch lab3 set up to track remote branch refs/remotes/origin/lab3.Switched to a new branch "lab3"athena% git merge lab2Merge made by recursive. kern/pmap.c | 42 +++++++++++++++++++ 1 files changed, 42 insertions(+), 0 deletions(-)athena% </pre>实验 3 包含一些你将探索的新源文件:<pre class="prettyprint linenums">inc/ env.h Public definitions for user-mode environments trap.h Public definitions for trap handling syscall.h Public definitions for system calls from user environments to the kernel lib.h Public definitions for the user-mode support librarykern/ env.h Kernel-private definitions for user…
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/03/225323hpu3rwup1ivwqp4v.jpg">Media</a>简介在本实验中,你将要实现一个基本的内核功能,要求它能够保护运行的用户模式环境(即:进程)。你将去增强这个 JOS 内核,去配置数据结构以便于保持对用户环境的跟踪、创建一个单一用户环境、将程序镜像加载到用户环境中、并将它启动运行。你也要写出一些 JOS 内核的函数,用来处理任何用户环境生成的系统调用,以及处理由用户环境引进的各种异常。<strong>注意:</strong> 在本实验中,术语<strong>“环境”</strong> 和<strong>“进程”</strong> 是可互换的 —— 它们都表示同一个抽象概念,那就是允许你去运行的程序。我在介绍中使用术语<strong>“环境”</strong>而不是使用传统术语<strong>“进程”</strong>的目的是为了强调一点,那就是 JOS 的环境和 UNIX 的进程提供了不同的接口,并且它们的语义也不相同。预备知识使用 Git 去提交你自实验 2 以后的更改(如果有的话),获取课程仓库的最新版本,以及创建一个命名为 lab3 的本地分支,指向到我们的 lab3 分支上 origin/lab3 :<pre class="prettyprint linenums">athena% cd ~/6.828/labathena% add gitathena% git commit -am 'changes to lab2 after handin'Created commit 734fab7: changes to lab2 after handin 4 files changed, 42 insertions(+), 9 deletions(-)athena% git pullAlready up-to-date.athena% git checkout -b lab3 origin/lab3Branch lab3 set up to track remote branch refs/remotes/origin/lab3.Switched to a new branch "lab3"athena% git merge lab2Merge made by recursive. kern/pmap.c | 42 +++++++++++++++++++ 1 files changed, 42 insertions(+), 0 deletions(-)athena% </pre>实验 3 包含一些你将探索的新源文件:<pre class="prettyprint linenums">inc/ env.h Public definitions for user-mode environments trap.h Public definitions for trap handling syscall.h Public definitions for system calls from user environments to the kernel lib.h Public definitions for the user-mode support librarykern/ env.h Kernel-private definitions for user…
编写你的第一行 HTML 代码,来帮助蝙蝠侠写一封情书
谁会拒绝蝙蝠侠的请求呢,对吧?所以让我们用 HTML 来写一封蝙蝠侠的情书。Media
via https://linux.cn/article-10308-1.html
谁会拒绝蝙蝠侠的请求呢,对吧?所以让我们用 HTML 来写一封蝙蝠侠的情书。Media
via https://linux.cn/article-10308-1.html
编写你的第一行 HTML 代码,来帮助蝙蝠侠写一封情书
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/04/100208p2a4ob58w827weqe.jpeg">Media</a>在一个美好的夜晚,你的肚子拒绝消化你在晚餐吃的大块披萨,所以你不得不在睡梦中冲进洗手间。在浴室里,当你在思考为什么会发生这种情况时,你听到一个来自通风口的低沉声音:“嘿,我是蝙蝠侠。”这时,你会怎么做呢?在你恐慌并处于关键时刻之前,蝙蝠侠说:“我需要你的帮助。我是一个超级极客,但我不懂 HTML。我需要用 HTML 写一封情书,你愿意帮助我吗?”谁会拒绝蝙蝠侠的请求呢,对吧?所以让我们用 HTML 来写一封蝙蝠侠的情书。你的第一个 HTML 文件HTML 网页与你电脑上的其它文件一样。就同一个 .doc 文件以 MS Word 打开,.jpg 文件在图像查看器中打开一样,一个 .html 文件在浏览器中打开。那么,让我们来创建一个 .html 文件。你可以在 Notepad 或其它任何编辑器中完成此任务,但我建议使用 VS Code。<a href="https://code.visualstudio.com/">在这里下载并安装 VS Code</a>。它是免费的,也是我唯一喜欢的微软产品。在系统中创建一个目录,将其命名为 “HTML Practice”(不带引号)。在这个目录中,再创建一个名为 “Batman’s Love Letter”(不带引号)的目录,这将是我们的项目根目录。这意味着我们所有与这个项目相关的文件都会在这里。打开 VS Code,按下 ctrl+n 创建一个新文件,按下 ctrl+s 保存文件。切换到 “Batman’s Love Letter” 文件夹并将其命名为 “loveletter.html”,然×…
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/04/100208p2a4ob58w827weqe.jpeg">Media</a>在一个美好的夜晚,你的肚子拒绝消化你在晚餐吃的大块披萨,所以你不得不在睡梦中冲进洗手间。在浴室里,当你在思考为什么会发生这种情况时,你听到一个来自通风口的低沉声音:“嘿,我是蝙蝠侠。”这时,你会怎么做呢?在你恐慌并处于关键时刻之前,蝙蝠侠说:“我需要你的帮助。我是一个超级极客,但我不懂 HTML。我需要用 HTML 写一封情书,你愿意帮助我吗?”谁会拒绝蝙蝠侠的请求呢,对吧?所以让我们用 HTML 来写一封蝙蝠侠的情书。你的第一个 HTML 文件HTML 网页与你电脑上的其它文件一样。就同一个 .doc 文件以 MS Word 打开,.jpg 文件在图像查看器中打开一样,一个 .html 文件在浏览器中打开。那么,让我们来创建一个 .html 文件。你可以在 Notepad 或其它任何编辑器中完成此任务,但我建议使用 VS Code。<a href="https://code.visualstudio.com/">在这里下载并安装 VS Code</a>。它是免费的,也是我唯一喜欢的微软产品。在系统中创建一个目录,将其命名为 “HTML Practice”(不带引号)。在这个目录中,再创建一个名为 “Batman’s Love Letter”(不带引号)的目录,这将是我们的项目根目录。这意味着我们所有与这个项目相关的文件都会在这里。打开 VS Code,按下 ctrl+n 创建一个新文件,按下 ctrl+s 保存文件。切换到 “Batman’s Love Letter” 文件夹并将其命名为 “loveletter.html”,然×…
GPaste:Gnome Shell 中优秀的剪贴板管理器
在 Gnome 中使用 GPaste,你只需单击顶部面板即可得到可配置的、可搜索的剪贴板历史记录。GPaste 不仅会记住你复制的文本,还能记住文件路径和图像Media
via https://linux.cn/article-10309-1.html
在 Gnome 中使用 GPaste,你只需单击顶部面板即可得到可配置的、可搜索的剪贴板历史记录。GPaste 不仅会记住你复制的文本,还能记住文件路径和图像Media
via https://linux.cn/article-10309-1.html
GPaste:Gnome Shell 中优秀的剪贴板管理器
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/04/103755lzn0m0ph07t4enk0.jpg">Media</a><a href="https://github.com/Keruspe/GPaste">GPaste</a> 是一个剪贴板管理系统,它包含了库、守护程序以及命令行和 Gnome 界面(使用原生 Gnome Shell 扩展)。剪贴板管理器能够跟踪你正在复制和粘贴的内容,从而能够访问以前复制的项目。GPaste 带有原生的 Gnome Shell 扩展,是那些寻找 Gnome 剪贴板管理器的人的完美补充。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/04/103130a4uvqc9zh02t7ve4.png">Media</a><em>GPaste Gnome Shell扩展</em>在 Gnome 中使用 GPaste,你只需单击顶部面板即可得到可配置的、可搜索的剪贴板历史记录。GPaste 不仅会记住你复制的文本,还能记住文件路径和图像(后者需要在设置中启用,因为默认情况下它被禁用)。不仅如此,GPaste 还可以检测到增长的行,这意味着当检测到新文本是另一个文本的增长时,它会替换它,这对于保持剪贴板整洁非常有用。在扩展菜单中,你可以暂停 GPaste 跟踪剪贴板,并从剪贴板历史记录或整个历史记录中删除项目。你还会发现一个启动 GPaste 用户界面窗口的按钮。如果你更喜欢使用键盘,你可以使用快捷键从顶栏开启 GPaste 历史记录(Ctrl + Alt + H)或打开全部的 GPaste GUI(Ctrl + Alt + G)。该工具还包含这些键盘快捷键(可以更改):从历史记录中删除活动项目: Ctrl + Alt + V将活动项目显示为密码(在 GPaste 中混淆剪贴板条目): Ctrl + Alt + S将剪贴板同步到主选择: Ctrl + Alt + O将主选择同步到剪贴板:Ctrl + Alt + P将活动项…
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/04/103755lzn0m0ph07t4enk0.jpg">Media</a><a href="https://github.com/Keruspe/GPaste">GPaste</a> 是一个剪贴板管理系统,它包含了库、守护程序以及命令行和 Gnome 界面(使用原生 Gnome Shell 扩展)。剪贴板管理器能够跟踪你正在复制和粘贴的内容,从而能够访问以前复制的项目。GPaste 带有原生的 Gnome Shell 扩展,是那些寻找 Gnome 剪贴板管理器的人的完美补充。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201812/04/103130a4uvqc9zh02t7ve4.png">Media</a><em>GPaste Gnome Shell扩展</em>在 Gnome 中使用 GPaste,你只需单击顶部面板即可得到可配置的、可搜索的剪贴板历史记录。GPaste 不仅会记住你复制的文本,还能记住文件路径和图像(后者需要在设置中启用,因为默认情况下它被禁用)。不仅如此,GPaste 还可以检测到增长的行,这意味着当检测到新文本是另一个文本的增长时,它会替换它,这对于保持剪贴板整洁非常有用。在扩展菜单中,你可以暂停 GPaste 跟踪剪贴板,并从剪贴板历史记录或整个历史记录中删除项目。你还会发现一个启动 GPaste 用户界面窗口的按钮。如果你更喜欢使用键盘,你可以使用快捷键从顶栏开启 GPaste 历史记录(Ctrl + Alt + H)或打开全部的 GPaste GUI(Ctrl + Alt + G)。该工具还包含这些键盘快捷键(可以更改):从历史记录中删除活动项目: Ctrl + Alt + V将活动项目显示为密码(在 GPaste 中混淆剪贴板条目): Ctrl + Alt + S将剪贴板同步到主选择: Ctrl + Alt + O将主选择同步到剪贴板:Ctrl + Alt + P将活动项…
有所为,有所不为:在 Linux 中使用超级用户权限
sudo 命令允许特权用户以 root 用户身份运行全部或部分命令,但是理解其能做什么和不能做什么很有帮助。Media
via https://linux.cn/article-10310-1.html
sudo 命令允许特权用户以 root 用户身份运行全部或部分命令,但是理解其能做什么和不能做什么很有帮助。Media
via https://linux.cn/article-10310-1.html