2019年8月

Podman 使用传统的 fork/exec 模型(相对于客户端/服务器模型)来运行容器。

在进入本文的主要主题 Podman 和容器之前,我需要了解一点 Linux 审计功能的技术。

什么是审计?

Linux 内核有一个有趣的安全功能,叫做审计。它允许管理员在系统上监视安全事件,并将它们记录到audit.log 中,该文件可以本地存储或远程存储在另一台机器上,以防止黑客试图掩盖他的踪迹。

/etc/shadow 文件是一个经常要监控的安全文件,因为向其添加记录可能允许攻击者获得对系统的访问权限。管理员想知道是否有任何进程修改了该文件,你可以通过执行以下命令来执行此操作:

# auditctl -w /etc/shadow

现在让我们看看当我修改了 /etc/shadow 文件会发生什么:

# touch /etc/shadow 
# ausearch -f /etc/shadow -i -ts recent

type=PROCTITLE msg=audit(10/10/2018 09:46:03.042:4108) : proctitle=touch /etc/shadow type=SYSCALL msg=audit(10/10/2018 09:46:03.042:4108) : arch=x86_64 syscall=openat success=yes exit=3 a0=0xffffff9c a1=0x7ffdb17f6704 a2=O_WRONLY|O_CREAT|O_NOCTTY| O_NONBLOCK a3=0x1b6 items=2 ppid=2712 pid=3727 auid=dwalsh uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts1 ses=3 comm=touch exe=/usr/bin/touch subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null)`

审计记录中有很多信息,但我重点注意到它记录了 root 修改了 /etc/shadow 文件,并且该进程的审计 UID(auid)的所有者是 dwalsh

内核修改了这个文件了么?

跟踪登录 UID

登录 UID(loginuid),存储在 /proc/self/loginuid 中,它是系统上每个进程的 proc 结构的一部分。该字段只能设置一次;设置后,内核将不允许任何进程重置它。

当我登录系统时,登录程序会为我的登录过程设置 loginuid 字段。

我(dwalsh)的 UID 是 3267。

$ cat /proc/self/loginuid
3267

现在,即使我变成了 root,我的登录 UID 仍将保持不变。

$ sudo cat /proc/self/loginuid
3267

请注意,从初始登录过程 fork 并 exec 的每个进程都会自动继承 loginuid。这就是内核知道登录的人是 dwalsh 的方式。

容器

现在让我们来看看容器。

sudo podman run fedora cat /proc/self/loginuid
3267

甚至容器进程也保留了我的 loginuid。 现在让我们用 Docker 试试。

sudo docker run fedora cat /proc/self/loginuid 
4294967295

为什么不一样?

Podman 对于容器使用传统的 fork/exec 模型,因此容器进程是 Podman 进程的后代。Docker 使用客户端/服务器模型。我执行的 docker 命令是 Docker 客户端工具,它通过客户端/服务器操作与 Docker 守护进程通信。然后 Docker 守护程序创建容器并处理 stdin/stdout 与 Docker 客户端工具的通信。

进程的默认 loginuid(在设置 loginuid 之前)是 4294967295(LCTT 译注:2 32 - 1)。由于容器是 Docker 守护程序的后代,而 Docker 守护程序是 init 系统的子代,所以,我们看到 systemd、Docker 守护程序和容器进程全部具有相同的 loginuid4294967295,审计系统视其为未设置审计 UID。

cat /proc/1/loginuid 
4294967295

怎么会被滥用?

让我们来看看如果 Docker 启动的容器进程修改 /etc/shadow 文件会发生什么。

$ sudo docker run --privileged -v /:/host fedora touch /host/etc/shadow 
$ sudo ausearch -f /etc/shadow -i type=PROCTITLE msg=audit(10/10/2018 10:27:20.055:4569) : proctitle=/usr/bin/coreutils --coreutils-prog-shebang=touch /usr/bin/touch /host/etc/shadow type=SYSCALL msg=audit(10/10/2018 10:27:20.055:4569) : arch=x86_64 syscall=openat success=yes exit=3 a0=0xffffff9c a1=0x7ffdb6973f50 a2=O_WRONLY|O_CREAT|O_NOCTTY| O_NONBLOCK a3=0x1b6 items=2 ppid=11863 pid=11882 auid=unset uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=(none) ses=unset comm=touch exe=/usr/bin/coreutils subj=system_u:system_r:spc_t:s0 key=(null)

在 Docker 情形中,auid 是未设置的(4294967295);这意味着安全人员可能知道有进程修改了 /etc/shadow 文件但身份丢失了。

如果该攻击者随后删除了 Docker 容器,那么在系统上谁修改 /etc/shadow 文件将没有任何跟踪信息。

现在让我们看看相同的场景在 Podman 下的情况。

$ sudo podman run --privileged -v /:/host fedora touch /host/etc/shadow 
$ sudo ausearch -f /etc/shadow -i type=PROCTITLE msg=audit(10/10/2018 10:23:41.659:4530) : proctitle=/usr/bin/coreutils --coreutils-prog-shebang=touch /usr/bin/touch /host/etc/shadow type=SYSCALL msg=audit(10/10/2018 10:23:41.659:4530) : arch=x86_64 syscall=openat success=yes exit=3 a0=0xffffff9c a1=0x7fffdffd0f34 a2=O_WRONLY|O_CREAT|O_NOCTTY| O_NONBLOCK a3=0x1b6 items=2 ppid=11671 pid=11683 auid=dwalsh uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=(none) ses=3 comm=touch exe=/usr/bin/coreutils subj=unconfined_u:system_r:spc_t:s0 key=(null)

由于它使用传统的 fork/exec 方式,因此 Podman 正确记录了所有内容。

这只是观察 /etc/shadow 文件的一个简单示例,但审计系统对于观察系统上的进程非常有用。使用 fork/exec 容器运行时(而不是客户端/服务器容器运行时)来启动容器允许你通过审计日志记录保持更好的安全性。

最后的想法

在启动容器时,与客户端/服务器模型相比,fork/exec 模型还有许多其他不错的功能。例如,systemd 功能包括:

  • SD_NOTIFY:如果将 Podman 命令放入 systemd 单元文件中,容器进程可以通过 Podman 返回通知,表明服务已准备好接收任务。这是在客户端/服务器模式下无法完成的事情。
  • 套接字激活:你可以将连接的套接字从 systemd 传递到 Podman,并传递到容器进程以便使用它们。这在客户端/服务器模型中是不可能的。

在我看来,其最好的功能是作为非 root 用户运行 Podman 和容器。这意味着你永远不会在宿主机上授予用户 root 权限,而在客户端/服务器模型中(如 Docker 使用的),你必须打开以 root 身份运行的特权守护程序的套接字来启动容器。在那里,你将受到守护程序中实现的安全机制与宿主机操作系统中实现的安全机制的支配 —— 这是一个危险的主张。


via: https://opensource.com/article/18/10/podman-more-secure-way-run-containers

作者:Daniel J Walsh 选题:lujun9972 译者:wxy 校对:wxy

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

了解在 Linux 中多种复制文档的方式以及各自的优点。

在办公室里复印文档过去需要专门的员工与机器。如今,复制是电脑用户无需多加思考的任务。在电脑里复制数据是如此微不足道的事,以致于你还没有意识到复制就发生了,例如当拖动文档到外部硬盘的时候。

数字实体复制起来十分简单已是一个不争的事实,以致于大部分现代电脑用户从未考虑过其它的复制他们工作的方式。无论如何,在 Linux 中复制文档仍有几种不同的方式。每种方法取决于你的目的不同而都有其独到之处。

以下是一系列在 Linux、BSD 及 Mac 上复制文件的方式。

在 GUI 中复制

如大多数操作系统一样,如果你想的话,你可以完全用 GUI 来管理文件。

拖拽放下

最浅显的复制文件的方式可能就是你以前在电脑中复制文件的方式:拖拽并放下。在大多数 Linux 桌面上,从一个本地文件夹拖拽放下到另一个本地文件夹是移动文件的默认方式,你可以通过在拖拽文件开始后按住 Ctrl 来改变这个行为。

你的鼠标指针可能会有一个指示,例如一个加号以显示你在复制模式。

 title=

注意如果文件是放在远程系统上的,不管它是一个 Web 服务器还是在你自己网络里用文件共享协议访问的另一台电脑,默认动作经常是复制而不是移动文件。

右击

如果你觉得在你的桌面拖拽文档不够精准或者有点笨拙,或者这么做会让你的手离开键盘太久,你可以经常使用右键菜单来复制文件。这取决于你所用的文件管理器,但通常来说,右键弹出的关联菜单会包括常见的操作。

关联菜单的“复制”动作将你的文件路径(即文件在系统的位置)保存在你的剪切板中,这样你可以将你的文件粘贴到别处:(LCTT 译注:此处及下面的描述不确切,这里并非复制的文件路径的“字符串”,而是复制了代表文件实体的对象/指针)

 title=

在这种情况下,你并没有将文件的内容复制到你的剪切版上。取而代之的是你复制了文件路径。当你粘贴时,你的文件管理器会查看剪贴板上的路径并执行复制命令,将相应路径上的文件粘贴到你准备复制到的路径。

用命令行复制

虽然 GUI 通常是相对熟悉的复制文件方式,用终端复制却更有效率。

cp

在终端上等同于在桌面上复制和粘贴文件的最显而易见的方式就是 cp 命令。这个命令可以复制文件和目录,也相对直接。它使用熟悉的来源目的(必须以这样的顺序)句法,因此复制一个名为 example.txt 的文件到你的 Documents 目录就像这样:

$ cp example.txt ~/Documents

就像当你拖拽文件放在文件夹里一样,这个动作并不会将 Documents 替换为 example.txt。取而代之的是,cp 察觉到 Documents 是一个文件夹,就将 example.txt 的副本放进去。

你同样可以便捷有效地重命名你复制的文档:

$ cp example.txt ~/Documents/example_copy.txt

重要的是,它使得你可以在与原文件相同的目录中生成一个副本:

$ cp example.txt example.txt
cp: 'example.txt' and 'example.txt' are the same file.
$ cp example.txt example_copy.txt

要复制一个目录,你必须使用 -r 选项(代表 --recursive,递归)。以这个选项对目录 nodes 运行 cp 命令,然后会作用到该目录下的所有文件。没有 -r 选项,cp 不会将目录当成一个可复制的对象:

$ cp notes/ notes-backup
cp: -r not specified; omitting directory 'notes/'
$ cp -r notes/ notes-backup

cat

cat 命令是最易被误解的命令,但这只是因为它表现了 POSIX 系统的极致灵活性。在 cat 可以做到的所有事情中(包括其原意的连接文件的用途),它也能复制。例如说使用 cat 你可以仅用一个命令就从一个文件创建两个副本。你用 cp 无法做到这一点。

使用 cat 复制文档要注意的是系统解释该行为的方式。当你使用 cp 复制文件时,该文件的属性跟着文件一起被复制,这意味着副本的权限和原件一样。

$ ls -l -G -g
-rw-r--r--. 1 57368 Jul 25 23:57  foo.jpg
$ cp foo.jpg bar.jpg
-rw-r--r--. 1 57368 Jul 29 13:37  bar.jpg
-rw-r--r--. 1 57368 Jul 25 23:57  foo.jpg

然而用 cat 将一个文件的内容读取至另一个文件是让系统创建了一个新文件。这些新文件取决于你的默认 umask 设置。要了解 umask 更多的知识,请阅读 Alex Juarez 讲述 umask 以及权限概览的文章。

运行 unmask 获取当前设置:

$ umask
0002

这个设置代表在该处新创建的文档被给予 664rw-rw-r--)权限,因为该 unmask 设置的前几位数字没有遮掩任何权限(而且执行位不是文件创建的默认位),并且写入权限被最终位所屏蔽。

当你使用 cat 复制时,实际上你并没有真正复制文件。你使用 cat 读取文件内容并将输出重定向到了一个新文件:

$ cat foo.jpg > baz.jpg
$ ls -l -G -g
-rw-r--r--. 1 57368 Jul 29 13:37  bar.jpg
-rw-rw-r--. 1 57368 Jul 29 13:42  baz.jpg
-rw-r--r--. 1 57368 Jul 25 23:57  foo.jpg

如你所见,cat 应用系统默认的 umask 设置创建了一个全新的文件。

最后,当你只是想复制一个文件时,这些手段无关紧要。但如果你想复制文件并保持默认权限时,你可以用一个命令 cat 完成一切。

rsync

有着著名的同步源和目的文件的能力,rsync 命令是一个复制文件的多才多艺的工具。最为简单的,rsync 可以类似于 cp 命令一样使用。

$ rsync example.txt example_copy.txt
$ ls
example.txt    example_copy.txt

这个命令真正的威力藏在其能够不做不必要的复制的能力里。如果你使用 rsync 来将文件复制进目录里,且其已经存在在该目录里,那么 rsync 不会做复制操作。在本地这个差别不是很大,但如果你将海量数据复制到远程服务器,这个特性的意义就完全不一样了。

甚至在本地中,真正不一样的地方在于它可以分辨具有相同名字但拥有不同数据的文件。如果你曾发现你面对着同一个目录的两个相同副本时,rsync 可以将它们同步至一个包含每一个最新修改的目录。这种配置在尚未发现版本控制威力的业界十分常见,同时也作为需要从一个可信来源复制的备份方案。

你可以通过创建两个文件夹有意识地模拟这种情况,一个叫做 example 另一个叫做 example_dupe

$ mkdir example example_dupe

在第一个文件夹里创建文件:

$ echo "one" > example/foo.txt

rsync 同步两个目录。这种做法最常见的选项是 -a(代表 “archive”,可以保证符号链接和其它特殊文件保留下来)和 -v(代表 “verbose”,向你提供当前命令的进度反馈):

$ rsync -av example/ example_dupe/

两个目录现在包含同样的信息:

$ cat example/foo.txt
one
$ cat example_dupe/foo.txt
one

如果你当作源分支的文件发生改变,目的文件也会随之跟新:

$ echo "two" >> example/foo.txt
$ rsync -av example/  example_dupe/
$ cat example_dupe/foo.txt
one
two

注意 rsync 命令是用来复制数据的,而不是充当版本管理系统的。例如假设有一个目的文件比源文件多了改变,那个文件仍将被覆盖,因为 rsync 比较文件的分歧并假设目的文件总是应该镜像为源文件:

$ echo "You will never see this note again" > example_dupe/foo.txt
$ rsync -av example/  example_dupe/
$ cat example_dupe/foo.txt
one
two

如果没有改变,那么就不会有复制动作发生。

rsync 命令有许多 cp 没有的选项,例如设置目标权限、排除文件、删除没有在两个目录中出现的过时文件,以及更多。可以使用 rsync 作为 cp 的强力替代或者有效补充。

许多复制的方式

在 POSIX 系统中有许多能够达成同样目的的方式,因此开源的灵活性名副其实。我忘了哪个复制数据的有效方式吗?在评论区分享你的复制神技。


via: https://opensource.com/article/19/8/copying-files-linux

作者:Seth Kenlon 选题:lujun9972 译者:tomjlw 校对:wxy

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

如果你有图形桌面环境,那么就很容易更改文本的字体以及大小。但你如何在没有图形环境的 Ubuntu 无头服务器中做到?别担心!本指南介绍了如何更改 Linux 控制台的字体和大小。这对于那些不喜欢默认字体类型/大小或者喜欢不同字体的人来说非常有用。

更改 Linux 控制台字体类型和大小

如果你还不知道,这就是无头 Ubuntu Linux 服务器控制台的样子。

Ubuntu Linux 控制台

据我所知,我们可以列出已安装的字体,但是没有办法可以像在 Linux 桌面终端仿真器中那样更改 Linux 控制台字体类型或大小。

但这并不意味着我们无法改变它。我们仍然可以更改控制台字体。

如果你正在使用 Debian、Ubuntu 和其他基于 DEB 的系统,你可以使用 console-setup 配置文件来设置 setupcon,它用于配置控制台的字体和键盘布局。该控制台设置的配置文件位于 /etc/default/console-setup

现在,运行以下命令来设置 Linux 控制台的字体。

$ sudo dpkg-reconfigure console-setup

选择要在 Linux 控制台上使用的编码。只需保留默认值,选择 “OK” 并按回车继续。

选择要在 Ubuntu 控制台上设置的编码

接下来,在列表中选择受支持的字符集。默认情况下,它是最后一个选项,即在我的系统中 Guess optimal character set(猜测最佳字符集)。只需保留默认值,然后按回车键。

在 Ubuntu 中选择字符集

接下来选择控制台的字体,然后按回车键。我这里选择 “TerminusBold”。

选择 Linux 控制台的字体

这里,我们为 Linux 控制台选择所需的字体大小。

选择 Linux 控制台的字体大小

几秒钟后,所选的字体及大小将应用于你的 Linux 控制台。

这是在更改字体类型和大小之前,我的 Ubuntu 18.04 LTS 服务器中控制台字体的样子。

这是更改之后。

如你所见,文本更大、更好,字体类型也不同于默认。

你也可以直接编辑 /etc/default/console-setup,并根据需要设置字体类型和大小。根据以下示例,我的 Linux 控制台字体类型为 “Terminus Bold”,字体大小为 32。

ACTIVE_CONSOLES="/dev/tty[1-6]"
CHARMAP="UTF-8"
CODESET="guess"
FONTFACE="TerminusBold"
FONTSIZE="16x32"

附录:显示控制台字体

要显示你的控制台字体,只需输入:

$ showconsolefont

此命令将显示字体的字形或字母表。

显示控制台字体

如果你的 Linux 发行版没有 console-setup,你可以从这里获取它。

在使用 Systemd 的 Linux 发行版上,你可以通过编辑 /etc/vconsole.conf 来更改控制台字体。

以下是德语键盘的示例配置。

$ vi /etc/vconsole.conf

KEYMAP=de-latin1
FONT=Lat2-Terminus16

希望这篇文章对你有用!


via: https://www.ostechnix.com/how-to-change-linux-console-font-type-and-size/

作者:sk 选题:lujun9972 译者:geekpi 校对:wxy

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

我们收到很多来自用户的电子邮件,要我们写一篇关于 GNOME 3 桌面自定义的文章,但是,我们没有时间来写这个主题。

在很长时间内,我一直在我的主要笔记本电脑上使用 Ubuntu 操作系统,并且,渐感无聊,我想测试一些与 Arch Linux 相关的其它的发行版。

我比较喜欢 Majaro,我在我的笔记本电脑中安装使用了 GNOME 3 桌面的 Manjaro 18.0 。

我按照我想要的自定义我的桌面。所以,我想抓住这个机会来详细撰写这篇文章,以帮助其他人。

这篇文章帮助其他人来轻松地自定义他们的桌面。

我不打算包括我所有的自定义,并且,我将强制性地添加一个对 Linux 桌面用户来说有用的必要的东西。

如果你觉得这篇文章中缺少一些调整,请你在评论区提到缺少的东西。对其它用户来说这是非常有用的 。

1) 如何在 GNOME 3 桌面中启动活动概述?

活动概述将显示所有运行的应用程序,或通过单击 Super 键 ,或在左上角上单击“活动”按钮来启动/打开窗口。

它允许你来启动一个新的应用程序、切换窗口,和在工作空间之间移动窗口。

你可以通过选择如下任一操作简单地退出活动概述,如选择一个窗口、应用程序或工作区间,或通过按 Super 键或 Esc 键。

活动概述屏幕截图

2) 如何在 GNOME 3 桌面中重新调整窗口大小?

通过下面的组合键来将启动的窗口最大化、取消最大化,并吸附到屏幕的一侧(左侧或右侧)。

  • Super Key+下箭头:来非最大化窗口。
  • Super Key+上箭头:来最大化窗口。
  • Super Key+右箭头:来在填充半个屏幕的右侧窗口。
  • Super Key+作箭头:来在填充半个屏幕的左侧窗口。

使用 Super Key+下箭头 来取消最大化窗口。

使用 Super Key+上箭头 来最大化窗口。

使用 Super Key+右箭头 来在填充半个屏幕的右侧窗口。

使用 Super Key+左箭头 来在填充半个屏幕的左侧窗口。

这个功能将帮助你可以一次查看两个应用程序,又名,拆分屏幕。

3) 如何在 GNOME 3 桌面中显示应用程序?

在 Dash 中,单击“显示应用程序网格”按钮来显示在你的系统上的所有已安装的应用程序。

4) 如何在 GNOME 3 桌面中的 Dash 中添加应用程序?

为加速你的日常活动,你可能想要把频繁使用的应用程序添加到 Dash 中,或拖拽应用程序启动器到 Dash 中。

它将允许你直接启动你的收藏夹中的应用程序,而不用先去搜索应用程序。为做到这样,在应用程序上简单地右击,并使用选项“添加到收藏夹”。

为从 Dash 中移除一个应用程序启动器(收藏的程序),要么从 Dash 中拖拽应用程序到网格按钮,或者在应用程序上简单地右击,并使用选项“从收藏夹中移除”。

5) 如何在 GNOME 3 桌面中的工作区间之间切换?

工作区间允许你将窗口组合在一起。它将帮助你恰当地分隔你的工作。如果你正在做多项工作,并且你想对每项工作和相关的事物进行单独地分组,那么,它将是非常便利的,对你来说是一个非常方便和完美的选项。

你可以用两种方法切换工作区间,打开活动概述,并从右手边选择一个工作区间,或者使用下面的组合键。

  • 使用 Ctrl+Alt+Up 切换到上一个工作区间。
  • 使用 Ctrl+Alt+Down 切换到下一个工作区间。

6) 如何在 GNOME 3 桌面中的应用程序之间切换 (应用程序切换器) ?

使用 Alt+TabSuper+Tab 来在应用程序之间切换。为启动应用程序切换器,使用 Alt+TabSuper+Tab

在启动后,只需要按住 AltSuper 键,按 Tab 键来从左到右的依次移动接下来的应用程序。

7) 如何在 GNOME 3 桌面中添加用户姓名到顶部面板?

如果你想添加你的用户姓名到顶部面板,那么安装下面的添加用户姓名到顶部面板 GNOME 扩展。

8) 如何在 GNOME 3 桌面中添加微软 Bing 的桌面背景?

安装下面的 Bing 桌面背景更换器 GNOME shell 扩展,来每天更改你的桌面背景为微软 Bing 的桌面背景。

9) 如何在 GNOME 3 桌面中启用夜光?

夜光应用程序是著名的应用程序之一,它通过在日落后把你的屏幕从蓝光调成暗黄色,来减轻眼睛疲劳。

它在智能手机上也可用。相同目标的其它已知应用程序是 flux 和 redshift

为启用这个特色,导航到系统设置 >> 设备 >> 显示 ,并打开夜光。

在它启用后,状态图标将被放置到顶部面板上。

10) 如何在 GNOME 3 桌面中显示电池百分比?

电池百分比将向你精确地显示电池使用情况。为启用这个功能,遵循下面的步骤。

启动 GNOME Tweaks >> 顶部栏 >> 电池百分比 ,并打开它。

在修改后,你能够在顶部面板上看到电池百分比图标。

11) 如何在 GNOME 3 桌面中启用鼠标右键单击?

在 GNOME 3 桌面环境中右键单击是默认禁用的。为启用这个特色,遵循下面的步骤。

启动 GNOME Tweaks >> 键盘和鼠标 >> 鼠标点击硬件仿真,并选择“区域”选项。

12) 如何在 GNOME 3 桌面中启用单击最小化?

启用单击最小化功能,这将帮助我们最小化打开的窗口,而不必使用最小化选项。

$ gsettings set org.gnome.shell.extensions.dash-to-dock click-action 'minimize'

13) 如何在 GNOME 3 桌面中自定义 Dock ?

如果你想更改你的 Dock,类似于 Deepin 桌面或 Mac 桌面,那么使用下面的一组命令。

$ gsettings set org.gnome.shell.extensions.dash-to-dock dock-position BOTTOM
$ gsettings set org.gnome.shell.extensions.dash-to-dock extend-height false
$ gsettings set org.gnome.shell.extensions.dash-to-dock transparency-mode FIXED
$ gsettings set org.gnome.shell.extensions.dash-to-dock dash-max-icon-size 50

14) 如何在 GNOME 3桌面中显示桌面?

默认 Super 键 + D 快捷键不能显示你的桌面。为配置这种情况,遵循下面的步骤。

设置 >> 设备 >> 键盘 >> 单击在导航下的 隐藏所有普通窗口 ,然后按 Super 键 + D ,最后按设置按钮来启用它。

15) 如何自定义日期和时间格式?

GNOME 3 默认用 Sun 04:48 的格式来显示日期和时间。它并不清晰易懂,如果你想获得以下格式的输出:Sun Dec 2 4:49 AM ,遵循下面的步骤。

对于日期修改: 打开 GNOME Tweaks >> 顶部栏 ,并在时钟下启用“星期”选项。

对于时间修改: 设置 >> 具体情况 >> 日期和时间 ,然后,在时间格式中选择 AM/PM 选项。

在修改后,你能够看到与下面相同的日期和时间格式。

16) 如何在启动程序中永久地禁用不使用的服务?

就我来说,我不使用 蓝牙 & cups(打印机服务)。因此,在我的笔记本电脑上禁用这些服务。为在基于 Arch 的系统上禁用服务,使用 Pacman 软件包管理器

对于蓝牙:

$ sudo systemctl stop bluetooth.service
$ sudo systemctl disable bluetooth.service
$ sudo systemctl mask bluetooth.service
$ systemctl status bluetooth.service

对于 cups:

$ sudo systemctl stop org.cups.cupsd.service
$ sudo systemctl disable org.cups.cupsd.service
$ sudo systemctl mask org.cups.cupsd.service
$ systemctl status org.cups.cupsd.service

最后,使用以下命令验证这些服务是否在启动程序中被禁用。如果你想再次确认这一点,你可以重新启动一次,并检查相同的东西。导航到以下链接来了解更多关于 systemctl 的用法,

$ systemctl list-unit-files --type=service | grep enabled
[email protected] enabled
dbus-org.freedesktop.ModemManager1.service enabled
dbus-org.freedesktop.NetworkManager.service enabled
dbus-org.freedesktop.nm-dispatcher.service enabled
display-manager.service enabled
gdm.service enabled
[email protected] enabled
linux-module-cleanup.service enabled
ModemManager.service enabled
NetworkManager-dispatcher.service enabled
NetworkManager-wait-online.service enabled
NetworkManager.service enabled
systemd-fsck-root.service enabled-runtime
tlp-sleep.service enabled
tlp.service enabled

17) 在 GNOME 3 桌面中安装图标和主题?

有大量的图标和主题可供 GNOME 桌面使用,因此,选择吸引你的 GTK 主题图标主题


via: https://www.2daygeek.com/how-to-customize-the-gnome-3-desktop/

作者:Magesh Maruthamuthu 选题:lujun9972 译者:robsean 校对:wxy

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

或许你不知道,在印度有数以百计的语言被使用,其中 22 种被印度机构列为官方语言。我的母语不是英语,因此当我需要从英语输入或者翻译到我的母语泰米尔语时我经常使用谷歌翻译。嗯,我估计我不再需要依靠谷歌翻译了。我刚发现在 Ubuntu 上输入印度语的好办法。这篇教程解释了如何配置多语言输入法的方法。这个是为 Ubuntu 18.04 LTS 特别打造的,但是它可以在其它类 Ubuntu 系统例如 Linux mint、Elementary OS 上使用。

在 Ubuntu Linux 上设置多语言输入法

通过 IBus 的帮助,我们可以轻松在 Ubuntu 及其衍生物上配置多语言输入法。Ibus,代表 I ntelligent I nput Bus(智能输入总线),是一种针对类 Unix 操作系统下多语言输入的输入法框架。它使得我们可以在大多数 GUI 应用例如 LibreOffice 下输入母语。

在 Ubuntu 上安装 IBus

在 Ubuntu 上 安装 IBus 包,运行:

$ sudo apt install ibus-m17n

Ibus-m17n 包提供了许多印度语和其它国家语言包括阿姆哈拉语,阿拉伯语,阿美尼亚语,阿萨姆语,阿萨巴斯卡语,白俄罗斯语,孟加拉语,缅甸语,中高棉语,占文,汉语,克里语,克罗地亚语,捷克语,丹麦语,迪维希语,马尔代夫语,世界语,法语,格鲁吉亚语,古/现代希腊语,古吉拉特语,希伯来语,因纽特语,日语,卡纳达语,克什米尔语,哈萨克语,韩语,老挝语,马来语,马拉地语,尼泊尔语,欧吉布威语,欧瑞亚语,旁遮普语,波斯语,普什图语,俄语,梵语,塞尔维亚语,四川彝文,彝文,西格西卡语,信德语,僧伽罗语,斯洛伐克语,瑞典语,泰语,泰米尔语,泰卢固语,藏语,维吾尔语,乌都语,乌兹别克语,越语及意第绪语。

添加输入语言

我们可以在系统里的设置部分添加语言。点击你的 Ubuntu 桌面右上角的下拉箭头选择底部左下角的设置图标。

从顶部面板启动系统设置

从设置部分,点击左侧面板的区域及语言选项。再点击右侧输入来源标签下的+(加号)按钮。

设置部分的区域及语言选项

在下个窗口,点击三个垂直的点按钮。

在 Ubuntu 里添加输入来源

搜寻并选择你想从列表中添加的输入语言。

添加输入语言

在本篇教程中,我将加入泰米尔语。在选择语言后,点击添加按钮。

添加输入来源

现在你会看到选中的输入来源已经被添加了。你会在输入来源标签下的区域及语言选项中看到它。

Ubuntu 里的输入来源选项

点击输入来源标签下的“管理安装的语言”按钮

在 Ubuntu 里管理安装的语言

接下来你会被询问是否想要为选定语言安装翻译包。如果你想的话你可以安装它们。或者仅仅选择“稍后提醒我”按钮。你下次打开的时候会收到统治。

语言支持没完全安装好

一旦翻译包安装好,点击安装/移除语言按钮。同时确保 IBus 在键盘输入法系统中被选中。

在 Ubuntu 中安装/移除语言

从列表中选择你想要的语言并点击采用按钮。

选择输入语言

到此为止了。我们已成功在 Ubuntu 18.04 桌面上配置好多语输入方法。同样的,你可以添加尽可能多的输入语言。

在添加完所有语言来源后,登出再登陆回去。

用印度语或者你喜欢的语言输入

一旦你添加完所有语言后,你就会从你的 Ubuntu 桌面上的顶端菜单下载栏看到它们。

从 Ubuntu 桌面的顶端栏选择输入语言。

你也可以使用键盘上的徽标键+空格键在不同语言中切换。

在 Ubuntu 里用徽标键+空格键选择输入语言

打开任何 GUI 文本编辑器/应用开始打字吧!

在 Ubuntu 中用印度语输入

将 IBus 加入启动应用

我们需要让 IBus 在每次重启后自动打开,这样每次你想要用自己喜欢的语言输入的时候就无须手动打开。

为此仅须在面板中输入“开机应用”点开开机应用选项。

在下个窗口,点击添加,在名字栏输入“Ibus”并在命令栏输入“ibus-daemon”点击添加按钮。

在 Ubuntu 中将 Ibus 添加进开机启动项

从现在起 IBus 将在系统启动后自动开始。

现在到你的回合了。在什么应用/工具中你用当地的印度语输入?在下方评论区让我们知道它们。

参考:


via: https://www.ostechnix.com/how-to-setup-multilingual-input-method-on-ubuntu/

作者:sk 选题:lujun9972 译者:tomjlw 校对:wxy

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

今天,我尝试更新我的 Ubuntu 18.04 LTS 的仓库列表,但收到了一条错误消息:“E: The package cache file is corrupted, it has the wrong hash”。这是我在终端运行的命令以及输出:

$ sudo apt update

示例输出:

Hit:1 http://it-mirrors.evowise.com/ubuntu bionic InRelease
Hit:2 http://it-mirrors.evowise.com/ubuntu bionic-updates InRelease
Hit:3 http://it-mirrors.evowise.com/ubuntu bionic-backports InRelease
Hit:4 http://it-mirrors.evowise.com/ubuntu bionic-security InRelease
Hit:5 http://ppa.launchpad.net/alessandro-strada/ppa/ubuntu bionic InRelease
Hit:7 http://ppa.launchpad.net/leaeasy/dde/ubuntu bionic InRelease
Hit:8 http://ppa.launchpad.net/rvm/smplayer/ubuntu bionic InRelease
Ign:6 https://dl.bintray.com/etcher/debian stable InRelease
Get:9 https://dl.bintray.com/etcher/debian stable Release [3,674 B]
Fetched 3,674 B in 3s (1,196 B/s)
Reading package lists... Done
E: The package cache file is corrupted, it has the wrong hash

Ubuntu 中的 “The package cache file is corrupted, it has the wrong hash” 错误

经过一番谷歌搜索,我找到了解决此错误的方法。

如果你遇到过这个错误,不要惊慌。只需运行下面的命令修复。

在运行命令之前,请再次确认你在最后加入了 *。在命令最后加上 * 很重要。如果你没有添加,它会删除 /var/lib/apt/lists/*目录,而且无法恢复。我提醒过你了!

$ sudo rm -rf /var/lib/apt/lists/*

现在我再次使用下面的命令更新系统:

$ sudo apt update

现在好了!希望它有帮助。


via: https://www.ostechnix.com/fix-e-the-package-cache-file-is-corrupted-it-has-the-wrong-hash-error-in-ubuntu/

作者:sk 选题:lujun9972 译者:geekpi 校对:wxy

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