在这篇 Linux 黑话解释中，你将了解 Linux 中的显示管理器。它是桌面环境的一部分吗？它的作用是什么？什么是 Linux 中的显示管理器？简单来说， 显示管理器 display manager （DM）是一个为你的 Linux 发行版提供图形登录功能的程序。它控制用户会话并管理用户认证。显示管理器会在你输入用户名和密码后，立即启动显示服务器并加载桌面环境。显示管理器通常是登录界面的代名词。毕竟它是可见的部分。然而，可见的登录屏幕，也叫 欢迎页 greeter ，只是显示管理器的一部分。像各种桌面环境和显示服务器一样，也有各种显示管理器。我们来看看它们。不同的显示管理器有些人认为显示管理器是桌面环境的一部分，但事实并非如此。它是一个独立的程序。桌面环境可能会推荐某个显示管理器，但这并不意味着它不能与其它一些显示管理器一起工作。如果你曾经在同一个系统中安装过不止一个桌面环境，你会记得，登录界面（即显示管理器）允许你切换桌面环境。虽然显示管理器不是桌面环境本身的一部分，但它往往与桌面环境由同一个开发团队开发。它也成为桌面环境的代表。例如，GNOME 桌面环境开发了 GDM（GNOME Display Manager），光看登录界面就会想到 GNOME 桌面环境。一些流行的显示管理器有：GDM（ GNOME 显示管理器 GNOME Display Manager ）：GNOME 的首选。SDDM（ 简单桌面显示管理器 Simple Desktop Display Manager )：KDE 首选。LightDM：由 Ubuntu 为 Unity 桌面开发。显示管理器可以定制有这么多的桌面环境可供选择，它们都有自己的显示管理器吗？不，不是这样的。正如我之前提到的，可见的登录屏幕被称为欢迎页。这个欢迎页可以进行自定义来改变登录屏幕的外观。事实上，许多发行版和/或桌面环境都制作了自己的欢迎页，以给用户提供一个类似于他们品牌的登录屏幕。例如，Mint 的 Cinnamon 桌面使用了 LightDM，但有自己的欢迎页来给它更多的 Mint 式（或者我应该说是 Cinnamon）的外观。来看看 Kali Linux 的登录界面：如果你喜欢编码和调整，你可以根据自己的喜好修改或编码自己的欢迎页。改变显示管理器如果你愿意，可以更改显示管理器。你需要先安装显示管理器。安装时你会看到切换显示管理器的选项。如果当时没有做切换，那么以后可以通过手动配置来改变显示管理器。不同的发行版重新配置显示管理器的方法略有不同，这不在本文讨论范围内。结语希望大家对 Linux 中的显示管理器这个术语有一点了解。本黑话解释系列的目的是用非技术性的语言解释常见的 Linux 俗语和技术术语，而不涉及太多的细节。欢迎大家提出意见和建议。via: https://itsfoss.com/display-manager/作者：Abhishek Prakash 选题：lujun9972 译者：wxy 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
下载我们整理的 curl 备忘录。要在不使用图形界面的情况下从互联网上获取所需的信息，curl 是一种快速有效的方法。curl 通常被视作一款非交互式 Web 浏览器，这意味着它能够从互联网上获取信息，并在你的终端中显示，或将其保存到文件中。从表面看，这是 Web 浏览器，类似 Firefox 或 Chromium 所做的工作，只是它们默认情况下会渲染信息，而 curl 会下载并显示原始信息。实际上，curl 命令可以做更多的事情，并且能够使用多种协议与服务器进行双向传输数据，这些协议包括 HTTP、FTP、SFTP、IMAP、POP3、LDAP、SMB、SMTP 等。对于普通终端用户来说，这是一个有用的工具；而对于系统管理员，这非常便捷；对于微服务和云开发人员来说，它是一个质量保证工具。curl 被设计为在没有用户交互的情况下工作，因此与 Firefox 不同，你必须从头到尾考虑与在线数据的交互。例如，如果想要在 Firefox 中查看网页，你需要启动 Firefox 窗口。打开 Firefox 后，在地址栏或搜索引擎中输入要访问的网站。然后，导航到网站，然后单击要查看的页面。对于 curl 来说也是如此，不同之处在于你需要一次执行所有操作：在启动 curl 的同时提供需要访问的互联网地址，并告诉它是否要将数据保存在终端或文件中。当你必须与需要身份验证的网站或 API 进行交互时，会变得有点复杂，但是一旦你学习了 curl 命令语法，它就会变得自然而然。为了帮助你掌握它，我们在一个方便的备忘录中收集了相关的语法信息。使用 curl 下载文件你可以通过提供指向特定 URL 的链接来使用 curl 命令下载文件。如果你提供的 URL 默认为 index.html，那么将下载此页面，并将下载的文件显示在终端屏幕上。你可以将数据通过管道传递到 less、tail 或任何其它命令：$ curl "http://example.com" | tail -n 4 Example Domain This domain is for use in illustrative examples in documents. You may use this domain in literature without prior coordination or asking for permission. More information... 由于某些 URL 包含特殊字符，shell 通常会将其解释，因此最安全的做法用引号将 URL 包起来。某些文件无法很好的在终端中转换显示。你可以使用 --remote-name 选项使文件根据服务器上的命名进行保存：$ curl --remote-name "https://example.com/linux-distro.iso" $ ls linux-distro.iso 或者，你可以使用 --output 选项来命名你想要下载的内容：curl "http://example.com/foo.html" --output bar.html 使用 curl 列出带有远程目录的内容因为 curl 不是交互式的，所以很难浏览页面上的可下载元素。如果你要连接的远程服务器允许，可以使用 curl 来列出目录的内容：$ curl --list-only "https://example.com/foo/" 继续中断下载如果你正在下载一个非常大的文件，你可能会发现有时候必须中断下载。curl 非常智能，可以确定下载从何处中断并继续下载。这意味着，下一次当你下载一个 4GB 的 Linux 发行版的 ISO 出现问题时，就不必重新开始了。--continue-at 的语法有点不寻常：如果你知道下载中断时的字节数，你可以提供给 curl；否则，你可以使用单独的一个破折号（-）指示 curl 自动检测：$ curl --remote-name --continue-at - "https://example.com/linux-distro.iso" 下载文件序列如果你需要下载多个文件而不是一个大文件，那么 curl 可以帮助你解决这个问题。假设你知道要下载的文件的位置和文件名模式，则可以使用 curl 的序列标记：中括号里是整数范围的起点和终点。对于输出文件名，使用 #1 表示第一个变量：$ curl "https://example.com/file_[1-4].webp" --output "file_#1.webp" 如果你需要使用其它变量来表示另一个序列，按照每个变量在命令中出现的顺序表示它们。例如，在这个命令中，#1 指目录 images_000 到 images_009，而 #2 指目录 file_1.webp 至 file_4.webp：$ curl "https://example.com/images_00[0-9]/file_[1-4].webp" --output "file_#1-#2.webp" 从站点下载所有 PNG 文件你也可以仅使用 curl 和 grep 进行一些基本的 Web 抓取操作，以找到想要下载的内容。例如，假设你需要下载与正在归档网页关联的所有图像，首先，下载引用了图像的页面。将页面内通过管道传输到 grep，搜索所需的图片类型（在此示例中为 PNG）。最后，创建一个 while 循环来构造下载 URL，并将文件保存到你的计算机：$ curl https://example.com |\ grep --only-matching 'src="[^"]*.[png]"' |\ cut -d\" -f2 |\ while read i; do \ curl https://example.com/"${i}" -o "${i##*/}"; \ done 这只是一个示例，但它展示了 curl 与 Unix 管道和一些基本而巧妙的解析结合使用时是多么的灵活。获取 HTML 头用于数据交换的协议在计算机发送通信的数据包中嵌入了大量元数据。HTTP 头是数据初始部分的组件。在连接一个网站出现问题时，查看这些报文头（尤其是响应码）会有所帮助：curl --head "https://example.com" HTTP/2 200 accept-ranges: bytes age: 485487 cache-control: max-age=604800 content-type: text/html; charset=UTF-8 date: Sun, 26 Apr 2020 09:02:09 GMT etag: "3147526947" expires: Sun, 03 May 2020 09:02:09 GMT last-modified: Thu, 17 Oct 2019 07:18:26 GMT server: ECS (sjc/4E76) x-cache: HIT content-length: 1256 快速失败响应 200 通常是 HTTP 成功指示符，这是你与服务器连接时通常期望的结果。著名的 404 响应表示找不到页面，而 500 则表示服务器在处理请求时出现了错误。要查看协商过程中发生了什么错误，添加 --show-error 选项：$ curl --head --show-error "http://opensource.ga" 除非你可以访问要连接的服务器，否则这些问题将很难解决，但是 curl 通常会尽力连接你指定的地址。有时在网络上进行测试时，无休止的重试似乎只会浪费时间，因此你可以使用 --fail-early 选项来强制 curl 在失败时迅速退出：curl --fail-early "http://opensource.ga" 由 3xx 响应指定的重定向查询300 这个系列的响应更加灵活。具体来说，301 响应意味着一个 URL 已被永久移动到其它位置。对于网站管理员来说，重新定位内容并留下“痕迹”是一种常见的方式，这样访问旧地址的人们仍然可以找到它。默认情况下，curl 不会进行 301 重定向，但你可以使用 --localtion 选项使其继续进入 301 响应指向的目标：$ curl "https://iana.org" | grep title 301 Moved Permanently $ curl --location "https://iana.org" Internet Assigned Numbers Authority 展开短网址如果你想要在访问短网址之前先查看它们，那么 --location 选项非常有用。短网址对于有字符限制的社交网络（当然，如果你使用现代和开源的社交网络的话，这可能不是问题），或者对于用户不能复制粘贴长地址的印刷媒体来说是有用处的。但是，它们也可能存在风险，因为其目的地址本质上是隐藏的。通过结合使用 --head 选项仅查看 HTTP 头，--location 选项可以查看一个 URL 的最终地址，你可以查看一个短网址而无需加载其完整的资源：$ curl --head --location "<https://bit.ly/2yDyS4T>" 下载我们的 curl 备忘录一旦你开始考虑了将探索 web 由一条命令来完成，那么 curl 就成为一种快速有效的方式，可以从互联网上获取所需的信息，而无需麻烦图形界面。为了帮助你适应到工作流中，我们创建了一个 curl 备忘录，它包含常见的 curl 用法和语法，包括使用它查询 API 的概述。via: https://opensource.com/article/20/5/curl-cheat-sheet作者：Seth Kenlon 选题：lujun9972 译者：MjSeven 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
《代码英雄》第二季（9）：特别篇 - 开发者推广大使圆桌会议
代码英雄讲述了开发人员、程序员、黑客、极客和开源反叛者如何彻底改变技术前景的真实史诗。什么是《代码英雄》 代码英雄 Command Line Heroes 是世界领先的企业开源软件解决方案供应商红帽（Red Hat）精心制作的原创音频播客，讲述开发人员、程序员、黑客、极客和开源反叛者如何彻底改变技术前景的真实史诗。该音频博客邀请到了谷歌、NASA 等重量级企业的众多技术大牛共同讲述开源、操作系统、容器、DevOps、混合云等发展过程中的动人故事。本文是《代码英雄》系列播客第二季（9）：特别篇 - 开发人员拥护者圆桌会议的音频脚本。导语： 开发者推广大使 developer advocate 在开源社区中起到的作用是举足轻重的。我们邀请了几位这样的推广大使来到本期节目中，以向我们揭示他们的工作方式，并阐述这份工作背后的意义。来自 Mozilla 的 Sandra Persing、Twilio 的 Ricky Robinett 与 红帽的 Robyn Bergerron 将在此接受 Saron 的采访，分享他们的工作内容、他们支持社区的方式，以及他们对 2019 年的展望。00:00:06 - Saron Yitbarek：大家好，我是 Saron Yitbarek，这里是红帽的原创播客节目《 代码英雄 Command Line Heroes 》的特别篇。我们的节目在第 2 季去了很多地方。我们探索了编程语言、数据大爆炸、安全危机以及无服务器时代的到来，我们甚至去了火星。00:00:28：但是在结束了第 2 季之后，我们还有一个地方要去。我们要走进推广大使和思想领袖们的认识当中，他们帮着塑造了开发人员所做的全部工作。有时，他们被称为 开发者推广大使 developer advocate ，或者说他们担任开发者关系的职位，或开发者布道师。00:00:50：从开发人员的角度来看，无论他们的具体头衔是什么，他们似乎都做着许多相同的事情。你在会议上见过他们发表主题演讲。你在播客上听过他们接受采访，就像在本期节目中一样。你可能还阅读过他们的博文。但是他们是谁呢？他们到底在用自己的声音做了些什么？00:01:10：为了迎接 2019 年的到来，我们为大家召集了一个优秀人物的圆桌会议。尽管他们的头衔各不相同，但他们的目的是一致的。他们来到这里，是为了帮助开发人员，并确保其声音和需求能被大众听到。这些人都是典型的代码英雄。00:01:29：来自 湾区 Bay Area 的 Sandra Persing 是 Mozilla 的 全球策略师 Global Strategist ，也是 DevRel 峰会的创始人。00:01:38 - Sandra Persing：嗨， Saron。00:01:39 - Saron Yitbarek：你好。还有同样来自旧金山的 Ricky Robinett。他是 Twilio 的开发人员网络总监。00:01:47 - Ricky Robinett：你好。00:01:49 - Saron Yitbarek：从凤凰城外和我一起来的是 Robyn Bergeron，Red Hat 的社区架构师。00:01:55 - Robyn Bergeron：嗨！你好吗？00:01:56 - Saron Yitbarek：我很好。00:01:57 - Robyn Bergeron：看到你真高兴。00:01:57 - Saron Yitbarek：在不同的地方，这份工作的践行者被冠以不同的头衔。有 开发者推广大使 Developer Advocate 、 开发者布道师 Developer Evangelist 、 开发者关系 Developer Relations ；对于新事物来说，基本定义非常重要。因此，我认为一个好的起点是来定义这些东西是什么，尤其是定义你可以在这个领域做什么。所以，你能告诉我你的头衔以及这个头衔实质上的含义吗？ Ricky，让我们从你开始吧。00:02:22 - Ricky Robinett：好的，听起来很棒。我的头衔是 开发者网络总监 Director of the Developer Network 。我有幸供职于一个开发者关系专家团队。我们有一个布道师团队、一个教育团队和一个社区团队。因此，这绝对是一个大杂烩，有你听说过的各种不同的头衔，我们将其汇集在这个团队之中。00:02:43 - Saron Yitbarek：厉害啊。Sandra，你呢？00:02:45 - Sandra Persing：我在 Mozilla 担任活动和赞助的 全球策略师 Global Strategist ，并与 Mozilla 新兴技术小组的开发者拓展团队合作。我通常会将我的日常活动解释为大量的研究、交流和探索，而这都将最终影响我们评估与决策应当如何投资我们的资源：我们的时间、金钱、纪念品、演说者等等，以回馈开发者社区，同时也从开发者社区得到反馈。这份工作既有布道的一面，也有倡导的一面。00:03:24 - Saron Yitbarek：很棒。 Robyn，该你了。00:03:26 - Robyn Bergeron：你好。好吧，我的正式头衔是 社区架构师 Community Architect 。人们就我这个头衔有过很多问题。我曾被称为 社区经理 Community Manager ，也曾被称为 开发者推广大使 Developer Advocate ，甚至还在过去的一份工作中做过 运维推广大使 Operations Advocate 。但是我想我所做的是……嗯，你知道，像是“社区经理”之类头衔所暗示的“你在管理着社区中发自内心为项目做出贡献的人”的这种想法，其实相当愚蠢，因此，我喜欢把我所做的事情看作是构建一个框架，人们可以真正顺利地参与其中，确保过程中没有障碍，并确保他们可以完成所有他们想要做的事情。00:04:02 - Saron Yitbarek：Ricky，由于你基本上是负责整个开发者网络的总监，你不仅仅是置身于推广大使团队、布道团队，也是社区团队之中，这有点儿像是你在运行着整个项目。你是怎样理解的这个的，是向开发者推广还是推广开发者？00:04:20 - Ricky Robinett：是的，这是个很棒的问题。 Phil Nash 是我们团队中的一名布道师，他对此有一个很好的认识，而我要将它剽窃过来。我们可以从很多不同的角度来解释这份工作，但说到底，我们的工作其实大体上就是帮助他人。00:04:33 - Saron Yitbarek：我喜欢这一点。是的。00:04:35 - Ricky Robinett：我们帮助开发人员，有时候这些帮助看起来就像是在 Stack Overflow 上回答问题，有时看起来像是构建一款新工具，有时看起来像组织一个活动，有时看起来又像是发起一次产品的内部改动。因此，我认为这就是我所听说过的最好的认识 —— 我们的责任是帮助。00:04:57 - Saron Yitbarek：的确。Sandra，你的职位让我感兴趣的一点是，你不光是策略师，还是全球策略师。让世界各地的开发人员组织起来，并且帮助他们，这是你在 Mozilla 的工作的一部分。在全球范围内的推广倡导会是什么样的呢？在不同的国家、不同的大洲之间，这份工作的含义会有所不同吗？00:05:20 - Sandra Persing：对，确实存在一些不同。我们今年刚刚在新加坡举办了第三届 DevRel 年度峰会。在过去的两年间，我们在西雅图主办了这项活动，而到了新加坡，我们看到了不同的视角。当我们走出湾区时，就连某些最基本的组织方式都需要做出改变。比如，如何确保一切都能在线下运转，因为连接性是一个大问题；再比如，我们该怎样使一名工作于印尼的开发人员能在峰会过程中与社区充分互动，无论他是在线上参加聚会，还是来到现场。00:05:59 - Sandra Persing：我们总会发现，所谓的“基础”，一些对我们来说如此寻常的事，比如在湾区举办一次简单的聚会——这再常见不过了，对吧？你高呼一声“我要参会”，就会发现到处都有聚会可以参加。然而对于，比如，越南的开发者来说，此事可以是具有特殊意义，且对他们而言相当重要的。这种聚会很宝贵，丰富了他们的开发者生活。00:06:27 - Saron Yitbarek：我注意到的一件事是，大家都以某种方式提到了社区。而我自己也运营着一个社区，Code Newbie，而且我经常被一些公司聘用为他们的布道师或社区经理。有一件事我一直都有点儿担心，也许有点畏惧；我在想，在过去的三四年里，我一直在尽我所能，尽心尽力地负责着这个社区。00:06:55：但如果我为一家公司工作，我就必须要牺牲这些吗？我是不是必须要将公司置于社区的需求之上？我该如何平衡这种关系呢？00:07:06：所以我在想，Robyn，或许我们可以问问你这个 社区架构师 Community Architect ，你是如何区分这两者的呢？或者说，你是如何平衡这两者的？00:07:16 - Robyn Bergeron：好吧，这当然是一个有趣的平衡。我的意思是，我以前的一个工作实际上是担任 Fedora 项目负责人。而你知道，Fedora 是 Red Enterprise Linux 的上游，在这里，你角色的一部分确实是某种找寻平衡的行为，对吧？两者之间的平衡是让社区里的人们开心，让公司对社区所做的事情高兴，同时要确保每个人都是快乐大家庭的一员。00:07:41：而且，你知道，我想当你在这个职位上做得最好的时候，你肯定会时不时地激怒公司决策层的某些人。但是你知道的，最终还是要用结果来证明，对吧？00:07:59：人们总是问我，你是如何平衡 Ansible 和红帽之间的关系的，你知道，当 Ansible 被红帽收购时，就像是 —— 哦我的天哪，红帽会接管它，然后对它做些糟糕的事情，并摆脱 Ubuntu 的支持吗？00:08:12：而这就像是，拥有整个项目的全部目的就是为了破坏它，就像是为了不要吸引 4000 名贡献者而故意变得糟糕一样。00:08:22：确保你的管理层信任你，并始终与人们保持清晰的沟通以了解实际发生的事情，并确保沟通通道的两侧都不会出现意外，这是成功与否的部分原因，也许并不总是会成功，但肯定会让人感到惊讶。00:08:41 - Saron Yitbarek：嗯嗯。确实。Ricky，你呢？当你在做这么多不同事情的时候，你是如何看待这种关系中的平衡的？00:08:49 - Ricky Robinett：我认为你必须相信公司和技术。你必须相信，你所带给开发人员的东西将会对他们的生活、职业生涯以及公司产生影响。00:09:03：另一方面，你必须让高管们相信这种方法。因此，我们非常幸运的一点是我们的 CEO 是一名开发人员，而且在很多方面，他是我们和开发者社区打交道的原动力。我们的布道师们的使命是激励并装备开发人员。因此，有时候我们会说这能激励并装备他们吗？因为如果不能的话，我们就不应该这么做，因为这超出了我们的职权限范围。00:09:36 - Saron Yitbarek：嗯嗯。Sandra，我觉得你有点儿优势，因为 Mozilla 是一个非营利性组织，对吧？所以我觉得或许 ——00:09:44 - Sandra Persing：我刚想说。00:09:46 - Saron Yitbarek：跟我讲讲这个吧。00:09:47 - Sandra Persing：Mozilla 的历史就是我们是一家叛逆的公司。我们一直在反抗企业家，对吗？出走 Netscape ，并与我们的创始人之一 Mitchell Baker 一起走过的整段历史，确保了 Web ——00:10:01：—— 乃至互联网是面向所有人的开放而自由的资源。我的意思是，我们仍然，我们每个人，每一个 Mozilla 人，都信奉这一口号，我们对此深信不疑。因此，这绝对是一家令人惊叹的、100% 拥抱了社区的公司。00:10:22 - Saron Yitbarek：确实。所以，Ricky，我还清楚地记得那件红色的运动夹克，我还记得你亲自出马做的那些很棒的演示，感觉那种联系并帮助开发人员的方式非常新颖。这个想法是怎么在 Twilio 上产生的？00:10:41 - Ricky Robinett：嗯，你这么说真是太好了。我们确实相信我们是站在巨人的肩膀之上。你会想到 Apple 公司的 Guy Kawasaki，有人在我们之前就采用了这种营销方式。我认为我们很幸运能在正确的时间把它带给开发人员。00:11:03：而且有这么多的人进来，带着我们如何能够做到这一点以及如何能够不断提高方法水平的想法。但是我实际上不知道是谁发明了红色运动夹克，因此现在我需要去探寻历史 ——00:11:19 - Saron Yitbarek：你一定得找到答案。00:11:19 - Ricky Robinett：—— 有关这是何时开始的历史。00:11:20 - Saron Yitbarek：这是件很棒的夹克。00:11:21 - Ricky Robinett：知道了，我今天下午就去找。00:11:25 - Saron Yitbarek：而我想知道的是，布道和推广的想法在 Twilio 是如何随着时间而发生变化的。你知道，曾经你们只是一家小小的初创公司，一家叛逆的初创公司，然后现如今成了一家大公司。随着公司本身的变化，布道的形式又是如何变化的呢？00:11:46 - Ricky Robinett：是的，开始时，我觉得我本可以一年 365 天都在 黑客马拉松 hackathon 上渡过，而在纽约，每个周末你都要从五到六个黑客马拉松之中抉择一个。我们在布道方面所做的许多事情都是黑客马拉松场景，而现在，场景不同了。确实，最大的变化在于公司外部而不是内部。00:12:11：因此，我谈到了布道师的激励和装备。所以令人高兴的是，这些年来这个任务并没有发生任何变化，他们激励和装备的方式一直在变化，但任务本身并没有什么改变。00:12:26 - Saron Yitbarek：那么 Robyn，随着 DevOps 和 DevSecOps 的兴起，推广大使在你和社区架构师看来如何呢？会有运维推广大使吗？00:12:39 - Robyn Bergeron：嗯，实际上那是 …… 我的意思是说，孩子们，那是我辍学后的第一份工作。我不建议这样做，不要在家做这个事情。00:12:47 - Saron Yitbarek：留在学校里继续上学。00:12:48 - Robyn Bergeron：听着。你看，小姑娘，我的第一份工作实际上是在 Motorola 担任 系统管理员 SysAdmin 多年，而当我从担任 Fedora 负责人跳槽时，我在 Elastic Search 工作了一段时间，你知道，那个头衔是开发者推广大使，因此我花了几个学期在大学里攻读 C。但是我的心一直都在运维这边。我开始对自己真的是一名开发者推广大使感到疑惑？我觉得我只是在推广运维人员而已。我开始自称是一名运维推广大使，每个人都为之注目。00:13:22：每个人都说，嗯，这真的是一个很酷的头衔。我的意思是，你知道，我基本上只是在公司内部倡导其他人在做什么。00:13:33 - Saron Yitbarek：所以，Sandra，我们谈到了推广大使和布道师在世界不同地区看起来如何不同，但是我想知道，随着我们变得越来越全球化，联系越来越紧密，更大范围和形式的布道对你来说是不是也在随着时间流逝而变化？00:13:52 - Sandra Persing：你知道什么是开发者关系吗？我们是在推销我们的产品吗？你知道，而我注意到的是，即使是大公司也正在远离这种策略。要明白的是，做一个真实的人，真正留心倾听并回应开发人员的需求是最为重要的，而不是去推销产品。00:14:17：我总是回过头来和我在 Mozilla 的团队分享一个理念，开发者们实际上是我们所合作过的最聪明、最具有创造力的客户群体之一。他们可以大老远就闻到商业销售的气味。因此，我们必须对于如何共享信息保持精明，就像它必须是一群有着才华和智慧的人聚集在一起，成为我们与开发者社区进行沟通的创新方式。00:14:48 - Saron Yitbarek：嗯，真的，我很喜欢这样的想法，需要将不同的技能，我想，还有不同的背景，集合在一起，才能很好地服务于开发者，也能帮助开发者自助。00:15:01：当我想到开发者推广大使的兴起时，在我看来，它与开源的兴起息息相关。这感觉几乎就像是开源贡献者越多，开源就变得越重要，重视它的大公司也越多，他们几乎必须与这些开源贡献者、这些开发人员建立起更好的关系，并且我感觉这二者真的是紧密相关的。00:15:27：因此我很好奇你的想法。那么 Robyn，让我们从你开始吧。是这样的吗？推广大使的这个想法与开源的兴起有所联系吗？00:15:37 - Robyn Bergeron：如果你是一家销售软件或是销售许可证和长期支持的公司，你知道，无论你的开源公司的业务模型是什么，如果你没有这种反馈回路，或者你没有真正关注人们在说什么，那你最终会犯下一个众所周知的错误。我认为，真正能在全世界范围内每天都做到这一点，就是成功和失败之间的区别，没有人愿意花时间去做错误的事情。那是个坏主意。00:16:10 - Saron Yitbarek：是的，这通常是个坏主意。很好。因此，我想知道你们每个人各自都在关注什么，都真正在思考什么。因此，Ricky，让我们从你开始吧。在你的 Twilio 角色中，你试图为开发者文化带来什么样的改进呢？00:16:27 - Ricky Robinett：如果我要说的我与开发者交谈时听到过最多的一个短语，那就是“我不是开发者，但是 …… ”，而这可能是一直萦绕在我脑海中的最大的事情之一 —— 开发者定义的扩大化。00:16:45:对我们很多人来说，“冒牌综合症”是一个非常真实的现象。令人惊讶的是，即使是你所认识的一些最好的开发者也在为此努力。而对我来说，我们所有人能在我们的文化中做的最重要的事情之一，就是让人们说，“你知道吗？我是一名开发者。我用代码解决问题。”00:17:08：因此，我最喜欢的故事之一是，我们社区有一个名为 Doug McKenziethat 的成员，他是个魔术师。他自学了 PHP，以便在魔术中使用技术。00:17:23 - Saron Yitbarek：噢，很棒。00:17:23 - Ricky Robinett：Doug 之所以如此之酷，是因为他超级谦虚，就像是：“哦，我不是一名开发者。”而突然之间你发现，他正在编写比许多人所见过的更为复杂的代码，可以完成令人震惊的事情。因此，我感觉世界上有许多 Doug McKenzies 这样的人，他们都在用代码做着伟大的事情，我们有机会让他们成为社区的一份子，并且在这项工作中拥有自己的身份。00:17:51 - Saron Yitbarek：我喜欢这个故事，因为它让我想起了我曾经为 Code Newbie 播客采访过的一个人，她是一名作家而且有很多写作任务，必须学习 Git 才能撰写有关 Git 的文章，她写了很多这方面的文章，又逐渐转向了其他的编程主题，最终，你知道，几年过去之后，她实际上已经成为了一名开发者却不自知。00:18:13：在我采访她的时候，我说：“嘿，你知道自己是一名开发者吗？”她说：“不，我是个作家。”而我说：“你可以二者兼备。它们并不互相排斥。”但是，是的，这种说法换个角度说，“嘿，我实际上是在编程和创造，因此现在我可以自称为一名码农了”，这种认识对人们来说很难，要做到这样需要一段时间。00:18:32 - Ricky Robinett：是的，当然是这样。00:18:33 - Saron Yitbarek：是的。因此，Robyn，对你来说，最近几年来你一直在努力推动的最积极的变化是什么？00:18:41 - Robyn Bergeron：只是确保在我们的成长过程中，我们不会失去对大局观的把握。我们的主要目标是使人们易于使用、易于贡献、易于实际完成生活中的事情，确保我们不会偏离这个目标，或者在实际项目的某些结构层面获得更多的工程帮助，并确保我们保持所有这些东西都井井有条。我们在这方面做得很好，我不知道是不是，但我认为这很重要。我不知道自己会不会因此而获得诺贝尔和平奖，但我知道这对许多贡献者都非常重要。00:19:19 - Saron Yitbarek：这对我来说很有用。Sandra，你呢？作为全球策略师，你近些年来所推动的最积极的变化是什么？00:19:26 - Sandra Persing：在我脑海中真正突出的两件事是扩展开发者角色这个定义，这一点非常重要。我们想要发展我们的社区，对吗？那么为什么要限制开发者的定义和描述呢？00:19:43：当我们在 Sundance 与 Reggie Watts 和 Chris Milk 等著名人物进行座谈时，我们给电影制作人、制片人、决策者一个机会，让他们说：“哦，我们也能做到。我们不需要受限于作为创意电影制作人能做些什么。”00:20:00：我们可以采纳技术，也可以成为开发者，而这相当令人耳目一新。我们在 Mozilla 经历的另一个时刻是让一位芝加哥的灯光艺术家 Ian Brill 与我们合作进行一个项目，我们把这个项目标记为 Arch，我们为今年两个重要的 JavaScript 开发者活动带来了这种巨型的塑料灯，LED 灯，带着七个可编程的树莓派结构。这是为了邀请更多的程序员（无论他们是否自称为开发者）来尝试 Mozilla 今年大力倡导的两种语言： WebAssembly 和 Rust。00:20:49：因此，我们创建了两个简单的模板，说，“尝试一下吧”，但这不是我们所想要推动的编程。这不是编程，而是“是的，有几行代码。它是编程语言，但你要做的是创建几行代码，现在可以将它们转化为艺术”，而这让许许多多的新人进入到了我们的群体之中，也就是把他们带到我们的桌子旁边，然后他们会编写他们的代码行，在 Arch 之下走过，去查看目前正在结构中循环着的灯光表现。这真是太神奇了。00:21:22 - Saron Yitbarek：哇。这听上去很美，确实美。因此，我想知道的是，当我们谈论到为开发者做推广大使时，我们谈论了很多有关社区的话题，也谈论了那个最终的想法，无论我们的职业头衔是什么，我们真的只是想要帮助人们，开发者需要什么方面的帮助？ Ricky，让我们从你开始吧。开发者们说他们需要从你这里得到什么呢？00:21:44 - Ricky Robinett：哇。是的，这是个好问题。我认为，我们所发现的其中一件事是，科技变化如此之快，我们被问到的很多问题都是，“我从哪里开始？我首先要做什么？我怎么知道我走的路是正确的呢？”对我们来说，这可能是我们投入最多的领域之一，我们称之为帮助人们发现他们用代码改变世界的能力。00:22:16 - Saron Yitbarek：噢，这很美妙。我赞成。00:22:18 - Ricky Robinett：嗯，谢谢你。是的，这令人兴奋。因此我们构建了一款名为 TwilioQuest 的工具，以帮助人们发现这种力量，帮助他们知道从何处开始。但我只是感觉，你知道，人们一直在寻找自己的身份或获得允许使用该身份的方式，而对每个人而言这就已经是写代码，是用代码或软件解决问题。有许多人想这么做，然而却不知道从哪里开始。所以这是我们经常思考的一件事。00:22:51 - Saron Yitbarek：是的。因此，Robyn，对于你们红帽来说，红帽的开发者所寻求的是什么呢？00:23:00 - Robyn Bergeron：很多时候，是有人来找你，他们遇到了一些障碍，也许是“不知怎么的，我的公关人员被机器人遗漏了”，但是很多时候，也有人会说，“嘿，我有一个很酷的想法。或许它不太适合这里，但是我认为它可能会改善社区的运行方式，或者可能会是其它我们正在研究的东西的不错的辅助工具。我该怎么办呢？”这就像是，“好吧，我该如何帮你入门呢？”你知道吗？“我能怎么做呢？比如说，你只是需要有人同意吗？因为我在这儿整天都基本上是对任何事情点头，让人们知道，这行得通，你当然有权力这样做”，所以这是我所认为最好的事情是，你可以做。至少在我看来，就是确保人们在自己的前进道路上没有阻碍，或者如果阻碍他们前进的一件事是正等着某人说可以，我一直在重申，你不需要别人的许可，但是如果有人需要，那么看在上帝的份上，请给他们许可。00:23:58 - Saron Yitbarek：所以，最后一个问题，我们需要总结一下，我将向你们逐一询问。你在 2019 年将要倡导的最重要的事情是什么呢？如果你有魔杖，那么你想要改变的下一件大事是什么呢？ Sandra，让我们从你开始吧。00:24:15 - Sandra Persing：嘿，我就知道你会这么做。好吧，我们将在 2019 年进行的最大挑战和最为激动人心的项目是真正兑现我们的承诺，使 Web 成为最棒、最大、最易于访问的平台之一。我们总是告诉开发者这是你应当为之构建并部署的地方，但是我们知道 Web 本身非常复杂，而且有着多个浏览器供应商，有时候这并不是一个正确的说法，这对我们而言是一个长期的挑战，尤其是在 Mozilla，在这里我们想要保持 Web 开放、自由，并且能被所有人访问。我们想要继续确保能够兑现对开发人员的承诺，确保网络确实是开放的、可访问的，对所有人都开放。00:25:10 - Saron Yitbarek：嗯，爱了。Ricky，你呢？00:25:13 - Ricky Robinett：只需要确保我们为开发人员提供服务，使得他们能够在全世界范围内进行线上或是线下的聚会。更容易专注于你所看到的内容，并且无需记得开发人员是在何处，即使你没有看到他们。因此，我会挥舞我的魔杖，并在全世界更多的地方，找出我们如何能够帮助那里的开发人员。00:25:36 - Sandra Persing：我只想说，我喜欢 Jarod 有关 暗物质开发者 dark matter developer 的演讲。实在是太棒了。00:25:42 - Ricky Robinett：当你第一次听到它的时候，感觉像是一个了不起的概念，就像是，“哇，真的是一回事儿。”00:25:50 - Saron Yitbarek：那就给我们讲讲吧，什么是暗物质开发者呢？00:25:52 - Sandra Persing：本质上，有一些开发者，他们不参与你的聚会，不参与 GitHub 和在线社区，不为 Stack Overflow 做贡献。这些开发者仍在努力工作并作出贡献，但我们不知道。我们知道他们就在那里，但我们看不到他们。我们无法认出他们，而这些人实际上是开发者社区中非常重要的一部分，我们往往会忽略他们，但不能这样。忽略那些不愿发表意见的社区将损害我们与开发者的关系，我们需要更加积极主动地寻找宇宙中那些暗物质开发者。00:26:34 - Saron Yitbarek：哦，我喜欢。这很酷。是的，Jarod 实际上在 Twilio 工作，对吗？00:26:38 - Sandra Persing：是的。是的，他负责运营亚太区的 DevRel。00:26:42 - Robyn Bergeron：我从前在红帽的同事之一 Chris Grams，现在在一家名为 Tidelift 的公司里工作，他曾经有一个名为 暗物质很重要 Dark Matter Matters 的博客，因为它有点儿像是 ——00:26:52 - Saron Yitbarek：嗯嗯。00:26:54 - Robyn Bergeron：你知道，你所看不到的东西实际上仍然很重要，所以 ——00:26:58 - Saron Yitbarek：确实是这样。 Robyn，你呢？你会用你的魔杖做什么呢？00:27:03 - Robyn Bergeron：哦，用我的魔杖，有很多事情，但是根据这次谈话，我想我会更好地管理彼此之间的依赖关系，而且也许并不令人惊讶，尤其是当我们之中有许多人在 OpenStack、 OPNFV、 Ansible 以及所有这些建立在彼此之上的东西工作时。只是确保我们项目之间的关系比你筋疲力尽时所能看到的关系更加明显。因此，我非常期待来年的事情，因为我们在事物上越来越受关注。现在这非常令人兴奋。00:27:39 - Saron Yitbarek：吸引力总是那么好。它是如此令人兴奋。好吧，我想感谢你们所有人，非常感谢你们今天加入我们并分享你们的思维、想法和故事。非常感谢大家。那么现在说再见？00:27:51 - Robyn Bergeron：再见，各位。00:27:54 - Sandra Persing：很好。非常感谢你， Saron。能上这期节目很荣幸。00:27:58 - Ricky Robinett：它已经开始了，游戏工作室对于开源的态度已经开始转变。00:27:59 - Saron Yitbarek：确实。今天的圆桌会议包括红帽的社区架构师 Robyn Bergeron、 Mozilla 的全球策略师 Sandra Persing 以及 Twilio 的开发者网络总监 Ricky Robinet。我认为自己很幸运，能有这样的平台让我分享对于我们社区将何去何从的愿景，无论是这档播客节目还是在其他地方，但我想要指出的是，你无需拥有自己的播客就能够成为推广大使。成为推广大使只是意味着睁大眼睛并代表他人大声疾呼。这确实可以是每个人的工作。因此，我希望 Robyn、 Sandra 和 Ricky 给了你一点儿有关倡导你觉得重要的事情的启发。00:28:50 - Saron Yitbarek：同时，《代码英雄》第 3 季已经在制作中了。当新剧集在今年春天推出时，你可以成为最早了解新剧集的人之一。如果你尚未注册，请在 Apple Podcasts、 Google Podcasts 或任何你获得播客节目的地方进行订阅。只需点击一下，100% 免费。我是 Saron Yitbarek。非常感谢你的收听，在第 3 季到来之前，继续编程。什么是 LCTT SIG 和 LCTT LCRH SIGLCTT SIG 是 LCTT 特别兴趣小组 Special Interest Group ，LCTT SIG 是针对特定领域、特定内容的翻译小组，翻译组成员将遵循 LCTT 流程和规范，参与翻译，并获得相应的奖励。LCRH SIG 是 LCTT 联合红帽（Red Hat）发起的 SIG，当前专注任务是《代码英雄》系列播客的脚本汉化，已有数十位贡献者加入。敬请每周三、周五期待经过我们精心翻译、校对和发布的译文。欢迎加入 LCRH SIG 一同参与贡献，并领取红帽（Red Hat）和我们联合颁发的专属贡献者证书。via: https://www.redhat.com/en/command-line-heroes/season-2/developer-advocacy-roundtable作者：Red Hat 选题：bestony 译者：JonnieWayy 校对：windgeek, Northurland, wxy本文由 LCRH 原创编译，Linux中国 荣誉推出
用这个创建可引导 USB 的工具在电脑上尝试 Linux
Fedora Media Writer 是创建临场版 USB 以尝试 Linux 的方便方法。Fedora Media Writer 是一个小巧、轻量、全面的工具，它简化了 Linux 的入门体验。它可以下载 Fedora 的 Workstation 或 Server 版本并写入到一个可以在任何系统上引导的 USB 驱动器上，使你无需将其安装到硬盘上就可以试用 Fedora Linux。Media Writer 工具可以用来创建一个 临场体验的 Live 、可引导的 USB 驱动器。在你的平台上安装 Fedora Media Writer 应用后，你可以下载并烧录最新的 Fedora Workstation 或 Server 稳定版，也可以选择烧录你下载的任何其他镜像。而且它并不局限于英特尔 64 位设备。它还可以用于 ARM 设备，如树莓派，这些设备日益变得更加强大和有用。安装 Fedora Media Writer安装 Fedora Media Writer 有几种方式。你可以通过 GitHub 从源码编译、下载 MacOS 或 Windows 版本、使用 dnf 或 yum 安装 RPM 包，或者以 Flatpak 的形式获得。在 Fedora 上：$ sudo dnf install mediawriter 最新版本请参见 GitHub 仓库的发布部分。准备好你的媒体介质首先，你需要一个 USB 驱动器来安装你的 Linux 操作系统。这就是 Fedora Media Writer 要烧录的设备。这个驱动器必须是空白或可擦除的，因为 该 USB 驱动器上的所有数据都会被删除。如果有任何数据，哪怕只是一个文件，如果你不想丢失，那么你必须在继续之前备份它！确认你的 USB 驱动器是可擦除的之后，将它插入你的电脑并启动 Fedora Media Writer。使用 Fedora Media Writer当你启动 Fedora Media Writer 时，你会看到一个页面，提示你从互联网上获取一个可引导的镜像，或者从你的硬盘上加载一个自定义镜像。第一个选择是 Fedora 的最新版本。Workstation 版本适用于台式机和笔记本电脑，Server 版本适用于虚拟化、机架服务器或任何你想作为服务器运行的情况。如果你选择了 Fedora 镜像，Media Writer 会下载一个光盘镜像（通常称为 “iso”，文件扩展名为 .iso），并将其保存到你的下载文件夹中，这样你就可以重复使用它来烧录另一个驱动器。另外还有 Fedora Spins，这是来自 Fedora 社区的镜像，它旨在满足小众的兴趣。例如，如果你是 MATE 桌面的粉丝，那么你会很高兴地发现 Media Writer 提供了 MATE spin。它有很多，所以请滚动查看所有的选择。如果你是 Linux 的新手，不要被吓到或感到困惑：这些额外的选项是为老用户准备的，这些用户除了默认的选项外，还发展出了自己的偏好，所以对你来说，只使用 Workstation 或 Server 选项就行，这取决于你是想把 Fedora 作为一个桌面还是作为一个服务器操作系统来运行。如果你需要一个与你当前使用的 CPU 不同架构的镜像，从窗口右上角的下拉菜单中选择 CPU 架构。如果你已经将镜像保存在硬盘上，请选择“Custom Image”选项，并选择你要烧录到 USB 的发行版的 .iso 文件。写入 USB 驱动器当你下载或选择了一个镜像，你必须确认你要将该镜像写入驱动器。驱动器选择下拉菜单只显示了外部驱动器，所以你不会意外地覆盖自己的硬盘驱动器。这是 Fedora Media Writer 的一个重要功能，它比你在网上看到的许多手动说明要安全得多。然而，如果你的计算机上连接了多个外部驱动器，除了你想覆盖的那个，你应该将它们全部移除，以增加安全性。选择你要安装镜像的驱动器，然后单击“Write to Disk”按钮。稍等一会儿，镜像就会被写入到你的驱动器，然后可以看看 Don Watkins 对如何从 USB 驱动器启动到 Linux的出色介绍。开始使用 LinuxFedora Media Writer 是一种将 Fedora Workstation 或 Server，或任何 Linux 发行版烧录到 USB 驱动器的方法，因此你可以在安装它到设备上之前试用它。试试吧，并在评论中分享你的经验和问题。via: https://opensource.com/article/20/10/fedora-media-writer作者：Sumantro Mukherjee 选题：lujun9972 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
一位新的开源贡献者告诉你如何加入到开源项目中。先前，我把我的第一次开源贡献的拖延归咎于冒牌综合症。但还有一个我无法忽视的因素：我做出决定太艰难了。在成千上百万的开源项目中选择时，选择一个要做贡献的项目是难以抉择的。如此重负，以至于我常常不得不关掉我的笔记本去思考：“或许我改天再做吧”。错误之二是让我对做出决定的恐惧妨碍了我做出第一次贡献。在理想世界里，也许开始我的开源之旅时，心中就已经有了一个真正关心和想去做的具体项目，但我有的只是总得为开源项目做出贡献的模糊目标。对于那些处于同一处境的人来说，这儿有一些帮助我挑选出合适的项目（或者至少是一个好的项目）来做贡献的策略。经常使用的工具一开始，我不认为有必要将自己局限于已经熟悉的工具或项目。有一些项目我之前从未使用过，但由于它们的社区很活跃，或者它们解决的问题很有趣，因此看起来很有吸引力。但是，考虑我投入到这个项目中的时间有限，我决定继续投入到我了解的工具上去。要了解工具需求，你需要熟悉它的工作方式。如果你想为自己不熟悉的项目做贡献，则需要完成一个额外的步骤来了解代码的功能和目标。这个额外的工作量可能是有趣且值得的，但也会使你的工作时间加倍。因为我的目标主要是贡献，投入到我了解的工具上是缩小范围的很好方式。回馈一个你认为有用的项目也是有意义的。活跃而友好的社区在选择项目的时候，我希望在那里有人会审查我写的代码才会觉得有信心。当然，我也希望审核我代码的人是个和善的人。毕竟，把你的作品放在那里接受公众监督是很可怕的。虽然我对建设性的反馈持开放态度，但开发者社区中的一些有毒角落是我希望避免的。为了评估我将要加入的社区，我查看了我正在考虑加入的仓库的 议题 issue 部分。我要查看核心团队中是否有人定期回复。更重要的是，我试着确保没有人在评论中互相诋毁（这在议题讨论中是很常见的）。我还留意了那些有行为准则的项目，概述了什么是适当的和不适当的在线互动行为。明确的贡献准则因为这是我第一次为开源项目做出贡献，在此过程中我有很多问题。一些项目社区在流程的文档记录方面做的很好，可以用来指导挑选其中的议题并发起拉取请求。 Gatsby 是这种做法的典范，尽管那时我没有选择它们，因为在此之前我从未使用过该产品。这种清晰的文档帮助我们缓解了一些不知如何去做的不安全感。它也给了我希望：项目对新的贡献者是开放的，并且会花时间来查看我的工作。除了贡献准则外，我还查看了议题部分，看看这个项目是否使用了“ 第一个好议题 good first issue ”标志。这是该项目对初学者开放的另一个迹象（并可以帮助你学会要做什么）。总结如果你还没有计划好选择一个项目，那么选择合适的领域进行你的第一个开源贡献更加可行。列出一系列标准可以帮助自己缩减选择范围，并为自己的第一个拉取请求找到一个好的项目。via: https://opensource.com/article/19/11/my-first-open-source-contribution-mistake-decisions作者：Galen Corey 选题：lujun9972 译者：chenmu-kk 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
将 Kubernetes 与 Ansible 结合实现云端自动化。此外，还可以参照我们的 Ansible 的 k8s 模块速查表。Ansible 是实现自动化工作的优秀工具，而 Kubernetes 则是容器编排方面的利器，要是把两者结合起来，会有怎样的效果呢？正如你所猜测的，Ansible + Kubernetes 的确可以实现容器编排自动化。Ansible 模块实际上，Ansible 本身只是一个用于解释 YAML 文件的框架。它真正强大之处在于它丰富的模块，所谓 模块 module ，就是在 Ansible 剧本 playbook 中让你得以通过简单配置就能调用外部应用程序的一些工具。Ansible 中有模块可以直接操作 Kubernetes，也有对一些相关组件（例如 Docker 和 Podman）实现操作的模块。学习使用一个新模块的过程和学习新的终端命令、API 一样，可以先从文档中了解这个模块在调用的时候需要接受哪些参数，以及这些参数在外部应用程序中产生的具体作用。访问 Kubernetes 集群在使用 Ansible Kubernetes 模块之前，先要有能够访问 Kubernetes 集群的权限。在没有权限的情况下，可以尝试使用一个短期在线试用账号，但我们更推荐的是按照 Kubernetes 官网上的指引，或是参考 Braynt Son 《入门 Kubernetes》的教程安装 Minikube。Minikube 提供了一个单节点 Kubernetes 实例的安装过程，你可以像使用一个完整集群一样对其进行配置和交互。下载 Ansible k8s 速记表（需注册）在安装 Minikube 之前，你需要确保你的环境支持虚拟化并安装 libvirt，然后对 libvirt 用户组授权：$ sudo dnf install libvirt $ sudo systemctl start libvirtd $ sudo usermod --append --groups libvirt `whoami` $ newgrp libvirt 安装 Python 模块为了能够在 Ansible 中使用 Kubernetes 相关的模块，你需要安装以下这些 Python 模块：$ pip3.6 install kubernetes --user $ pip3.6 install openshift --user 启动 Kubernetes如果你使用的是 Minikube 而不是完整的 Kubernetes 集群，请使用 minikube 命令在本地创建一个最精简化的 Kubernetes 实例：$ minikube start --driver=kvm2 --kvm-network default 然后等待 Minikube 完成初始化，这个过程所需的时间会因实际情况而异。获取集群信息集群启动以后，通过 cluster-info 选项就可以获取到集群相关信息了：$ kubectl cluster-info Kubernetes master is running at https://192.168.39.190:8443 KubeDNS is running at https://192.168.39.190:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'. 使用 k8s 模块Ansible 使用 k8s 这个模块来实现对 Kubernetes 的操作，在剧本中使用 k8s 模块就可以对 Kuvernetes 对象进行管理。这个模块描述了 kubectl 命令的最终状态，例如对于以下这个使用 kubectl 创建新的命名空间的操作：$ kubectl create namespace my-namespace 这是一个很简单的操作，而对这个操作的最终状态用 YAML 文件来描述是这样的：- hosts: localhost tasks: - name: create namespace k8s: name: my-namespace api_version: v1 kind: Namespace state: present 如果你使用的是 Minikube，那么主机名（hosts）应该定义为 localhost。需要注意的是，所使用的模块也定义了可用参数的语法（例如 api_version 和 kind 参数）。在运行这个剧本之前，先通过 yamllint 命令验证是否有错误：$ yamllint example.yaml 确保没有错误之后，运行剧本：$ ansible-playbook ./example.yaml 可以验证新的命名空间是否已经被创建出来：$ kubectl get namespaces NAME STATUS AGE default Active 37h kube-node-lease Active 37h kube-public Active 37h kube-system Active 37h demo Active 11h my-namespace Active 3s 使用 Podman 拉取容器镜像容器是个 Linux 系统，几乎是最小化的，可以由 Kubernetes 管理。LXC 项目和 Docker 定义了大部分的容器规范。最近加入容器工具集的是 Podman，它不需要守护进程就可以运行，为此受到了很多用户的欢迎。通过 Podman 可以从 Docker Hub 或者 Quay.io 等存储库拉取容器镜像。这一操作对应的 Ansible 语法也很简单，只需要将存储库网站提供的镜像路径写在剧本中的相应位置就可以了： - name: pull an image podman_image: name: quay.io/jitesoft/nginx 使用 yamllint 验证：$ yamllint example.yaml 运行剧本：$ ansible-playbook ./example.yaml [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all' PLAY [localhost] ************************ TASK [Gathering Facts] ************************ ok: [localhost] TASK [create k8s namespace] ************************ ok: [localhost] TASK [pull an image] ************************ changed: [localhost] PLAY RECAP ************************ localhost: ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 使用 Ansible 实现部署Ansible 除了可以执行小型维护任务以外，还可以通过剧本实现其它由 kubectl 实现的功能，因为两者的 YAML 文件之间只有少量的差异。在 Kubernetes 中使用的 YAML 文件只需要稍加改动，就可以在 Ansible 剧本中使用。例如下面这个用于使用 kubectl 命令部署 Web 服务器的 YAML 文件：apiVersion: apps/v1 kind: Deployment metadata: name: my-webserver spec: selector: matchLabels: run: my-webserver replicas: 1 template: metadata: labels: run: my-webserver spec: containers: - name: my-webserver image: nginx ports: - containerPort: 80 如果你对其中的参数比较熟悉，你只要把 YAML 文件中的大部分内容放到剧本中的 definition 部分，就可以在 Ansible 中使用了： - name: deploy a web server k8s: api_version: v1 namespace: my-namespace definition: kind: Deployment metadata: labels: app: nginx name: nginx-deploy spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: my-webserver image: quay.io/jitesoft/nginx ports: - containerPort: 80 protocol: TCP 执行完成后，使用 kubectl 命令可以看到预期中的的 部署 deployment ：$ kubectl -n my-namespace get pods NAME READY STATUS nginx-deploy-7fdc9-t9wc2 1/1 Running 在云上使用模块随着现在越来越多的开发和部署工作往云上转移的趋势，我们必须了解如何在云上实现自动化。其中 k8s 和 podman_image 这两个模块只是云开发中的其中一小部分。你可以在你的工作流程中寻找一些需要自动化的任务，并学习如何使用 Ansible 让你在这些任务上事半功倍。via: https://opensource.com/article/20/9/ansible-modules-kubernetes作者：Seth Kenlon 选题：lujun9972 译者：HankChow 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
作为云原生的核心产品，Kubernetes 提供的编排和管理功能，能轻松完成大规模容器部署，但 Kubernetes 自身的复杂性也导致众多企业一直徘徊于容器服务之外。据调查，只有不足 10% 的用户表示使用 Kubernetes 时没有遇到阻碍。在 2019 年的一个关于容器技术的一个调查数据中，有 40% 的受访者表示计划采用容器。然而，据 UCloud 产品经理张鹏波透露说，在他们接触的用户当中，曾经在两年前表示有兴趣迁移到容器的用户，两年过去了，这些用户很多依旧“计划采用”容器服务。这让我好奇其中发生了什么。让我们一起来探寻一下其中的症结，以及是否可以将复杂的 Kubernetes变得不复杂。Kubernetes 复杂吗？自从 2017 年，Kubernetes 在容器编排三强争霸赛中胜出后，就成为了容器编排领域的事实标准，极大的助推了容器技术在业界的发展。作为企业级的容器服务编排系统，Kubernetes 从技术上是现在、乃至未来的主流。容器拥有很多优点，包括不可变环境、轻量级、快速启动等优势；而容器编排系统又在此基础上更进一步，提供了更加强大的功能，包括自动部署、快速扩容、故障自愈等等。然而，在这一系列令人神往的优势和功能背后，Kubernetes 也相应的引入了更多的复杂性。这些复杂性体现在多个方面，比如说：首先是 Kubernetes 架构，本质上，Kubernetes 是用来管理分布式系统的平台。而一说到分布式，复杂性是不可避免的，管理分布式系统的平台自然也不例外。另外是容器支持的网络，Kubernetes 支持的网络类型很多。很多用户对于 Kubernetes 的网络非常疑惑或者说很纠结，当业务要迁移到 Kubernetes 时，选择什么类型的网络是一个难以抉择的问题。特别是在业务迁移上去之后又遇到一些问题的话，排查起来会非常麻烦，这给用户带来很大负担。最后还有就是各种各样 Kubernetes 组件的配置，这些都是用户将业务迁移到 Kubernetes 的障碍。有什么解决方案吗？如上所述，并不是每个用户都能尝到桃子的美味的，还有很多渴望迁移到容器环境的用户被拒之门外。在这种情况下，全球各家云服务商，都纷纷推出自己的容器编排服务，在 Kubernetes上构建了自己的 Kubernetes发行版或定制产品。而作为中国第一家公有云科创板上市公司，UCloud 利用在 UK8S 产品的技术沉淀，推出新的容器管理服务产品 Cube：两步即可部署容器化应用；采用无服务器形态，不需要再维护底层基础设施；按秒后付费，无需预留资源；降低企业部署云原生产品的学习和技术门槛。为什么要推出 Cube？在容器和 Kubernetes 如火如荼发展的同时，UCloud 发现，在他们的 UK8S 上线大概两年多的时间里，之前曾经想把业务迁到 Kubernetes 的用户。在两年后的今天，他们还是说这个话，说我很想上 Kubernetes，还需要你们来做技术交流。UCloud 产品经理张鹏波说：这让我们一度很困惑，我们一开始也做了一些尝试，比如说做了很多线下的培训、线上的交流，尝试去推动用户把他们的业务迁移到 UK8S 里面来。但是发现这个过程非常缓慢，我们没有办法控制和推动用户的迁移流程。很多公司的业务在快速发展，运维和研发是没有办法做架构上的调整的。发现沟通、培训这条路实际上是走不通之后的。后来我们想，能不能换一条路，能不能基于 Kubernetes提供这样一个产品：这个产品只具有 Kubernetes 好处，掩盖了 Kubernetes 的复杂性，只提供类似于自动部署、快速扩容这样的特性，而用户不需要关心底层的 Kubernetes 架构，不需要再操心 Kubernetes 的网络了，也不需要去学习 Kubernetes 的各种 API 了。Cube 的设计思路沿着这个思路，UCloud 形成了自己的 Cube 产品。它的设计是从以下几个方面考虑的：首先，Kubernetes 里面哪些功能是会经常会用到的，比如 Deployment 控制多副本容器组的管理， Job 控制任务型容器组，Service 做服务发现，PVC可以用来抽象使用块存储以及文件存储。这是 Kubernetes 最核心的一些功能。UCloud 在设计 Cube 的时候，希望将这些功能全部保留。这意味着整个 Cube 是基于 Kubernetes 来实现的。把这些复杂性全部屏蔽掉，用户不需要维护 Kubernetes 集群，不需要操心 Kubernetes 网络方案，而是由 Cube 提供一个最优网络方案，把容器的网络和虚拟机的网络扁平化。其次，把业务迁移到 Kubernetes 的时候，把单体业务变成分布式业务、微服务的时候，用户一定需要考虑容器日志的统一收集、统一管理的问题。在 Cube 里面自动完成了日志的采集工作，集成了日志管理工作。另外，对容器环境的监控也是同样的道理，统一在 Cube 中完成。当把这些产品全部集成到 Cube 里以后，Cube 是一个什么样的产品形态呢？首先保证 Kubernetes 最核心的功能，用户能够在 Cube 里面创建 Kubernetes 常用的对象；另外 Cube 的产品形态应该是无服务器的形式；最后，Cube 引入了轻量级的虚拟化技术，实现了容器组与容器组之间虚拟机级别的隔离，这样好处是什么呢？我们都知道容器的运行是共享使用宿主机的内核的，存在一定的安全风险，Cube 为每一个容器组实现了一层虚拟机的封装，可以使用户安全的运行容器；同时 UCloud 容器团队针对虚拟机的启动进行了深入优化，虚拟机启动速度最快只需要 125 毫秒。Cube 的功能亮点快速迁移让我们横向对比一下，用户使用 Kubernetes 和 Cube 的流程上会有哪些区别。左边是 Kubernetes，用户要把业务迁移到 Kubernetes，大概要经过这几个步骤：第一个步骤学习 Kubernetes，不仅仅是一个人，也可能不仅仅是一个团队，这个过程可能需要三个月到一年。搭建集群，考虑集群的参数配置、集群的维护工作。然后是做业务镜像。之后还要考虑了解 Kubernetes的 API 以及 Kubernetes 应用。最后才部署应用。从 UCloud 观察到的情况来看，如果是对 Kubernetes非常熟悉的用户，这个过程可能要一两个月；但是如果对 Kubernetes 不熟悉，需要半年乃至一年。使用 Cube 的话，就不再需要学习复杂的 Kubernetes知识了，和创建虚拟机一样在 Cube 里面创建一个应用，全部都是图形化的方式。所以，Cube 整个流程只有两步：制作镜像。在 Cube 的界面上直接部署应用就好了。UCloud 产品经理张鹏波说，“我们有几个用户知道了 Cube 公测，公测以后第一天进行了解，第二天就把自己部署的业务迁移到 Cube 上来了，一天的时间就可以完成业务迁移的工作。”成本降低另外在成本方面，我们知道 Kubernetes 是一个大型的分布式集群，除了工作节点以外，还有管理节点。管理节点只是用来管理 Kubernetes 支持的应用，这部分开销实际上从企业角度来看是浪费的。对业务没有起到正向的作用，所以 Kubernetes 成本会比较高。而对于 Cube，因为只需要为容器实例来付费，容器用了多少资源就付多少钱，不再考虑管理节点的开销、资源预留的问题。更多的便利性此外，还有一些其他针对 Kubernetes 自身的一些的改进。在 Cube 整个研发过程中，引入了一些亮点。第一个是镜像预热，我们知道容器的启动速度其实很快的，基本一秒钟就能拉起来容器实例。但是这是热启动的情况，就是说工作节点上有这个镜像时，拉起来速度是很快的。而在冷启动的情况下，如果虚拟机上没有对应的镜像时，并且镜像非常大时，这个过程就非常缓慢了。我们遇到过最大的镜像有 20G 以上，容器的启动的时间就要花费几分钟。这样，容器本来说快速启动的优势就没有了，比虚拟机还慢了。所以，UCloud 在研发 Cube 的时候，使用了镜像预热的技术，把容器镜像变成 MBD 设备，在容器启动的时候，把它纳入到启动容器的节点上去，省去了镜像拉起的时间，让容器冷启动的时间从以前需要十几分钟变成现在只要几秒钟就拉起来了。另外，因为 Kubernetes 是由谷歌开源的一项方案，很多理念和大部分企业更加超前一点。所以，在这种设计理念下，Kubernetes 每一个容器在重启以后，容器的 IP 就会变化。而我们知道很多传统的应用设计上是依赖于固定 IP 的，IP 一旦变化整个应用就会出现一些问题。很多用户都希望让容器重启后 IP 保持不变。这对于特别是有状态的服务尤为重要。所以，在 Cube 里面使用了 UCloud 的 EIP 功能，能够让用户容器重启时其 IP 保持不变。最后，Cube 要兼容原有的运维习惯。传统上，虚拟机和 IDC 里面的物理机在使用体验上是没有什么差别的。有些用户之前业务部署在虚拟机，经常需要在出现问题的时候，直接登录到虚拟机里面去排错，查看一些日志。所以，为了兼容用户以前使用虚拟机的习惯，在 Cube 里面的容器也提供了登录功能，让用户在业务出现问题的时候，能够登录到容器里去快速排查问题。结语说实话，关于 Kubernetes 和各种发行版，我们也看过和研究过不少产品了，但是更多的是叶公好龙，没有将自己的应用迁移到 Kubernetes上的想法。一方面对着 Kubernetes 的各种先进特性馋涎欲滴，另外一方面却担心没有足够的精力面对全新的技术变化带来的挑战。不过，今天看到 UCloud 的 Cube 产品，我决定要去亲自试试这个桃子的味道了。
本文译自 Fedora 官方发布公告。今天，我很兴奋地与大家分享数千名 Fedora 项目贡献者辛勤工作的成果：我们的最新版本 Fedora 33 来了! 这是一个有着很多变化的大版本，但我相信所有这些工作也会让您感到舒适，实现我们的目标：即为您带来最新的稳定、强大、健壮的自由和开源软件，并提供许多易于使用的产品。如果您不想耽误时间，直接体验，现在就去 https://getfedora.org/ 下载吧，欲了解详情请继续阅读！找到适合您的 Fedora 风味！Fedora Edition 是针对桌面、服务器和云环境中各种“体现”特定用途的目标产品，现在它也适用于物联网。Fedora Workstation 专注于桌面，尤其是面向那些想要“只管去用”的 Linux 操作系统体验的软件开发者。这个版本的特点是 GNOME 3.38，它一如既往地有很多很棒的改进。新增的 Tour 应用可以帮助新用户学习它们的操作方式。和我们所有其他面向桌面的变体一样，Fedora Workstation 现在使用 BTRFS 作为默认文件系统。这些发布的版本中带来了很多伟大的增强功能，这个先进的文件系统为之奠定了基础。为了您的视觉享受，Fedora 33 Workstation 现在默认提供了一个动画背景（它会基于一天中的时间变化）。Fedora CoreOS 是一个新兴的 Fedora 版本。它是一个自动更新的、最小化的操作系统，用于安全地、大规模地运行容器化工作负载。它提供了几个更新流，可以遵循大致每两周一次的自动更新。目前 next 流是基于 Fedora 33 的，testing 和 stable 流后继也会跟进。您可以从下载页面中找到关于跟随 next 流发布的工件的信息，并在 Fedora CoreOS 文档中找到关于如何使用这些工件的信息。新晋升为 Edition 状态的 Fedora IoT，为物联网生态系统和边缘计算用例提供了坚实的基础。在许多功能之外，Fedora 33 IoT 还引入了 平台抽象安全 Platform AbstRaction for SECurity （PARSEC），这是一个开源倡议，以平台无关的方式为硬件安全和加密服务提供了通用 API。当然，我们制作的不仅仅是“官方版本”，还有 Fedora Spin和 Lab。Fedora Spin 和 Lab 针对不同的受众和用例，包括 Fedora CompNeuro，它为神经科学带来了大量的开源计算建模工具，以及 KDE Plasma 和 Xfce等桌面环境。此外，别忘了我们还有备用架构：ARM AArch64、Power 和 S390x。在 Fedora 33 中提供的新功能，AArch64 用户可以使用 .NET Core 语言进行跨平台开发。我们改进了对 Pine64 设备、NVidia Jetson 64 位平台以及 Rockchip 片上系统（SoC）设备的支持，包括 Rock960、RockPro64 和 Rock64。（不过，有个最新的说明：在其中一些设备上可能会出现启动问题。从现有的 Fedora 32 升级是没问题的。更多信息将在常见错误页面上公布。）我们也很高兴地宣布，Fedora 云镜像和 Fedora CoreOS 将首次与 Fedora 33 一起在亚马逊的 AWS 市场 中提供。Fedora 云镜像在亚马逊云中已经存在了十多年，您可以通过 AMI ID 或点击一下来启动我们的官方镜像。该市场提供了获得同样东西的另一种方式，显著扩大了 Fedora 的知名度。这也将使我们的云镜像可以更快地在新的 AWS 区域中可用。特别感谢 David Duncan 让这一切成为现实！常规改进无论您使用的是哪种版本的 Fedora，您都会得到开源世界提供的最新版本。遵循我们的 First 原则，我们更新了关键的编程语言和系统库包，包括 Python 3.9、Ruby on Rails 6.0 和 Perl 5.32。在 Fedora KDE 中，我们沿用了 Fedora 32 Workstation 中的工作，默认启用了 EarlyOOM 服务，以改善低内存情况下的用户体验。为了让 Fedora 的默认体验更好，我们将 nano 设置为默认编辑器。nano 是一个对新用户友好的编辑器。当然，那些想要像 vi 这样强大的编辑器的用户可以自己设置默认编辑器。我们很高兴您能试用新版本! 前往 https://getfedora.org/ 并立即下载它。或者如果您已经在运行 Fedora 操作系统，请按照这个简单的升级说明进行升级。关于 Fedora 33 新特性的更多信息，请参见发布说明。关于安全启动的说明 安全启动 Secure Boot 是一种安全标准，它确保只有官方签署的操作系统软件才能加载到您的计算机上。这对于防止持久恶意软件非常重要，因为这些恶意软件可能会隐藏在您的计算机固件中，甚至在重新安装操作系统时也能存活。然而，在 Boot Hole 漏洞发生后，用于签署 Fedora 引导加载器 Bootloader 软件的加密证书将被撤销，并被新的证书取代。由于这将产生大范围的影响，撤销应该要到 2021 年第二季度或更晚才会广泛推行。然而，一些用户可能已经从其他操作系统或固件更新中收到了这种撤销。在这种情况下，Fedora 将不能在启用了安全启动时进行安装。要说明的是，这不会影响大多数用户。如果它确实影响到了您，您可以暂时禁用安全启动。我们会在大范围的证书撤销之前发布一个用新证书签署的更新，在所有支持的版本上都可以使用，到那时，安全启动应该可以重新启用。万一出现问题时……如果您遇到问题，请查看 Fedora 33 常见错误页面；如果您有疑问，请访问我们的 Ask Fedora 用户支持平台。谢谢大家感谢在这个发布周期中为 Fedora 项目做出贡献的成千上万的人，尤其是那些在疫情大流行期间为使这个版本准时发布而付出额外努力的人。Fedora 是一个社区，很高兴看到我们如此互相支持。via: https://fedoramagazine.org/announcing-fedora-33/作者：Matthew Miller 选题：lujun9972 译者：wxy 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
Linux 5.10 终于抛弃了造成了安全隐患的老函数
多年来，set\_fs() 一直是众所周知的麻烦，现在它终于消失了。Linus Torvalds 开启了 Linux 内核的又一个开发周期，宣布 5.10-rc1 发布了，而且这一次还有一个历史性的转折：新内核标志着一个几十年前的函数的落幕，这个函数在被发现会导致安全漏洞后早已成为多余的函数。随着长达两周的，每一次新的 Linux 内核迭代发布前的合并窗口的关闭，Torvalds 在 Linux 内核邮件列表上分享了他的感想，他认为“事情似乎相当顺利”。“合并窗口”是 Linux 新内核发布过程中的一个关键部分，在此窗口期间，每天有多达 1000 个由开发者社区提交的补丁被合并到 Torvalds 管理的主线仓库中。而审查过程会确保每个补丁都能实现理想的变化。这一次，Torvalds 提请大家注意移除了一个叫 set_fs() 的寻址函数，这个函数可以追溯到 Linux 的最初版本。“对我来说，这是最有趣的变化，set_fs() 被移除了，”他写道，“这不是一个巨大的变化，但很有趣，因为 set_fs() 指定用户空间副本是否真正进入用户空间或内核空间的这个模式，几乎可以追溯到 Linux 的最初版本。”正如 Torvalds 所解释的那样，set_fs() 函数可以通过取消用户空间和内核空间之间的分界来覆盖地址空间。该函数在管理英特尔早期 x86 处理器时被广泛使用，以控制非特权代码可以访问的虚拟地址范围。然而，2010 年，“常见漏洞和暴露”（CVE）详细披露了 set_fs() 带来的安全问题。通过绕过某些访问限制，证实该函数能够“覆盖任意内核内存位置”和“获得特权” —— 在某些情况下，这可以让用户空间覆盖内核数据。鉴于该工具的安全缺陷，包括 x86、PowerPC、s390 和 RISC-V 在内的一些架构已经取消了地址空间覆盖功能。但是，正如 Torvalds 写道：“我们仍然留着 set_fs()，因为并不是每个架构都已经转换为新的世界秩序。”除了这个久违的历史补救之外，5.10-rc1 版本和大多数内核版本一样，还伴随着无数的变化。Torvalds 统计了近 1700 人的近 1.4 万次提交，改动范围从支持自动驾驶汽车和机器人的 Nvidia SOC 芯片到支持任天堂 Switch 控制器。统计结果表明。大约新增了 70.4 万行代码和删除了 41.9 万行代码，这使得 5.10-rc1 的大小与 Linux 有史以来最大的内核 5.8 相当。“这看起来是一个比我预期的更大的版本，虽然合并窗口比 5.8 的窗口小，但也小不了多少，”Torvalds 说，“而 5.8 是我们有史以来最大的版本。”按照 Linux 典型的时间表，5.10-rc1 之后将有几个星期时间来提交修复问题的补丁，在预计 12 月发布稳定内核之前，将发布几个候选版本。via: https://www.zdnet.com/article/linux-5-10-finally-ditches-decades-old-tool-that-caused-security-bugs/ 作者：Daphne Leprince-ringuet 译者：wxy 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
MellowPlayer：一款用于各种流媒体音乐服务的桌面应用
MellowPlayer 是一个自由开源的桌面应用，可以让你在 Linux 和 Windows 上整合基于网络的音乐流媒体服务。毋庸置疑，很多用户都喜欢使用流媒体服务来收听自己喜欢的音乐，而不是从商店购买单首音乐或者下载收藏。当然，流媒体服务可以让你探索新的音乐，帮助艺术家轻松传播到更多的听众。但是，由于有许多的音乐流媒体服务（Soundcloud、Spotify、YouTube Music、Amazon Music 等），因此当在使用电脑时，要有效地使用它们往往会变得很麻烦。你可以在 Linux 上安装 Spotify，但没有 Amazon Music 的桌面应用，所以，有可能你无法从单一门户管理流媒体服务。如果一个桌面应用可以让你同时在 Windows 和 Linux 上免费整合流媒体服务呢？在本文中，我将介绍这样一款应用：MellowPlayer。MellowPlayer: 集成各种流媒体音乐服务的开源应用MellowPlayer 是一款自由开源的跨平台桌面应用，它可以让你整合多个流媒体服务，并在一个界面上管理它们。你可以整合多个支持的流媒体服务。你还可以从每个服务中获得一定程度的控制权，来调整你的体验。例如，你可以设置在 YouTube 上自动跳过或静音广告。对 Windows 和 Linux 的跨平台支持绝对是一个加分项。除了能够管理流媒体服务外，它还将播放器与系统托盘整合在一起来轻松控制音乐。这意味着你可以使用键盘上的媒体键来控制音乐播放器。另外值得一提的是，你只要在应用内自己创建一个插件，就可以添加一个官方不支持的新服务。为了让你对它有更多的了解，下面就让我重点介绍一下所有的主要特点。MellowPlayer 的特点跨平台 （Windows 和 Linux）自由且开源基于插件的应用，让你可以通过创建一个插件来添加新的服务将服务作为本地桌面应用与系统托盘整合支持热键支持通知收听历史在 Linux 上安装 MellowPlayerMellowPlayer 是以 Flatpak 包的形式提供的。我知道这让一些人很失望，但它在 Linux 中只有 Flaptak，Windows 中只有一个可执行文件。如果你不知道，请按照我们的在 Linux 上使用 Flatpak 指南来开始使用。下载 MellowPlayer总结MellowPlayer 是一款方便的桌面应用，适合经常涉猎多种流媒体音乐服务的用户使用。尽管根据我的测试，它在 SoundCloud、YouTube 和 Spotify 上都能正常工作，但我确实注意到，当我试图重新调整窗口大小时，应用会崩溃，只是在此提醒一下。你可以在它的 GitLab 页面上了解更多关于它的内容。还有两个类似的应用，可以让你播放多个流媒体音乐服务。Nuvola 和 Nuclear Music Player。你可能会想看看它们。你试过 MellowPlayer 吗？欢迎在下方评论中分享你的想法。via: https://itsfoss.com/mellow-player/作者：Ankush Das 选题：lujun9972 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出