2017年2月

 title=

本篇中,Carla Schroder 会解释如何使用 OpenSSL 保护你的 Postfix/Dovecot 邮件服务器

上周,作为我们 OpenSSL 系列的一部分,我们学习了如何配置 Apache 以使用 OpenSSL 并强制所有会话使用 HTTPS。 今天,我们将使用 OpenSSL 保护我们的 Postfix/Dovecot 邮件服务器。这些示例基于前面的教程; 请参阅最后的参考资料部分,了解本系列中以前的所有教程的链接。

你需要配置 Postfix 以及 Dovecot 都使用 OpenSSL,我们将使用我们在OpenSSL 在 Apache 和 Dovecot 下的使用(一)中创建的密钥和证书。

Postfix 配置

你必须编辑 /etc/postfix/main.cf 以及 /etc/postfix/master.cf。实例的 main.cf 是完整的配置,基于我们先前的教程。替换成你自己的 OpenSSL 密钥和证书名以及本地网络地址。

compatibility_level=2
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu/GNU)
biff = no
append_dot_mydomain = no

myhostname = localhost
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = $myhostname
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/24
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

virtual_mailbox_domains = /etc/postfix/vhosts.txt
virtual_mailbox_base = /home/vmail
virtual_mailbox_maps = hash:/etc/postfix/vmaps.txt
virtual_minimum_uid = 1000
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_transport = lmtp:unix:private/dovecot-lmtp

smtpd_tls_cert_file=/etc/ssl/certs/test-com.pem
smtpd_tls_key_file=/etc/ssl/private/test-com.key
smtpd_use_tls=yes

smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_authenticated_header = yes

master.cf 取消 submission inet 部分的注释,并编辑 smtpd_recipient_restrictions

#submission inet n  -  y  -  - smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o milter_macro_daemon_name=ORIGINATING
  -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
  -o smtpd_tls_wrappermode=no

完成后重新加载 Postfix:

$ sudo service postfix reload

Dovecot 配置

在我们以前的教程中,我们为 Dovecot 创建了一个单一配置文件 /etc/dovecot/dovecot.conf,而不是使用多个默认配置文件。这是一个基于我们以前的教程的完整配置。再说一次,使用你自己的 OpenSSL 密钥和证书,以及你自己的 userdb 的 home 文件:

protocols = imap pop3 lmtp
log_path = /var/log/dovecot.log
info_log_path = /var/log/dovecot-info.log
disable_plaintext_auth = no
mail_location = maildir:~/.Mail
pop3_uidl_format = %g
auth_mechanisms = plain

passdb {
  driver = passwd-file
  args = /etc/dovecot/passwd
}

userdb {
  driver = static
  args = uid=vmail gid=vmail home=/home/vmail/studio/%u
}

service lmtp {
 unix_listener /var/spool/postfix/private/dovecot-lmtp {
   group = postfix
   mode = 0600
   user = postfix
  }
}

protocol lmtp {
  postmaster_address = postmaster@studio
}

service lmtp {
  user = vmail
}

service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
        user=postfix
        group=postfix
  }
 }

ssl=required
ssl_cert = </etc/ssl/certs/test-com.pem
ssl_key = </etc/ssl/private/test-com.key

重启 Dovecot:

$ sudo service postfix reload

用 telnet 测试

就像我们以前一样,现在我们可以通过使用 telnet 发送消息来测试我们的设置。 但是等等,你说 telnet 不支持 TLS/SSL,那么这样怎么办呢?首先通过使用 openssl s_client 打开一个加密会话。openssl s_client 的输出将显示你的证书及其指纹和大量其它信息,以便你知道你的服务器正在使用正确的证书。会话建立后输入的命令都是不以数字开头的:

$ openssl s_client -starttls smtp -connect studio:25
CONNECTED(00000003)
[masses of output snipped]
    Verify return code: 0 (ok)
---
250 SMTPUTF8
EHLO studio
250-localhost
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250 SMTPUTF8
mail from: <[email protected]>
250 2.1.0 Ok
rcpt to: <alrac@studio>
250 2.1.5 Ok
data
354 End data with .subject: TLS/SSL test
Hello, we are testing TLS/SSL. Looking good so far.
.
250 2.0.0 Ok: queued as B9B529FE59
quit
221 2.0.0 Bye

你应该可以在邮件客户端中看到一条新邮件,并在打开时要求你验证 SSL 证书。你也可以使用 openssl s_client 来测试 Dovecot 的 POP3 和 IMAP 服务。此示例测试加密的 POP3,第 5 号消息是我们在 telnet(如上)中创建的:

$ openssl s_client -connect studio:995
CONNECTED(00000003)
[masses of output snipped]
    Verify return code: 0 (ok)
---
+OK Dovecot ready
user alrac@studio 
+OK
pass password
+OK Logged in.
list
+OK 5 messages:
1 499
2 504
3 514
4 513
5 565
.
retr 5
+OK 565 octets
Return-Path: <[email protected]>
Delivered-To: alrac@studio
Received: from localhost
        by studio.alrac.net (Dovecot) with LMTP id y8G5C8aablgKIQAAYelYQA
        for <alrac@studio>; Thu, 05 Jan 2017 11:13:10 -0800
Received: from studio (localhost [127.0.0.1])
        by localhost (Postfix) with ESMTPS id B9B529FE59
        for <alrac@studio>; Thu,  5 Jan 2017 11:12:13 -0800 (PST)
subject: TLS/SSL test
Message-Id: <20170105191240.B9B529FE59@localhost>
Date: Thu,  5 Jan 2017 11:12:13 -0800 (PST)
From: [email protected]

Hello, we are testing TLS/SSL. Looking good so far.
.
quit
+OK Logging out.
closed

现在做什么?

现在你有一个功能良好的,具有合适的 TLS/SSL 保护的邮件服务器了。我鼓励你深入学习 Postfix 以及 Dovecot; 这些教程中的示例尽可能地简单,不包括对安全性、防病毒扫描程序、垃圾邮件过滤器或任何其他高级功能的调整。我认为当你有一个基本工作系统时更容易学习高级功能。

下周回到 openSUSE 包管理备忘录上。

资源


via: https://www.linux.com/learn/intro-to-linux/openssl-apache-and-dovecot-part-2

作者:CARLA SCHRODER 译者:geekpi 校对:校对者ID

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

这是 LXD 2.0 系列介绍文章的第六篇。

  1. LXD 入门
  2. 安装与配置
  3. 你的第一个 LXD 容器
  4. 资源控制
  5. 镜像管理
  6. 远程主机及容器迁移
  7. LXD 中的 Docker
  8. LXD 中的 LXD
  9. 实时迁移
  10. LXD 和 Juju
  11. LXD 和 OpenStack
  12. 调试,及给 LXD 做贡献

远程协议

LXD 2.0 支持两种协议:

  • LXD 1.0 API:这是在客户端和 LXD 守护进程之间使用的 REST API,以及在 LXD 守护进程间复制/移动镜像和容器时使用的 REST API。
  • Simplestreams:Simplestreams 协议是 LXD 客户端和守护进程使用的只读、仅针对镜像的协议,用于客户端和 LXD 守护进程获取镜像信息以及从一些公共镜像服务器(如 Ubuntu 镜像)导入镜像。

以下所有内容都将使用这两个协议中的第一个。

安全

LXD API 的验证是通过客户端证书在 TLS 1.2 上使用最近的密钥验证的。 当两个 LXD 守护进程必须直接交换信息时,源守护程序生成一个临时令牌,并通过客户端传输到目标守护程序。 此令牌仅可用于访问特定流,并且会被立即撤销,因此不能重新使用。

为了避免中间人攻击,客户端工具还将源服务器的证书发送到目标服务器。这意味着对于特定的下载操作,目标服务器会被提供源服务器的 URL、所需资源的一次性访问令牌以及服务器应该使用的证书。 这可以防止中间人攻击,并且只允许临时访问所传输的对象。

网络需求

LXD 2.0 使用这样一种模型,某个操作的目标(接收端)直接连接到源以获取数据。

这意味着你必须确保目标服务器可以直接连接到源、可以更新任何所需的防火墙。

我们有个允许反向连接的计划,允许通过客户端代理本身以应对那些严格的防火墙阻止两台主机之间通信的罕见情况。

与远程主机交互

LXD 使用的是“远程”的概念,而不是让我们的用户总是提供主机名或 IP 地址,然后在他们想要与远程主机交互时验证证书信息。

默认情况下,唯一真正的 LXD 远程配置是 local:,这也是默认的远程(所以你不必输入它的名称)。这个本地(local:)远程使用 LXD REST API 通过 unix 套接字与本地守护进程通信。

添加一台远程主机

假设你已经有两台装有 LXD 的机器:你的本机以及远程那台我们称为“foo”的主机。

首先你需要确保“foo”正在监听网络,并设置了一个密码,以便得到一个远程 shell,运行:

lxc config set core.https_address [::]:8443
lxc config set core.trust_password something-secure

在你本地 LXD 上,你需要使它对网络可见,这样我们可以从它传输容器和镜像:

lxc config set core.https_address [::]:8443

现在已经在两端完成了守护进程的配置,你可以添加“foo”到你的本地客户端:

lxc remote add foo 1.2.3.4

(将 1.2.3.4 替换成你的 IP 或者 FQDN)

看上去像这样:

stgraber@dakara:~$ lxc remote add foo 2607:f2c0:f00f:2770:216:3eff:fee1:bd67
Certificate fingerprint: fdb06d909b77a5311d7437cabb6c203374462b907f3923cefc91dd5fce8d7b60
ok (y/n)? y
Admin password for foo: 
Client certificate stored at server: foo

你接着可以列出远端服务器,你可以在列表中看到“foo”:

stgraber@dakara:~$ lxc remote list
+-----------------+-------------------------------------------------------+---------------+--------+--------+
|      NAME       |                         URL                           |   PROTOCOL    | PUBLIC | STATIC |
+-----------------+-------------------------------------------------------+---------------+--------+--------+
| foo             | https://[2607:f2c0:f00f:2770:216:3eff:fee1:bd67]:8443 | lxd           | NO     | NO     |
+-----------------+-------------------------------------------------------+---------------+--------+--------+
| images          | https://images.linuxcontainers.org:8443               | lxd           | YES    | NO     |
+-----------------+-------------------------------------------------------+---------------+--------+--------+
| local (default) | unix://                                               | lxd           | NO     | YES    |
+-----------------+-------------------------------------------------------+---------------+--------+--------+
| ubuntu          | https://cloud-images.ubuntu.com/releases              | simplestreams | YES    | YES    |
+-----------------+-------------------------------------------------------+---------------+--------+--------+
| ubuntu-daily    | https://cloud-images.ubuntu.com/daily                 | simplestreams | YES    | YES    |
+-----------------+-------------------------------------------------------+---------------+--------+--------+

与它交互

好了,所以我们已经有了一台定义好的远程服务器,我们现在可以做些什么?

现在,就如你看到的,唯一的不同是你必须告诉 LXD 要哪台主机运行。

比如:

lxc launch ubuntu:14.04 c1

它会在默认主机(lxc remote get-default),也就是你的本机上运行。

lxc launch ubuntu:14.04 foo:c1

这个会在 foo 上运行。

列出远程主机正在运行的容器可以这么做:

stgraber@dakara:~$ lxc list foo:
+------+---------+---------------------+-----------------------------------------------+------------+-----------+
| NAME |  STATE  |         IPV4        |                     IPV6                      |    TYPE    | SNAPSHOTS |
+------+---------+---------------------+-----------------------------------------------+------------+-----------+
| c1   | RUNNING | 10.245.81.95 (eth0) | 2607:f2c0:f00f:2770:216:3eff:fe43:7994 (eth0) | PERSISTENT | 0         |
+------+---------+---------------------+-----------------------------------------------+------------+-----------+

你要记住的一件事是你需要在远程主机上同时指定镜像和容器。因此如果你在“foo”上有一个“my-image”的镜像,并且希望从它创建一个“c2”的容器,你需要运行:

lxc launch foo:my-image foo:c2

最后,就如你希望的那样得到一个远程容器的 shell:

lxc exec foo:c1 bash

复制容器

在两台主机间复制容器就如它听上去那样简单:

lxc copy foo:c1 c2

你会有一个新的从远程“c1”复制过来的本地“c2”容器。这需要停止“c1”容器,但是你可以在运行的时候只复制一个快照:

lxc snapshot foo:c1 current
lxc copy foo:c1/current c3

移动容器

除非你在做实时迁移(将会在之后的文章中讲到),不然你需要在移动前先停止容器,接着就会如你预料的那样。

lxc stop foo:c1
lxc move foo:c1 local:

这个例子等同于:

lxc stop foo:c1
lxc move foo:c1 c1

是如何工作的

正如你期望的那样, 与远程容器的交互时 LXD 使用的 REST API 并不是通过本地 Unix 套接字,而是通过 HTTPS 传输。

当两个守护程序之间交互时会变得有些棘手,如复制和移动的情况。

在这种情况下会发生:

  1. 用户运行lxc move foo:c1 c1
  2. 客户端联系 local: 远程以检查是否现有“c1”容器。
  3. 客户端从“foo”获取容器信息。
  4. 客户端从源“foo”守护程序请求迁移令牌。
  5. 客户端将迁移令牌以及源 URL 和“foo”的证书发送到本地 LXD 守护程序以及容器配置和周围设备。
  6. 然后本地 LXD 守护程序使用提供的令牌直接连接到“foo” a) 它连接到第一个控制 websocket b) 它协商文件系统传输协议(zfs 发送/接收,btrfs 发送/接收或者纯 rsync) c) 如果在本地可用,它会解压用于创建源容器的镜像。这是为了避免不必要的数据传输。 d) 然后它会将容器及其任何快照作为增量传输。
  7. 如果成功,客户端会命令“foo”删除源容器。

在线尝试

没有两台机器来尝试远端交互和复制/移动容器?

没有问题,你可以使用我们的 demo 服务。这里甚至还包括了一步步的指导!

额外信息

LXD 的主站在: https://linuxcontainers.org/lxd

LXD 的 GitHub 仓库: https://github.com/lxc/lxd

LXD 的邮件列表: https://lists.linuxcontainers.org

LXD 的 IRC 频道: #lxcontainers on irc.freenode.net


作者简介:我是 Stéphane Graber。我是 LXC 和 LXD 项目的领导者,目前在加拿大魁北克蒙特利尔的家所在的Canonical 有限公司担任 LXD 的技术主管。


via: https://www.stgraber.org/2016/04/12/lxd-2-0-remote-hosts-and-container-migration-612/

作者:Stéphane Graber 译者:geekpi 校对:wxy

本文由 LCTT 组织翻译,Linux中国 荣誉推出

在这有两部分的系列中,Carla Schroder 会向你展示如何创建自己的 OpenSSL 证书以及如何配置 Apache 和 Dovecot 来使用它们。

这么长时间之后,我的读者们,这里是我给你们承诺的在 Apache 中使用 OpenSSL 的方法,下周你会看到在 Dovecot 中使用 SSL。 在这个分为两部分的系列中,我们将学习如何创建自己的 OpenSSL 证书,以及如何配置 Apache 和 Dovecot 来使用它们。

这些例子基于这些教程:

创建你的证书

Debian/Ubuntu/Mint 会在 /etc/ssl 中存储私钥和证书的符号链接。系统自带的证书保存在 /usr/share/ca-certificates 中。你安装或创建的证书在 /usr/local/share/ca-certificates/ 中。

这个例子是对 Debian 而言。创建私钥和公用证书,将证书转换为正确的格式,并将其符号链接到正确的目录:

$ sudo openssl req -x509 -days 365 -nodes -newkey rsa:2048 \
   -keyout /etc/ssl/private/test-com.key -out \
   /usr/local/share/ca-certificates/test-com.crt
Generating a 2048 bit RSA private key
.......+++
......................................+++
writing new private key to '/etc/ssl/private/test-com.key'
-----
You are about to be asked to enter information that will 
be incorporated into your certificate request.
What you are about to enter is what is called a Distinguished 
Name or a DN. There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:WA
Locality Name (eg, city) []:Seattle
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Alrac Writing Sweatshop
Organizational Unit Name (eg, section) []:home dungeon
Common Name (e.g. server FQDN or YOUR name) []:www.test.com
Email Address []:[email protected]

$ sudo update-ca-certificates
Updating certificates in /etc/ssl/certs...
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...

Adding debian:test-com.pem
done.
done.

CentOS/Fedora 使用不同的文件结构,并不使用 update-ca-certificates,使用这个命令:

$ sudo openssl req -x509 -days 365 -nodes -newkey rsa:2048 \
   -keyout /etc/httpd/ssl/test-com.key -out \
   /etc/httpd/ssl/test-com.crt

最重要的条目是 Common Name,它必须与你的完全限定域名(FQDN)完全匹配。此外其它信息都是任意的。-nodes 用于创建一个无密码的证书,这是 Apache 所必需的。-days 用于定义过期日期。更新证书是一个麻烦的事情,但这样应该能够额外提供一些安全保障。参见 90 天证书有效期的利弊中的讨论。

配置 Apache

现在配置 Apache 以使用你的新证书。如果你遵循给初学者看的在 Ubuntu Linux 上使用 Apache:第 2 部分,你所要做的就是修改虚拟主机配置中的 SSLCertificateFileSSLCertificateKeyFile,以指向你的新私钥和公共证书。来自该教程中的 test.com 示例现在看起来像这样:

SSLCertificateFile /etc/ssl/certs/test-com.pem
SSLCertificateKeyFile /etc/ssl/private/test-com.key

CentOS 用户,请参阅在 CentOS wiki 中的在 CentOS 上设置 SSL 加密的 Web 服务器一文。过程是类似的,wiki 会告诉如何处理 SELinux。

测试 Apache SSL

一个简单的方法是用你的网络浏览器访问 https://yoursite.com,看看它是否可以正常工作。在第一次这样做时,你会在你过度保护的 web 浏览器中看到可怕的警告说网站是不安全的,因为它使用的是自签名证书。请忽略你这个敏感的浏览器,并单击屏幕创建永久性例外。 如果你遵循在给初学者看的在 Ubuntu Linux 上使用 Apache:第 2 部分上的示例虚拟主机配置,那么即使你的网站访问者尝试使用纯 HTTP,你的网站的所有流量都将强制通过 HTTPS。

一个很好测试方法是使用 OpenSSL。是的,有一个漂亮的命令来测试这些东西。试下这个:

$ openssl s_client -connect www.test.com:443
CONNECTED(00000003)
depth=0 C = US, ST = WA, L = Seattle, O = Alrac Writing Sweatshop, 
OU = home dungeon, CN = www.test.com, emailAddress = [email protected]
verify return:1
---
Certificate chain
 0 s:/C=US/ST=WA/L=Seattle/O=Alrac Writing Sweatshop/OU=home 
     dungeon/CN=www.test.com/[email protected]
   i:/C=US/ST=WA/L=Seattle/O=Alrac Writing Sweatshop/OU=home 
     dungeon/CN=www.test.com/[email protected]
---
Server certificate
-----BEGIN CERTIFICATE-----
[...]

这里输出了大量的信息。这里有很多关于 openssl s_client 的有趣信息; 现在足够我们知道我们的 web 服务器是否使用了正确的 SSL 证书。

创建一个证书签名请求

如果你决定使用第三方证书颁发机构(CA),那么就必须创建证书签名请求(CSR)。你将它发送给你的新 CA,他们将签署并将其发送给您。他们可能对创建你的 CSR 有自己的要求; 这是如何创建一个新的私钥和 CSR 的典型示例:

$ openssl req -newkey rsa:2048 -nodes \
   -keyout yourdomain.key -out yourdomain.csr

你也可以从一个已经存在的 key 中创建一个 CSR:

$ openssl req  -key yourdomain.key \
   -new -out domain.csr

今天就是这样了。下周我们将学习如何正确地在 Dovecot 中设置 OpenSSL

额外的教程

提高你的系统管理职业生涯吧!查看Linux基金会的系统管理的要点课程。


via: https://www.linux.com/learn/sysadmin/openssl-apache-and-dovecot

作者:CARLA SCHRODER 译者:geekpi 校对:wxy

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

2017 年 1 月 30 日,KDE 团队宣布发布了 KDE Plasma 5.9。

虽然 KDE Plasma 5.9 开发周期很短,不过考虑到 5.9 并非像 5.8 一样是个 LTS 版本也是可以理解的。 这次发布还是一个相当大的更新,带来了不少新的功能,并改善了 Wayland 支持,我们推荐所有 KDE 用户升级到这个版本。

全局菜单回来了

对于从 KDE Plasma 5.8 LTS 或之前的版本升级的用户而言,可能最重要原因就是它带回了“全局菜单”。全局菜单是一个 KDE 4 系列的功能,但是在 KDE 5 中被取消了,经过了用户的多次要求,KDE 开发团队终于在 KDE Plasma 5.9 中将这一功能再次实现了。

在其发布公告中称:“全局菜单回来了。KDE 的这项开创性的功能从应用窗口分离出了菜单栏,允许通过 Plasma Widget 显示该菜单或将其整齐的放入窗口栏。”如下,你可以看到显示在 Plasma Widget 和窗口栏中的全局菜单。

显示在 Plasma Widget 中的全局菜单

显示在窗口栏中的全局菜单

改进 Wayland 支持,可以增强生产力的新工具

对于那些使用下一代 Wayland 显示服务器的人来说,KDE Plasma 5.9 中带来了大量改进。这包括截屏的能力、支持使用颜色拾取器、实现了无边框最大化窗口以支持全屏、支持点击应用的空白区域来拖动应用等等。

KDE Plasma 的 Wayland 支持允许用户为窗口设置颜色方案,这对于改善可用性有帮助。实现了面板的自动隐藏,并能在面板上正确显示 X11 应用的图标。此外,还有一些新的设置工具可以用于配置触摸板,也可以设置手势。

KDE Plasma 5.9 也增加了一些很酷的新工具,比如说你可以通过拖动截屏的提示弹窗来将截屏拖动到 Web 浏览器的表单、聊天窗口或邮件中。重新打造的拖放功能可以让你直接在系统托盘区增加小部件,也可以直接从全屏的 应用仪表盘启动器 Application Dashboard launcher 中增加小部件。

拖动截屏的提示弹窗

KRunner 的搜索结果中可以显示“打开包含文件夹”和“在终端中运行”菜单。有一个新的应用可以让用户将多个小部件组织成一个。此外,KDE Plasma 5.9 还改善了 KDE 应用和 Plasma 桌面的外观, 以及更漂亮、更紧凑的 Breeze 风格的滚动条。

“打开包含文件夹”

KDE Plasma 5.9 已经可以从其官网下载源代码了,各个发行版很快就会发布更新包。

按照计划,KDE Plasma 5.9 会有五个维护版本,最后一个维护版本 5.9.5 将发布于 2017 年 4 月 25 日。

KDE Plasma 5.10 已经在路上

KDE Plasma 5.9 刚刚出炉,而 KDE 开发团队就已经投入到了 5.10 的开发中。据闻,在 5.10 中会有一个新的“ 弹性加载 Spring-Loading ”功能。

弹性加载是一种文件夹视图,当用户将一个文件夹/文件拖放到另外一个文件夹时,悬浮在其上会即时显示该文件夹内容,你可以在显示的文件夹内继续拖放悬浮,并选择你要采取的动作。从下面的演示视频看,还是很有吸引力的。

此外,文件夹视图也会得到性能的极大提升。

大多数电子设备发射的蓝光被认为对我们的睡眠有负面影响。作为一个尝试,我们可以在黑暗中不再使用我们的电子设备,以改善我们的睡眠。然而,由于这对我们大多数人并不是很适合,更好的方法是根据你周围环境调整屏幕的色温。实现这一点的最流行的方法之一是使用 Redshift。 Redshift 的创建者 Jon Lund Steffensen 这样描述了他的程序:

Redshift 会根据你周围的环境调整屏幕的色温。如果你在夜间在屏幕前工作,它可以帮助你减少眼睛伤害。

Redshift 在 Fedora Workstation 上仅工作在 X11 会话中。所以如果你使用 Fedora 24,Redshift 可以工作在默认登录会话中。然而,在 Fedora 25 上,登录的默认会话是 Wayland,因此你将需要替代使用其 GNOME shell 扩展。注意,这个 GNOME Shell 扩展也适用于 X11 会话。

Redshift 工具

安装

Redshift 在 Fedora 的仓库中,因此我们使用下面的命令安装:

sudo dnf install redshift

该软件也提供了 GUI。要使用的话就安装 redshift-gtk。记住,这个工具只能在 X11 会话中使用:

使用 Redshift 工具

用像下面的命令在命令行中运行:

redshift -l 23.6980:133.8807 -t 5600:3400

在以上命令中,-l 23.6980:133.8807 的意思是我们通知 Redshift 我们当前的位置是南纬 23.6980°,东经 133.8807°。 -t 5600:3400 表明你白天想要的色温是 5600,晚上是 3400。

色温与发射的蓝光的量成比例:较低的色温意味着较低量的蓝光。我喜欢在白天使用 5600K(6500K 是中性日光),在晚上使用 3400K(更低的色温让我觉得像盯着番茄一样),但你可以随意尝试。

如果你不指定位置,Redshift 会尝试使用 Geoclue 方法来确定你的位置坐标。如果此方法不起作用,你可以使用几个网站和在线地图来查找坐标。

screenshot1

别忘记将 Redshift 设置为自动启动,查看 Jon 的网站来获取更多信息。

Redshift GNOME Shell 扩展

该程序不能在运行 Wayland 显示服务器(这是 Fedora 25 中的标准)的环境中工作。幸运的是,这里有一个方便的 GNOME Shell 扩展可以做到同样的工作。要安装它,请运行以下命令:

sudo dnf copr enable mystro256/gnome-redshift
sudo dnf install gnome-shell-extension-redshift

从 COPR 仓库安装后,注销并重新登录你的 Fedora Workstation,然后在 GNOME Tweak 工具中启用它。关于更多信息,请查看 gnome-redshift 的 copr 仓库github 仓库

启用扩展后,GNOME shell 右上角会出现一个小小的太阳(或月亮)图标。该扩展还提供了一个设置对话框来调整 redshift 和温度的时间。

screenshot-from-2017-01-18-15-21-47

相关软件

F.lux

Redshift 可以被看作是 F.lux 的开源变体。现在有一个 linux 版本的 F.lux。如果你不介意使用闭源软件,或者 Redshift 不能正常工作,你可以考虑使用它。

Android 版 Twilight

Twilight 与 Redshift 相似,但是用于 Android。它可以让你在晚上在智能手机或平板上阅读更加舒服。

Redshift plasmoid

这是 Redshift GUI 的 KDE 版本。你可以在 github 中找到更多信息。


via: https://fedoramagazine.org/safe-eyes-redshift/

作者:novel 译者:geekpi 校对:wxy

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

mir

这是一篇来自 Canonical 的软件工程师 Alan Griffiths 的一篇游客文章。如果你也想投稿,请联系 [email protected]

Mir 是一个计算机显示的管理应用的支持项目。它可以与当前 Ubuntu 桌面(及很多其他桌面)上使用的、我们更熟悉的 X-Window 相比较。我下面会讨论 Mir 的一些动机,但本篇的目的是澄清 Mir 和 Unity 8 之间的关系。

大多数时候你听说 Mir 时都会提到 Unity 8。这并不奇怪,因为 Unity 8 是 Canonical 新的用户界面 shell,用户会一直与它交互。 Mir “只”是使这成为可能。Unity 8 目前用于手机和平板电脑,也可以在 Ubuntu 16.10 桌面上“预览”它。

在这里我想解释一下,可以不用 Unity 8 也可以使用 Mir。要么作为替代 shell,要么作为嵌入式环境的更简单的界面:信息亭,电子标牌等。Mir “抽象层”证明了这一点,它提供了三个重要的元素:

  1. libmiral.so - Mir 的稳定接口,提供基本的窗口管理;
  2. miral-shell - 一个提供“传统”和“平铺”窗口管理的示例 shell;
  3. miral-kiosk - 一个仅提供基本窗口管理的示例“信息亭”。

miral-shell 和 miral-kiosk 示例服务器可从 zesty 的归档文件中获得,Kevin Gunn 已经在“Voices”上写了一篇基于 miral-kiosk 的“信息亭”的概览的博文。我将在下面给出更多关于使用这些例子的细节,但在我的“voices”博客上有更多(包括“如何”开发自己的替代 Mir 服务器)。

使用 MIR

Mir 是一套编程库,而不是独立的程序。这意味着这需要程序去调用它实现相应的功能。有两种方式去使用 Mir 库:编写程序的时候作为“客户端”,或者在实现 shell 时作为“服务端”。客户端(和 X11 一起)典型是使用工具库,而不是直接使用 Mir(或者 X11)。

GTK、Qt 和 SDL2 中有对 Mir 的支持。当在那些工具库中启用对它的支持时(默认在 Ubuntu 中启用支持),意味着使用这些工具的程序应该“可以工作”于 Mir 中。除此之外还有一个 Xmir:一个运行于 Mir 的 X11 服务器,这允许基于 X 的服务运行在 Mir 服务端上。

但是开始之前 Mir 客户端需要一个相匹配的 Mir 服务端。在最后一个开发周期中,Mir 团队在演示中将 MirAL 作为编写 Mir 服务端的推荐方法,并推出了一个“miral-examples”包。在 Ubuntu 的开发版本 zesty 中,你可以从归档中安装它:

$ sudo apt install miral-examples mir-graphics-drivers-desktop qtubuntu-desktop

对于其他平台,你需要自己构建 MirAL(有关详细信息,请参阅 Mir 桌面环境示例)。

miral-examples 安装后你可以在 Unity 7 中以窗口的方式运行一个 Mir 服务端,然后在里面运行一个客户端(比如 gedit):

$ miral-shell&
$ miral-run gedit

这会给你一个(非常基础的)“传统” 的桌面窗口管理。另外你可以试下“平铺”窗口管理器:

$ miral-shell --window-manager tiling&
$ miral-run qterminal

或者(甚至更基础的)信息亭界面:

$ miral-kiosk&
$ miral-run 7kaa

这些 Mir 服务端都不会提供带有“启动器”、通知等的完整“桌面”。但是它们演示了不使用 Unity 8 使用 Mir 的可能。

MIR 解决的问题

X-Window 系统过去是,并且现在也是,一种提供了与计算机的交互的非常成功的方式。它提供了广泛的硬件和驱动程序一致的抽象。它支持许多桌面环境和图形用户界面工具包,并可以让它们在大量计算机上一起工作。

但它来自一个与当前电脑使用方式非常不同的时代,现在有一些问题是很难满足的,因为它需要支持老旧的系统。

在 1980 年,大多数计算机是由专家管理的大型事物,将它们连接在一起“是非常困难的”。在那个时代,开发软件的成本是这样的,一个程序“监听”另一个程序获得的好处是可以忽略不计的:此时几乎没有计算机,同时它们是独立的,它们所有的工作和金融无关。

X-Window 开发于这种环境下,通过一系列扩展,它已经适应了许多变化。但它本质上是不安全的:任何应用程序可以知道显示了什么(并影响它)。你可以编写像 Xeyes(用“眼睛”跟踪光标)或“Tickeys”(通过键盘来生成打字机噪声)等应用程序。现实是,任何应用程序可以跟踪和操纵几乎所有的事情。这就是基于 X 的桌面如 Unity 7、Gnome、KDE及其它桌面工作的方式。

X-Window 中窗口管理的开放性质不适合用于具有数百万计算机连接到因特网的世界,它们用于信用卡交易和网上银行,且由非专家管理,并自愿安装来自陌生人的程序。人们越来越意识到让 X-Window 适应新的安全性和图形性能的要求是不可行的。

现在至少有两个开源项目旨在提供一个替代品:Mir 和 Wayland。虽然有些人认为两者是竞争关系,但在很多领域,它们有共同的利益:它们都需要与那些之前假定使用 X11 的其它软件交互,并且许多引入支持的工作对两者都有益。

Canonical 的 X-Window 替换品 Mir,它只将信息暴露给它需要的应用程序(因此没有按键监听或光标跟踪)。它可以满足当前时代的需求,并可以利用现代硬件,如图形处理器。


via: https://insights.ubuntu.com/2016/11/28/mir-is-not-only-about-unity8/

作者:Alan Griffiths 译者:geekpi 校对:wxy

本文由 LCTT 组织编译,Linux中国 荣誉推出