分类 技术 下的文章

JavaScript 是为 Web 而生的,但它可以做的事远不止于此。本文将带领你了解它的基础知识,然后你可以下载我们的备忘清单,以便随时掌握详细信息。

JavaScript 是一种充满惊喜的编程语言。许多人第一次遇到 JavaScript 时,它通常是作为一种 Web 语言出现的。所有主流浏览器都有一个 JavaScript 引擎;并且,还有一些流行的框架,如 JQuery、Cash 和 Bootstrap 等,它们可以帮助简化网页设计;甚至还有用 JavaScript 编写的编程环境。它似乎在互联网上无处不在,但事实证明,它对于 Electron 等项目来说也是一种有用的语言。Electron 是一个构建跨平台桌面应用程序的开源工具包,它使用的语言就是 JavaScript。

JavaScript 语言的用途多到令人惊讶,它拥有各种各样的库,而不仅仅是用于制作网站。它的基础知识十分容易掌握,因此,它可以作为一个起点,助你跨出构建你想象中的东西的第一步。

安装 JavaScript

随着你的 JavaScript 水平不断提高,你可能会发现自己需要高级的 JavaScript 库和运行时环境。不过,刚开始学习的时候,你是根本不需要安装 JavaScript 环境的。因为所有主流的 Web 浏览器都包含一个 JavaScript 引擎来运行代码。你可以使用自己喜欢的文本编辑器编写 JavaScript,将其加载到 Web 浏览器中,接着你就能看到代码的作用。

上手 JavaScript

要编写你的第一个 JavaScript 代码,请打开你喜欢的文本编辑器,例如 AtomVSCode 等。因为它是为 Web 开发的,所以 JavaScript 可以很好地与 HTML 配合使用。因此,我们先来尝试一些基本的 HTML:

<html>
  <head>
    <title>JS</title>
  </head>
  <body>
    <p id="example">Nothing here.</p>
  </body>
</html>

保存这个文件,然后在 Web 浏览器中打开它。

浏览器中显示的 HTML

要将 JavaScript 添加到这个简单的 HTML 页面,你可以创建一个 JavaScript 文件并在页面的 <head> 中引用它,或者只需使用 <script> 标记将 JavaScript 代码嵌入 HTML 中。在这个例子中,我嵌入了下面的代码:

<html>
  <head>
    <title>JS</title>
  </head>
  <body>
    <p id="example">Nothing here.</p>

    <script>
      let myvariable = "Hello world!";

      document.getElementById("example").innerHTML = myvariable;
    </script>

  </body>
</html>

在浏览器中重新加载页面。

在浏览器中显示带有 JavaScript 的 HTML

如你所见,<p> 标签仍然包含字符串 "Nothing here",但是当它被渲染时,JavaScript 会改变它,使其包含 "Hello world"。是的,JavaScript 具有重建​​(或只是帮助构建)网页的能力。

这个简单脚本中的 JavaScript 做了两件事。首先,它创建一个名为 myvariable 的变量,并将字符串 "Hello world!" 放置其中。然后,它会在当前文档(浏览器呈现的网页)中搜索 ID 为 example 的所有 HTML 元素。当它找到 example 时,它使用了 innerHTML 属性将 HTML 元素的内容替换为 myvariable 的内容。

当然,我们也可以不用自定义变量。因为,使用动态创建的内容来填充 HTML 元素也是容易的。例如,你可以使用当前时间戳来填充它:

<html>
  <head>
    <title>JS</title>
  </head>
  <body>
    <p id="example">Date and time appears here.</p>

    <script>
      document.getElementById("example").innerHTML = Date();
    </script>
    
  </body>
</html>

重新加载页面,你就可以看到在呈现页面时生成的时间戳。再重新加载几次,你可以观察到秒数会不断增加。

JavaScript 语法

在编程中, 语法 syntax 指的是如何编写句子(或“行”)的规则。在 JavaScript 中,每行代码必须以分号(;)结尾,以便运行代码的 JavaScript 引擎知道何时停止阅读。(LCTT 译注:从实用角度看,此处的“必须”其实是不正确的,大多数 JS 引擎都支持不加分号。Vue.js 的作者尤雨溪认为“没有应该不应该,只有你自己喜欢不喜欢”,他同时表示,“Vue.js 的代码全部不带分号”。详情可以查看他在知乎上对于此问题的 回答。)

单词(或 字符串 strings )必须用引号(")括起来,而数字(或 整数 integers )则不用。

几乎所有其他东西都是 JavaScript 语言的约定,例如变量、数组、条件语句、对象、函数等等。

在 JavaScript 中创建变量

变量是数据的容器。你可以将变量视为一个盒子,你在其中放置数据,以便与程序的其他部分共享它。要在 JavaScript 中创建变量,你可以选用关键字 letvar 中的一个,请根据你打算如何使用变量来选择:var 关键字用于创建一个供整个程序使用的变量,而 let 只为特定目的创建变量,通常在函数或循环的内部使用。(LCTT 译注:还有 const 关键字,它用于创建一个常量。)

JavaScript 内置的 typeof 函数可以帮助你识别变量包含的数据的类型。使用第一个示例,你可以修改显示文本,来显示 myvariable 包含的数据的类型:

<string>
let myvariable = "Hello world!";
document.getElementById("example").innerHTML = typeof(myvariable);
</string>

接着,你就会发现 Web 浏览器中显示出 “string” 字样,因为该变量包含的数据是 "Hello world!"。在 myvariable 中存储不同类型的数据(例如整数),浏览器就会把不同的数据类型打印到示例网页上。尝试将 myvariable 的内容更改为你喜欢的数字,然后重新加载页面。

在 JavaScript 中创建函数

编程中的函数是独立的数据处理器。正是它们使编程得以 模块化。因为函数的存在,程序员可以编写通用库,例如​​,调整图像大小或统计时间花费的库,以供其他和你一样的程序员在他们的代码中使用。

要创建一个函数,你可以为函数提供一个自定义名称,后面跟着用大括号括起来的、任意数量的代码。

下面是一个简单的网页,其中包含了一个剪裁过的图像,还有一个分析图像并返回真实图像尺寸的按钮。在这个示例代码中,<button> 这个 HTML 元素使用了 JavaScript 的内置函数 onclick 来检测用户交互,它会触发一个名为 get_size 的自定义函数。具体代码如下:

<html>
  <head>
    <title>Imager</title>
  </head>
  <body>

    <div>
      <button onclick="get_size(document.getElementById('myimg'))">
        Get image size
    </button>
    </div>
    
    <div>
      <img style="width: 15%" id="myimg" src="penguin.png" />
    </div>
   
    <script>
      function get_size(i) {
        let w = i.naturalWidth;
        let h = i.naturalHeight;
        alert(w + " by " + h);
      }
    </script>
    
  </body>
</html>

保存这个文件,并将其加载到 Web 浏览器中以尝试这段代码。

自定义的 get_size 函数返回了图像尺寸

使用 JavaScript 的跨平台应用程序

你可以从代码示例中看到,JavaScript 和 HTML 紧密协作,从而创建了有凝聚力的用户体验。这是 JavaScript 的一大优势。当你使用 JavaScript 编写代码时,你继承了现代计算中最常见的用户界面之一,而它与平台无关,那就是 Web 浏览器。你的代码本质上是跨平台的,因此你的应用程序,无论是简单的图像大小分析器还是复杂的图像编辑器、视频游戏,或者你梦想的任何其他东西,都可以被所有人使用,无论是通过 Web 浏览器,还是桌面(如果你同时提供了一个 Electron 应用)。

学习 JavaScript 既简单又有趣。网络上有很多网站提供了相关教程,还有超过一百万个 JavaScript 库可帮助你与设备、外围设备、物联网、服务器、文件系统等进行交互。在你学习的过程中,请将我们的 JavaScript 备忘单 放在身边,以便记住语法和结构的细节。

JavaScript 备忘单

via: https://opensource.com/article/21/7/javascript-cheat-sheet

作者:Seth Kenlon 选题:lkxed 译者:lkxed 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

使用树莓派和电子纸显示屏开始倒计时你的下一个假期。

 title=

圆周率日 Pi Day (3 月 14 日) 来了又走,留下美好的回忆以及 许多树莓派项目 等待我们去尝试。在任何令人精神振奋、充满欢乐的假期后回到工作中都很难,圆周率日也不例外。当我们回望三月的时候,渴望那些天的快乐。但是不用害怕,亲爱的圆周率日庆祝者们,我们开始下一个节日的漫长倒计时!

好了,严肃点。我做了一个圆周率日倒计时器,你也可以!

不久前,我购买了一个 树莓派 Zero W,并且用它来 解决 WiFi 信号较差的原因 。我也对使用 电子纸 ePaper 来作为它的显示屏十分感兴趣。虽然我不知道该用它来干什么,但是!它看起来真的很有趣!我买了一个十分适合放在树莓派的顶部的 2.13 英寸的 WaveShare 显示器 。安装很简单:只需要将显示器接到树莓派的 GPIO 上即可。

我使用 树莓派操作系统 来实现该项目,虽然其他的操作系统肯定也能完成。但是下面的 raspi-config 命令在树莓派系统上很容易使用。

设置树莓派和电子纸显示屏

设置树莓派和电子纸显示屏一起工作,需要你在树莓派软件中启用串行外设接口(SPI),安装 BCM2835 C 库(来访问树莓派上的博通 BCM 2835 芯片的 GPIO 功能),安装 Python GPIO 库来控制电子纸显示屏。最后,你需要安装 WaveShare 的库来使用 Python 控制这个 2.13 英寸的显示屏。

下面是完成这些的步骤。

启用 SPI

树莓派上启用 SPI 最简单的方式是使用 raspi-config 命令。SPI 总线允许与设备进行串行数据通信——在本例中,电子纸显示:

$ sudo raspi-config

从弹出的菜单中, 选择 “ 接口选项 Interfacing Options -> SPI -> Yes ” 来启用 SPI 接口,然后启动。

安装 BCM2835 库

如上所述,BCM2835 库是用于树莓派博通 BCM2385 芯片的软件,它允许访问 GPIO 引脚来控制设备。

在我写这篇文章之时,用于树莓派的最新博通 BCM2385 库版本是 v1.68 。安装此库需要下载软件压缩包然后使用 make 来安装:

# 下载 BCM2853 库并解压
$ curl -sSL http://www.airspayce.com/mikem/bcm2835/bcm2835-1.68.tar.g> -o - | tar -xzf -

# 进入解压后的文件夹
$ pushd bcm2835-1.68/

# 配置、检查并安装 BCM2853 库
$ sudo ./configure
$ sudo make check
$ sudo make install

# 返回上级目录
$ popd

安装需要的 Python 库

你用 Python 控制电子纸显示屏需要安装 Python 库 RPi.GPIO,还需要使用 python3-pil 包来画图。显然,PIL 包已经不行了,但 Pillow 可以作为代替方案。我还没有为该项目测试过 Pillow ,但它可行:

# 安装需要的 Python 库
$ sudo apt-get update
$ sudo apt-get install python3-pip python3-pil
$ sudo pip3 install RPi.GPIO

注意:这些是 Python3 的指令。你可以在 WaveShare 网站查到 Python2 的指令。

下载 WaveShare 示例和 Python 库

Waveshare 维护了一个 Python 和 C 的 Git 库,用于使用其电子纸显示屏和一些展示如何使用它们的示例。对这个倒计时时钟而言,你需要克隆这个库并使用用于 2.13 英寸显示屏的库:

# 克隆这个 WaveShare e-Paper git 库
$ git clone https://github.com/waveshare/e-Paper.gi>

如果你用不同的显示器或者其他公司产品,需要使用适配软件。

Waveshare 提供了很多指导:

获得有趣的字体(选做)

你可以随心所欲的使用显示器,为什么不搞点花样?找一个炫酷的字体!

这有大量 开放字体许可 的字体可供选择。我十分喜爱 Bangers 字体。如果你看过 YouTube 那你见过这种字体了,它十分流行。你可以下载到本地的共享字体目录文件中,并且所有的应用都可以使用,包括这个项目:

# “Bangers” 字体是 Vernon Adams 使用 Google 字体开放许可授权的字体
$ mkdir -p ~/.local/share/fonts
$ curl -sSL https://github.com/google/fonts/raw/master/ofl/bangers/Bangers-Regular.ttf -o fonts/Bangers-Regular.ttf

创建一个圆周率日倒计时器

现在你已经安装好了软件,可以使用带有炫酷字体的电子纸显示屏了。你可以创建一个有趣的项目:倒计时到下一个圆周率日!

如果你想,你可以从该项目的 GitHub 仓库 直接下载 countdown.py 这个 Python 文件并跳到文章结尾。

为了满足大家的好奇心,我将逐步讲解。

导入一些库

#!/usr/bin/python3
# -*- coding:utf-8 -*-
import logging
import os
import sys
import time

from datetime import datetime
from pathlib import Path
from PIL import Image,ImageDraw,ImageFont

logging.basicConfig(level=logging.INFO)

basedir = Path(__file__).parent
waveshare_base = basedir.joinpath('e-Paper', 'RaspberryPi_JetsonNano', 'python')
libdir = waveshare_base.joinpath('lib')

开始先导入一些标准库之后脚本中用。也需要你从 PIL 添加 ImageImageDrawImageFont,你会用到这些来画一些简单的图形。最后,为本地 lib 目录设置一些变量,该目录包含了用于 2.13 英寸显示屏的 Waveshare Python 库,稍后你可以使用这些变量从本地目录加载库。

字体大小辅助函数

下一部分是为你选择的 Bangers-Regular.ttf 字体建立一个修改大小的辅助函数。该函数将整型变量作为大小参数,并返回一个图形字体对象来用于显示:

def set_font_size(font_size):
    logging.info("Loading font...")
    return ImageFont.truetype(f"{basedir.joinpath('Bangers-Regular.ttf').resolve()}", font_size)

倒计时逻辑

接下来是计算这个项目的一个函数:距下次圆周率日还有多久。如果是在一月,那么计算剩余天数将很简单。但是你需要考虑是否今年的圆周率日是否已经过去了(允悲)。如果是的话,那么计算在你可以再次庆祝之前还有多少天:

def countdown(now):
    piday = datetime(now.year, 3, 14)

    # 如果错过了就增加一年
    if piday < now:
        piday = datetime((now.year + 1), 3, 14)

    days = (piday - now).days

    logging.info(f"Days till piday: {days}")
    return day

主函数

最后,到了主函数,需要初始化显示屏并向它写数据。这时,你应该写一个欢迎语然后再开始倒计时。但是首先,你需要加载 Waveshare 库:

def main():

    if os.path.exists(libdir):
        sys.path.append(f"{libdir}")
        from waveshare_epd import epd2in13_V2
    else:
        logging.fatal(f"not found: {libdir}")
        sys.exit(1)

上面的代码片段检查以确保该库已下载到倒计时脚本旁边的目录中,然后加载epd2in13_V2 库。如果你使用不同的显示屏,则需要使用不同的库。如果你愿意,也可以自己编写。我发现阅读 Waveshare 随显示屏提供的 Python 代码很有趣,它比我想象的要简单得多。

下一段代码创建一个 EPD(电子纸显示屏)对象以与显示器交互并初始化硬件:

    logging.info("Starting...")
    try:
        # 创建一个显示对象
        epd = epd2in13_V2.EPD()

        # 初始化并清空显示
        # ePaper 保持它的状态处分更新
        logging.info("Initialize and clear...")
        epd.init(epd.FULL_UPDATE)
        epd.Clear(0xFF)

关于电子纸的一个有趣之处:它仅在将像素从白色变为黑色或从黑色变为白色时才耗电。这意味着当设备断电或应用程序因任何原因停止时,屏幕上的任何内容都会保留下来。从功耗的角度来看,这很好,但这也意味着你需要在启动时清除显示,否则你的脚本只会覆盖屏幕上已有的内容。 因此,epd.Clear(0xFF) 用于在脚本启动时清除显示。

接下来,创建一个“画布”来绘制剩余的显示输出:

    # 创建一个图形对象
    # 注意:"epd.heigh" 是屏幕的长边
    # 注意:"epd.width" 是屏幕的短边
    # 真是反直觉…
    logging.info(f"Creating canvas - height: {epd.height}, width: {epd.width}")
    image = Image.new('1', (epd.height, epd.width), 255)  # 255: clear the frame
    draw = ImageDraw.Draw(image)

这与显示器的宽度和高度相匹配——但它有点反直觉,因为显示器的短边是宽度。我认为长边是宽度,所以这只是需要注意的一点。 请注意,epd.heightepd.width 由 Waveshare 库设置以对应于你使用的设备。

欢迎语

接下来,你将开始画一些画。这涉及在你之前创建的“画布”对象上设置数据。这还没有将它绘制到电子纸显示屏上——你现在只是在构建你想要的图像。由你为这个项目绘制带有一块馅饼的图像,来创建一个庆祝圆周率日的欢迎信息:

 title=

很可爱,不是吗?

    logging.info("Set text text...")
    bangers64 = set_font_size(64)
    draw.text((0, 30), 'PI DAY!', font = bangers64, fill = 0)

    logging.info("Set BMP...")
    bmp = Image.open(basedir.joinpath("img", "pie.bmp"))
    image.paste(bmp, (150,2))

最后,真是是最后了,你可以展示你画的图画:

    logging.info("Display text and BMP")
    epd.display(epd.getbuffer(image))

上面那段话更新了显示屏,以显示你所画的图像。

接下来,准备另一幅图像展示你的倒计时:

圆周率日倒计时

首先,创建一个用来展示倒计时的图像对象。也需要设置数字的字体大小:

    logging.info("Pi Date countdown; press CTRL-C to exit")
    piday_image = Image.new('1', (epd.height, epd.width), 255)
    piday_draw = ImageDraw.Draw(piday_image)

    # 设置字体大小
    bangers36 = set_font_size(36)
    bangers64 = set_font_size(64)

为了使它显示的时候更像一个倒计时,更新图像的一部分是更加有效的手段,仅更改已经改变的显示数据部分。下面的代码准备以这样方式运行:

    # 准备更新显示
    epd.displayPartBaseImage(epd.getbuffer(piday_image))
    epd.init(epd.PART_UPDATE)

最后,需要计时,开始一个无限循环来检查据下次圆周率日还有多久,并显示在电子纸上。如果到了圆周率日,你可以输出一些庆祝短语:

    while (True):
        days = countdown(datetime.now())
        unit = get_days_unit(days)
        
        # 通过绘制一个填充有白色的矩形来清除屏幕的下半部分
        piday_draw.rectangle((0, 50, 250, 122), fill = 255)

        # 绘制页眉
        piday_draw.text((10,10), "Days till Pi-day:", font = bangers36, fill = 0)

        if days == 0:
            # 绘制庆祝语
            piday_draw.text((0, 50), f"It's Pi Day!", font = bangers64, fill = 0)
        else:
            # 绘制距下一次 Pi Day 的时间
            piday_draw.text((70, 50), f"{str(days)} {unit}", font = bangers64, fill = 0)

        # 渲染屏幕
        epd.displayPartial(epd.getbuffer(piday_image))
        time.sleep(5)

脚本最后做了一些错误处理,包括捕获键盘中断,这样你可以使用 Ctrl + C 来结束无限循环,以及一个根据计数来打印 daydays 的函数:

    except IOError as e:
        logging.info(e)

    except KeyboardInterrupt:
        logging.info("Exiting...")
        epd.init(epd.FULL_UPDATE)
        epd.Clear(0xFF)
        time.sleep(1)
        epd2in13_V2.epdconfig.module_exit()
        exit()

def get_days_unit(count):
    if count == 1:
        return "day"

    return "days"

if __name__ == "__main__":
    main()

现在你已经拥有一个倒计时并显示剩余天数的脚本!这是在我的树莓派上的显示(视频经过加速,我没有足够的磁盘空间来保存一整天的视频):

 title=

安装 systemd 服务(选做)

如果你希望在系统打开时运行倒计时显示,并且无需登录并运行脚本,你可以将可选的 systemd 单元安装为 systemd 用户服务

将 GitHub 上的 piday.service 文件复制到 ${HOME}/.config/systemd/user,如果该目录不存在,请先创建该目录。然后你可以启用该服务并启动它:

$ mkdir -p ~/.config/systemd/user
$ cp piday.service ~/.config/systemd/user
$ systemctl --user enable piday.service
$ systemctl --user start piday.service

# Enable lingering, to create a user session at boot
# and allow services to run after logout
$ loginctl enable-linger $USER

该脚本将输出到 systemd 日志,可以使用 journalctl 命令查看输出。

它开始看起来像是圆周率日了!

这就是你的作品!一个显示在电子纸显示屏上的树莓派 Zero W 圆周率日倒计时器!并在系统启动时使用 systemd 单元文件启动!现在距离我们可以再次相聚庆祝圆周率日还有好多天的奇妙设备———树莓派。通过我们的小项目,我们可以一目了然地看到确切的天数。

但实际上,每个人都可以在每一天在心中庆祝圆周率日,因此请使用自己的树莓派创建一些有趣且具有教育意义的项目吧!


via: https://opensource.com/article/21/3/raspberry-pi-countdown-clock

作者:Chris Collins 选题:lujun9972 译者:Donkey 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Fedora 安装之后稍作一些简单优化和配置,就可以愉快的使用了。

Fedora 是红帽系发行版中最激进的发行版。不少朋友将使用 Fedora 的人看做是红帽的小白鼠。但是 Fedora 超快的更新速度其实也为开发者提供了不少便利。本文介绍了安装 Fedora 36 后一些简单的设置,可以使你的 Fedora 更加易用一些。

1、设置软件源

Fedora 默认使用 Metalink 给出推荐的镜像列表,保证用户使用的镜像仓库足够新,并且能够尽快收到安全更新,从而提供更好的安全性。所以通常情况下使用默认配置即可,无需更改配置文件。

不过,由于 Metalink 需要从国外的 Fedora 项目服务器上获取元信息,所以对于校园内网、无国外访问等特殊情况,Metalink 并不适用,此时可以参照清华大学 tuna 小组介绍的 方法 来修改软件源。

2、更新系统

激进的发行版就要有激进的用法,因此配置好软件源后第一件事就是执行系统更新、刷新存储库列表是理所当然要做的。

你可以从 GNOME 软件中心执行此操作,或者使用终端操作。

对于终端,只需使用以下命令:

sudo dnf update

可能需要重新启动才能完成系统更新。

3、删除旧的内核以及其他不需要的旧软件包

更新系统之后多半会安装新的内核,以及会出现一些无用的依赖。重新启动系统到新的内核,确保内核运转没有问题了,就可以删除旧内核以及无用的依赖了。

使用以下命令就可以自动删除无用的依赖:

sudo dnf autoremove

Fedora 内核更新快,但是每次更新内核,旧的内核不会自动删除,占用硬盘空间。以前的教程删除旧内核都是先搜索,再移除要删除的版本,输入版本号也非常麻烦。使用以下命令即可一条命令删除旧内核:

sudo dnf remove --oldinstallonly

Fedora 一条命令删除旧内核

4、启用 RPM Fusion 软件源

安装 Fedora 时会提示你是否启用其他第三方软件源。

但是自动启用的软件源,只有英伟达驱动程序、谷歌 Chrome 和 Steam 等软件源,全套的 RPM Fusion 软件源并没有自动启用,因此还有诸如 VLC 和 MPV 等软件也不可用。

建议你还是开启全套的 RPM Fusion,国内玩家还是建议使用清华的镜像开启 RPM Fusion:

sudo yum install --nogpgcheck https://mirrors.tuna.tsinghua.edu.cn/rpmfusion/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://mirrors.tuna.tsinghua.edu.cn/rpmfusion/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm

安装成功后,修改 /etc/yum.repos.d/ 目录下以 rpmfusion 开头,以 .repo 结尾的文件。具体而言,需要将文件中的 baseurl= 开头的行等号后面链接中的 http://download1.rpmfusion.org/ 替换为 https://mirrors.tuna.tsinghua.edu.cn/rpmfusion/, 替换后的文件类似如下:

[rpmfusion-free]
name=RPM Fusion for Fedora $releasever - Free
baseurl=https://mirrors.tuna.tsinghua.edu.cn/rpmfusion/free/fedora/releases/$releasever/Everything/$basearch/os/
mirrorlist=http://mirrors.rpmfusion.org/mirrorlist?repo=free-fedora-$releasever&arch=$basearch
enabled=1
metadata_expire=7d
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmfusion-free-fedora-$releasever

[rpmfusion-free-debuginfo]
name=RPM Fusion for Fedora $releasever - Free - Debug
mirrorlist=http://mirrors.rpmfusion.org/mirrorlist?repo=free-fedora-debug-$releasever&arch=$basearch
enabled=0
metadata_expire=7d
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmfusion-free-fedora-$releasever

[rpmfusion-free-source]
name=RPM Fusion for Fedora $releasever - Free - Source
baseurl=https://mirrors.tuna.tsinghua.edu.cn/rpmfusion/free/fedora/releases/$releasever/Everything/source/SRPMS/
mirrorlist=http://mirrors.rpmfusion.org/mirrorlist?repo=free-fedora-source-$releasever&arch=$basearch
enabled=0
metadata_expire=7d
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmfusion-free-fedora-$releasever

5、添加 Flathub 存储库

Fedora 默认情况下启用了 Flatpak。 但是,它是过滤后的 Flatpak 。

因此,要访问各种可用的 Flatpak 应用程序,你可以在终端中使用以下命令添加 Flathub 存储库:

flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

6、配置 DNF 以更快地下载包

Fedora 可以通过多种方法增强下载包的速度。比如选择最快的镜像,可以提高包下载速度。此外,如果你的互联网连接速度足够快,则可以更改并行下载的数量以获得更快的下载。

要做这两件事,只需编辑位于 /etc/dnf/dnf.conf 的 DNF 配置文件。

将以下行附加到 /etc/dnf/dnf.conf 文件中,保存并退出:

fastestmirror=true
deltarpm=true
max_parellel_downloads=10
  • fastestmirror 为选择最快软件源,如果你手动修改了仓库里面的信息则不需要启动这个。
  • deltarpm 相当于增量下载,把软件增加的部分下载下来,和原软件包合成新软件包,类似于现在的 Android 软件更新。
  • max_parellel_downloads 设置最大并行下载数量。

7、安装后更改主机名

安装后,默认主机名设置为 fedora

因此,如果你想在安装后个性化你的系统主机名,可以使用以下命令设置新的主机名:

sudo hostnamectl set-hostname <你的主机名>

请将 <你的主机名> 替换为你的主机名(不包含 <>),建议采用 FQDN 主机名,即包括域名的完全限定主机名。

然后可以修改 /etc/hosts127.0.0.1 以及 ::1 条目后面都加上你的主机名。类似下面这样:

# Loopback entries; do not change.
# For historical reasons, localhost precedes localhost.localdomain:
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 <你的主机名>
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6 <你的主机名>
# See hosts(5) for proper format and other examples:
# 192.168.1.10 foo.mydomain.org foo
# 192.168.1.13 bar.mydomain.org bar

8、安装 GNOME 优化和扩展应用程序

要调整 GNOME 的外观和感觉,你需要安装 GNOME 优化 Tweaks 和扩展管理器应用程序。 可以通过软件中心或终端使用以下命令来完成:

sudo dnf install gnome-tweaks gnome-extensions-app

然后你就可以在 GNOME Shell 扩展页面 挑选扩展了。

使用一些好用的 GNOME 扩展来增强你的桌面工作的使用体验。限于篇幅,本文就不展开 GNOME 扩展的玩法了。

9、用于电池健康管理的 TLP

TLP 是一个很好的实用程序,可帮助优化笔记本电脑的电池。该实用程序带有各种命令行选项来调整和查看有关功耗的报告。

TLP 非常好用,你只需安装它并忘记它。这不需要任何设置或设置即可使其工作。使用默认设置安装后,它就可以开箱即用。

dnf install tlp tlp-rdw

然后卸载有冲突的 power-profiles-daemon 软件包:

dnf remove power-profiles-daemon

设置开机启动 TLP 的服务:

systemctl enable tlp.service

您还应该屏蔽以下服务以避免冲突,确保 TLP 的无线设备(蓝牙、wifi等)切换选项的能够正确操作:

systemctl mask systemd-rfkill.service systemd-rfkill.socket

安装 TLP 能够极大的提高笔记本电脑电池的使用时长。

10、安装和配置主题

GNOME 桌面的美化是个见仁见智的事情。

我的美化方案是用软件源里面有的东西。

安装主题:

sudo dnf install flat-remix-theme

安装图标:

sudo dnf install numix-icon-theme-circle

安装光标:

sudo dnf install breeze-cursor-theme

然后启用“ 用户主题 User Themes ” 扩展,在扩展里面启用它。

GNOME 扩展管理

再去 GNOME 优化 Tweaks 的“外观”设置里面修改刚刚安装的主题、图标和光标,还可以修改字体。

GNOME 优化外观

11、配置 NTP 以获得准确的时间

网络时间协议(NTP)是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源做同步化,它可以提供高精准度的时间校正。

Fedora 默认使用 chrony 来进行时间同步。

可以修改 /etc/chrony.conf

pool 的值选择为下列中的其中一个即可:

# 中国 NTP 授时快速服务
pool cn.ntp.org.cn 

# 阿里云 NTP
pool ntp.aliyun.com 

# 腾讯云 NTP
pool ntp.tencent.com 

随后重启 chrony 即可。

sudo systemctl restart chronyd.service

最后就是愉快的使用 Fedora 了。


作者简介:

insidentally:一个喜欢瞎鼓捣的医学生。


via: https://www.insidentally.com/articles/000028/

作者:insidentally 编辑:wxy

本文由贡献者投稿至 Linux 中国公开投稿计划,采用 CC-BY-SA 协议 发布,Linux中国 荣誉推出

本教程介绍了在 Ubuntu 及其他 Linux 发行版上安装 FFmpeg 的步骤。

FFmpeg 是一套处理多媒体文件的软件库。凭借这些强大的库,FFmpeg 能够转换格式、推流以及处理音频和视频文件。许多 Linux 的前端应用都使用 FFmpeg 作为后端支持,所以这些应用对 FFmpeg 的依赖度非常高。举个例子,录屏软件可能会用到 FFmpeg 将录屏转换为 gif 动图。

VLC 多媒体播放器、YouTube、Blender、Kodi、Shotcut 和 Handbrake 等流行的应用与服务都在使用 FFmpeg,这仅仅一小部分。

趣事:NASA 火星 2020 计划的探测器“毅力”号在将图像和视频发送到地球之前,会先使用 FFmpeg 对其进行处理。

关于 FFmpeg

FFmpeg 本身是一款非常强大的命令行实用程序,在 Linux 发行版、Windows 以及 macOS 等系统上均可运行,支持多种架构。FFmpeg 是用 C 语言和汇编语言编写的,性能强大,提供跨平台支持。

核心

FFmpeg 的核心是命令行实用程序,既可在命令行上使用,也可以经由任何程序语言调用。比如,你可以在 Shell 程序或 python 脚本中使用 FFmpeg。

  • ffmpeg:用于转换音视频格式,包括来自视频直播的信号源。
  • ffplay:FFmpeg 配套使用的媒体播放器
  • ffprobe:显示媒体文件信息的命令行工具,可将信息输出为 csv、xml、json 等格式。

FFmpeg 安装

在 Ubuntu 等 Linux 发行版上, FFmpeg 的安装比较简单。打开终端,运行以下命令安装即可。

Ubuntu 及与其相似的发行版

sudo apt install FFmpeg

Fedora

在 Fedora Linux 上安装 FFmpeg,你需要添加 RPM Fusion 仓库,因为 Fedora 官方仓库没有 FFmpeg 软件包。

sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm
sudo dnf install https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-
sudo dnf install ffmpeg

Arch Linux

pacman -S ffmpeg

安装完成后,可输入以下命令查看安装是否成功。

ffmpeg --version

FFmpeg installed in Ubuntu Linux

示例:FFmpeg 的基本操作

首先,我们先来看看 FFmpeg 语法的一个简单例子。如下,该语法可以将 mp4 文件转换为 mkv 文件。

1、视频文件格式转换

ffmpeg -i big_buck_bunny.mp4 big_buck_bunny.mkv

当然,这种写法最为简单易懂,但它并不完整,因为没有输入 比特率 bit rate 分辨率 resolution 以及其他的视频文件属性。

2、音频文件格式转换

其次,输入与上面相似的命令可以转换音频文件的格式。

ffmpeg -i sunny_day.ogg sunny_day.mp3

3、使用音视频编解码器执行格式转换

最后,在下面的例子中,我们可以使用特定的 编解码器 codec 来转换视频格式。参数 -c 搭配 a 或者 v,可以分别定义音频和视频文件。以下转换命令使用 libvpx 视频编解码器和 libvorbis 音频编解码器。

ffmpeg -i big_buck_bunny.mp4 -c:v libvpx -c:a libvorbis big_buck_bunny.webm

如何确定自己系统中有哪些编码器和解码器?

显示所有编解码器

输入以下命令,打印所有编解码器。

ffmpeg -codecs

该命令可以打印出所有可用的编解码器,并显示每个编解码器对应的功能信息,比如是否支持解码或编码。此外,如以下输出结果所示,打印出来的信息还会按照首字母顺序标注出每个编码器和解码器的位置。

D..... = 支持解码
.E.... = 支持编码
..V... = 视频编解码器
..A... = 音频编解码器
..S... = 字幕编解码器
...I.. = 仅限帧内编解码器
....L. = 有损压缩
.....S = 无损压缩

FFmpeg Codec list

显示所有编码器

输入下列命令,打印出所有编码器

ffmpeg -encoders

显示所有解码器

同样,输入下列命令,打印出所有解码器。

ffmpeg -decoders

更多信息

输入参数 -h,获取更多关于编码器或解码器的信息。

ffmpeg -h decoder=mp3

总结

我希望这篇文章可以帮助你了解 FFmpeg 的基本知识及基本命令。若要了解更多信息,可前往 FFmpeg 官方网站浏览 帮助文档


via: https://www.debugpoint.com/2022/06/install-ffmpeg-ubuntu/

作者:Arindam 选题:lkxed 译者:aREversez 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

这篇教程将介绍如何在 Ubuntu 22.04、20.04 和 18.04 LTS 版本中引导到 救援 Rescue 模式或 紧急 Emergency 模式。

你可能已经知道,在 RHEL 7 、RHEL 8 、Ubuntu 16.04 LTS 及其更新的版本的 Linux 发行版中 运行等级 Runlevels 已经被 系统目标 Systemd target 所替代。更多关于 运行等级 Runlevel 系统目标 Systemd targets 的信息,参考 这篇指南

这篇指南是针对 Ubuntu 编写的,但是,下面所给的步骤应该也适用于大多数使用 systemd 作为默认服务管理器的 Linux 发行版。

在进入主题前,让我们简单的理解:什么是 救援 rescue 模式 和 紧急 Emergency 模式,以及这两种模式的目的是什么。

什么是救援模式?

在 Linux 发行版中,救援模式等效于使用 SysV 作为默认的服务器管理器的 单用户 single user 模式。在救援模式中,将挂载所有的本地文件系统,将仅启动一些重要的服务。但是,不会启动一般的服务(例如,网络服务)。

救援模式在不能正常引导系统的情况下是很有用的。此外,我们可以在救援模式下执行一些重要的救援操作,例如,重新设置 root 密码

什么是紧急模式?

与救援模式相比,在紧急模式中,不会启动任何的东西。不会启动服务、不会挂载挂载点、不会建立套接字、什么都不会启动。你将所拥有的只是一个 原始的 shell 。紧急模式适用于调试目的。

首先,我们将看到如何在 Ubuntu 22.04 和 20.04 LTS 发行版中引导到救援模式或紧急模式。在 Ubuntu 22.04 和 20.04 LTS 中的过程是完全相同的!

在 Ubuntu 22.04 / 20.04 LTS 中引导到救援模式

我们可以使用两种方法来引导到救援模式。

方法 1

打开你的 Ubuntu 系统。在 BIOS 徽标出现后,按下 ESC 按键来显示 GRUB 菜单。

在 GRUB 菜单中,选择第一项,并按下 e 按键来编辑它。

GRUB Menu In Ubuntu 22.04 / 20.04 LTS

按下 按键,并找到以单词 linux 开头的一行代码,并在其结尾处添加下面的一行代码。为到达其结尾处,只需要按下 Ctrl + e 组合键,或使用你键盘上的 END 按键或 / 按键。

systemd.unit=rescue.target

Edit Grub Boot Menu Entries To Enter Into Rescue Mode In Ubuntu 22.04 / 20.04 LTS

在添加上面的代码行后,按下 Ctrl + x 组合键或按下 F10 按键来引导到救援模式。

数秒后,你将作为 root 用户来登录到救援模式(即单用户模式)。将会提示你按下回车键来进入维护。

下图是 Ubuntu 22.04 / 20.04 LTS 系统的救援模式的样子:

Boot Into Rescue Mode In Ubuntu 22.04 / 20.04 LTS

现在,在救援模式中做你想做的任何事。在救援模式中,在你执行任何操作前,你可能需要以 读/写模式来挂载根(/)文件系统。

mount -n -o remount,rw /

Mount Root File System In Read Write Mode In Ubuntu 22.04 / 20.04 LTS

在完成后,按下 Ctrl + d 组合键来引导到正常模式。或者,你可以输入下面的任意一个命令来引导到正常模式。

systemctl default

或者,

exit

如果你想重新启动系统,而不是引导到正常的模式,输入:

systemctl reboot

方法 2

在这种方法中,你不需要编辑 GRUB 启动菜单项目。

打开系统电源,并从 GRUB 启动菜单中选择 Ubuntu 高级选项 Advanced options for Ubuntu

Choose Advanced Options For Ubuntu From Grub Boot Menu

接下来,你将看到一个带有内核版本的可用的 Ubuntu 版本的列表。在 Ubuntu 中的 GRUB 启动菜单中选择 恢复模式 Recovery mode

Choose Recovery Mode In Grub Boot Menu In Ubuntu 22.04 / 20.04 LTS

数秒后,你将看到 Ubuntu 的 恢复 Recovery 菜单。从恢复菜单中,选择 进入 root 的 shell 提示符 Drop to root shell prompt 选项 ,并按下回车键。

Enter Into Root Shell Prompt In Ubuntu 22.04 / 20.04 LTS

现在,你将进入维护。

Ubuntu Maintenance Mode

通过输入下面的命令来 以读/写模式的方式 来挂载根(/)文件系统:

mount -n -o remount,rw /

Mount Root File System In Read Write Mode In Ubuntu

在救援模式中做你想做的任何事。

在完成后,输入 exit 来返回到恢复菜单。

exit

最后,选择 救援正常启动 Resume normal boot 选项,并按下回车键。

Boot Into Normal Mode In Ubuntu

再次按下回车键来退出恢复模式,并继续引导到正常模式。

Exit The Recovery Mode In Ubuntu

如果你不想引导到正常模式,从救援模式中输入 reboot 并按下回车键来重新启动你的系统。

在 Ubuntu 22.04 / 20.04 LTS 中引导到紧急模式

当 GRUB 菜单出现时,按下 e 按键来编辑它。

GRUB Menu In Ubuntu 22.04 / 20.04 LTS

找到以单词 linux 开头的一行代码,并在其结尾处添加下面的一行代码:

systemd.unit=emergency.target

Edit Grub Boot Menu Entries To Enter Into Emergency Mode In Ubuntu 22.04 / 20.04 LTS

在添加上面的代码行后,按下 Ctrl + x 组合键,或按下 F10 按键来引导到紧急模式。

数秒后,你将作为 root 用户来进入维护。将会提示你按下回车键来进入紧急模式。

下图是 Ubuntu 22.04 / 20.04 LTS 系统的紧急模式的样子:

Boot Into Emergency Mode In Ubuntu 22.04 / 20.04 LTS

现在,在紧急模式中做你想做的任何事。在紧急模式中,在你执行任何操作前,你可能需要以读/写模式来挂载根(/)文件系统。

mount -n -o remount,rw /

在完成后,按下 Ctrl + d 组合键来引导到正常模式。或者,你可以输入下面的任意一个命令来引导到正常模式。

systemctl default

或者,

exit

如果你想重新启动系统,而不是引导到正常模式,输入:

systemctl reboot

在 Ubuntu 18.04 LTS 中引导到救援模式

启动你的 Ubuntu 系统。当 GRUB 菜单出现时,选择第一项并按下按键 e 来编辑。(为到达其行尾处,只需要按下 Ctrl + e 组合键,或使用你键盘上的 END 按键或 / 按键):

Grub Menu

如果你没有看到 GRUB 菜单,只需要在 BIOS 徽标出现后,按下 ESC 按键来显示 GRUB 菜单。

找到以单词 linux 开头的一行代码,并在其结尾处添加下面的一行代码(为到达其行尾处,只需要按下 Ctrl + e 组合键,或使用你键盘上的 END按键或/→` 按键):

systemd.unit=rescue.target

Edit Grub Menu

在添加上面的代码行后,只需要按下 Ctrl + x 组合键,或按下 F10 按键来引导到救援模式。数秒后,你将作为 root 用户进入维护(即单用户模式)。

下图是 Ubuntu 18.04 LTS 服务器系统的救援模式的样子:

Ubuntu Rescue Mode

接下来,输入下面的命令来挂载根(/)文件系统为读/写模式。

mount -n -o remount,rw /

在 Ubuntu 18.04 LTS 中引导到紧急模式

引导你的 Ubuntu 到紧急模式基本与上述方法相同。你所需要做的全部工作是,在编辑 GRUB 菜单时,将 systemd.unit=rescue.target 替换为 systemd.unit=emergency.target

Edit Grub Menu

在你添加 systemd.unit=emergency.target 后,按下 Ctrl + x 组合键,或按下 F10 按键来引导到紧急模式。

Ubuntu Emergency Mode

最后,你可以使用下面的命令来以读/写模式的方式来挂载根(/)文件系统:

mount -n -o remount,rw /

在救援模式和紧急模式之间切换

如果你正在救援模式中,你不必像我上述提到的那样来编辑 GRUB 的菜单启动项。相反,你只想要输入下面的命令来立刻切换到紧急模式:

systemctl emergency

同样,为从紧急模式切换到救援模式,输入:

systemctl rescue

总结

现在,你知道了什么是救援模式和紧急模式,以及如何在 Ubuntu 22.04 、20.04 和 18.04 LTS 系统中启动到这些模式。正如我已经提到的,在这里提供的这些步骤应该也适用于大多数当前使用 systemd 作为默认服务管理器的 Linux 发行版。


via: https://ostechnix.com/how-to-boot-into-rescue-mode-or-emergency-mode-in-ubuntu-18-04/

作者:sk 选题:lkxed 译者:robsean 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

这个快速指南解释了恢复 Arch Linux 安装的一些方便步骤。

作为一个滚动发布的版本,Arch Linux 中有时会出现一些问题。不是因为你自己的行为,而是数以百计的其他原因,如新内核与你的硬件或软件的兼容性。但是,Arch Linux 仍然很棒,它提供了最新的软件包和应用。

但有时,它也会给你带来麻烦,你最终只能看到一个闪烁的光标,其他什么都没有。

所以,在这种情况下,与其重新格式化或重新安装,不如在放弃希望之前尝试恢复安装和数据。本指南概述了这个方向的一些步骤。

恢复 Arch Linux 安装

第一步是用 Arch Linux 创建一个可启动的 现场 Live USB。从 这个链接 下载 .ISO 并创建一个可启动的 USB。你可以查看这个 如何使用 Etcher 创建可启动的 USB 的指南。记住这一步需要另一个稳定的工作系统,因为你目前的系统不能使用。

你需要知道你的 Arch Linux 安装在哪个分区上。这是一个非常重要的步骤。如果你不知道,你可以用 GParted 来查找。或者在你的 GRUB 菜单中查看,或者你可以运行下面的命令来了解。这将列出你所有的磁盘分区及其大小、标签:

sudo lsblk -o name,mountpoint,label,size,uuid

完成后,插入 USB 盘并从它启动。你应该在现场介质中看到 Arch Linux 的提示符。

现在,用下面的方法挂载 Arch Linux 分区。记得把 /dev/sda3 改成你对应的分区。

mount /dev/sda3 /mnt
arch-chroot /mnt

arch-chroot 命令将在终端挂载你的 Arch Linux 分区,所以用你的 Arch 凭证登录。现在,在这个阶段,根据你的需要,你有以下选择。

  • 你可以通过 /home 文件夹来备份你的数据。如果,故障排除方式无效的话。你可以把文件复制到外部 USB 或其他分区。
  • 核查日志文件,特别是 pacman 日志。因为,不稳定的系统可能是由升级某些软件包引起的,如图形驱动或任何其他驱动。根据日志,如果你需要的话,可以降级任何特定的软件包。

你可以使用下面的命令来查看 pacman 日志文件的最后 200 行,以找出任何失败的项目或依赖性删除。

tail -n 200 /var/log/pacman.log | less

上面的命令给出了你的 pacman.log 文件末尾的 200 行来验证。现在,仔细检查哪些软件包在你成功启动后被更新了。

并记下软件包的名称和版本。你可以尝试逐一降级软件包,或者如果你认为某个特定的软件包产生了问题。使用 pacman -U 开关来降级。

pacman -U <package name>

如果有的话,你可以在降级后运行以下命令来启动你的 Arch 系统。

exec /sbin/init

检查你的显示管理器的状态,是否有任何错误。有时,显示管理器会产生一个问题,无法与 X 服务器通信。例如,如果你正在使用 Lightdm,那么你可以通过以下方式检查它的状态。

systemctl status lightdm

或者,可以通过下面的命令启动它,并检查出现了错误。

lightdm --test-mode --debug

下面是一个 Lightdm 失败的例子,它导致了一个不稳定的 Arch 系统。

lightdm - test mode

或者通过使用 startx 启动 X 服务器来检查。

startx

根据我的经验,如果你在上述命令中看到错误,尝试安装另一个显示管理器并启用它,如 sddm。它可能会消除这个错误。

根据你的系统状态,尝试上述步骤,并进行故障排除。对于特定于显示管理器 lightdm 的错误,我们有一个 指南,你可以看看。

如果你使用的是 sddm,那么请查看 这些故障排除步骤

总结

每个安装环境都是不同的。上述步骤可能对你不起作用。但它值得一试,根据经验,它是有效的。如果它起作用,那么,对你来说是好事。无论哪种方式,请在下面的评论区中告诉我结果如何。


via: https://www.debugpoint.com/2021/07/recover-arch-linux/

作者:Arindam 选题:lkxed 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出