分类 Linux 下的文章

视频点此

整理自Archwiki,Install archlinux from SSH。原文已经过于陈旧,但是描述的更加详细,值得一看。

在以下情况安装Arch...

  • 没有显示器的HTPC(比如一个SDTV)。
  • 一个在另外城市、省份、国家的PC。(朋友的家、父母的家等等)
  • 一个你想要远程安装的PC,比如从一个可以方便的从 Arch Wiki 复制/粘贴的自己的工作站上远程安装。
注意: 前2步需要直接的物理控制PC。显然,如果PC在别处,就需要另外一个人的协调。
  1. 使用最新的安装媒介启动PC到Arch的live环境。

    现在你的眼前应该可以看到[root@archiso~]#的提示。

  2. 启动SSH进程:systemctl start sshd
  3. 设定一个建立ssh链接需要的root密码;默认root的arch密码是空的。使用命令passwd
  4. 在另一台电脑上,通过ssh连接到上面的机器中:ssh root@ip

从现在开始尽管我们在本地,也可以通过我们自己的键盘控制远程的机器显示安装画面了。

视频点此

先说结果:在官网将Win10对应驱动更改为DCH版本后,Windows对比Arch系就一样了;更改之前或更早的Windows版本,Arch系更容易;对于其他Linux分支,何时都是更困难的。

这次的内容主要是回答之前有朋友问到的问题。所以主要来看Manjaro和Debian 10。

不过,为了回答这个题目,先来简单解释一下Windows要怎么装。

装好Win10后,Windows Update会自动安装DCH版本驱动。待驱动安装完毕,去往Windows应用商店搜索安装英伟达控制面板。安装结束。

其他版本的WIndows,则需要去往英伟达官网,在驱动中心下载后安装。

好了,Windows的安装方法说完了,现在来看Manjaro。

问我这个问题的朋友的原话是

nvidia-dkms装不上

可能是因为用了自定义内核吧所以需要这个。不过manjaro同Arch是不同的,它优化并维护着自己的驱动仓库,所以不需要也没必要考虑nvidia-dkms。Manjaro安装只需三步:

  1. 打开终端
  2. 输入:sudo mhwd -a pci nonfree 0300
  3. 回车

不必嫌难,因为不需要你理解什么意思。只需照着敲进去,回车,你的驱动和控制面板便安装好了。

哦,当然,也可以使用图形界面,但是可能没有终端直接:

  1. 打开设置
  2. 找到Manjaro设置管理器,打开
  3. 切换到硬件配置
  4. 对NVIDIA项目,勾选non-free
  5. 点击Install

好了,简单地操作到此结束。接下来看困难的Debian10。这是另一位朋友问的,原话如下

1.nVidia开源驱动与闭源驱动的bumblebee配置及xrandr配置

2.运行nvidia-xconfig后重启黑屏的原因及解决办法

3.显卡切换面板支持怎么弄? (目前Debian10,i5-8250u+MX250,一直无法切换显卡,只能用显卡运行程序(optirun))

先来说闭源驱动安装。

  1. 启用闭源源——我没写错。Debian的源分为开源和闭源两类,默认情况下用户只能检索到开源程序。所以这里需要启用“闭源”源

    1. sudo模式编辑/etc/apt/sources.list
    2. 在每一行后面增加contrib non-free
    3. 保存后,更新缓存:sudo apt update && sudo apt upgrade
  2. 安装头文件——黑屏的一个可能就因为这里:sudo apt-get install module-assistant
  3. 编译它们:sudo m-a prepare
  4. 安装探测程序查看自己需要装哪个驱动包

    1. 安装nvidia-detect:sudo apt -y install nvidia-detect
    2. 运行nvidia-detect,得到推荐选项。如:

      # nvidia-detect
      Detected NVIDIA GPUs:
      01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP106 [GeForce GTX 1060 6GB] [10de:1c03] (rev a1)
      
      Checking card:  NVIDIA Corporation GP106 [GeForce GTX 1060 6GB] (rev a1)
      Your card is supported by the default drivers and legacy driver series 390.
      It is recommended to install the
          nvidia-driver
      package.
  5. 根据推荐,输入命令完成驱动的安装:sudo apt install nvidia-driver

然后,bumblebee我以前专门说过,这里便不赘述了;而xrandr、nvidia-xconfig与bumblebee是一种“互斥”的状态,如果bumblebee配置好了则不需调整xrandr及nvidia-xconfig,否则需要。而xrandr的写法我以前同样提过,所以请参考安装KDE桌面的内容,出现在大概在12分钟位置。

这也是我现在宁可挖坑也不把一次的内容做的很多的原因:标题表现不出来涉及到的所有内容,就很麻烦。

至于nvidia-xconfig,只要xrandr配置正常,nvidia-xconfig可能不需要单独生成。如果不行,也只需终端sudo运行一次便会自动生成配置文件,此时应该就不会有什么问题了。

如果xrandr和nvidia-xconfig都配置过了但还是黑屏,那么问题可能出现在gdm上面因为这里貌似有一个bug但没有解决。尝试换成sddm或lightdm,或者使用bumblebee去代替xrandr和nvidia-xconfig

第三件事儿,很不幸,Debian现在是没有切换面板的。也就是说,要么完全使用闭源驱动提供的PRIME,即无论何时都使用独显驱动,要么就是大黄蜂,在需要使用独显的时候通过optirun实现独显加载。

到这里,问题便说完了。顺便呢,也希望能让你发现Linux和你印象中的差别吧。同时呢,也希望你能意识到:发行版的选择其实也是门学问。

大多数现代Linux桌面系统都预装了Nvidia驱动程序——一种新的开源图形设备驱动程序。因此,一般不需要安装闭源驱动——只要没有那么强烈的独显性能需求。

但如果想完全发挥独显的性能,闭源驱动 便派上用场了。一些Linux发行版提供了预打包的专有驱动程序放在了源中,使得安装驱动程序非常容易。

也可以自行前往英伟达官网获取驱动,然后手动安装。但这样可能需要更多的手工干预,所以只要硬件不是特别的新 ,通常源中的版本已经足够了。

再次警告

从第三方源(如Nvidia.com或通过PPA存储库的专有Nvidia驱动)安装Nvidia驱动程序可能会导致系统不稳定。因此,如果不是必须的,建议继续使用开源的新版本驱动程序。

如何逐步安装最新的Nvidia专有驱动

1、检查Nvidia VGA型号

第一步是检查Nvidia VGA卡型号。对于大多数Linux发行版,通过下述代码获得

$ lspci -vnn | grep VGA
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP106 [GeForce GTX 1060 6GB] [10de:1c03] (rev a1) (prog-if 00 [VGA controller])

从上面的输出可以看出我们的系统配备了 GTX 1060 6GB 显卡。

2、检查当前安装的VGA驱动程序

使用下面的命令查看当前加载的VGA驱动程序以及VGA卡型号的信息:

$ lspci -k | grep -EA3 'VGA|3D|Display'
01:00.0 VGA compatible controller: NVIDIA Corporation GP106 [GeForce GTX 1060 6GB] (rev a1)
        Subsystem: ASUSTeK Computer Inc. GP106 [GeForce GTX 1060 6GB]
        Kernel driver in use: nouveau
        Kernel modules: nvidiafb, nouveau

可以看到,目前使用的是nouveau 驱动程序和内核模块。如果安装有专有驱动,则上述命令的输出可能如下所示:

$ lspci -k | grep -EA3 'VGA|3D|Display'
01:00.0 VGA compatible controller: NVIDIA Corporation GP106 [GeForce GTX 1060 6GB] (rev a1)
        Subsystem: ASUSTeK Computer Inc. GP106 [GeForce GTX 1060 6GB]
        Kernel driver in use: nvidia
        Kernel modules: nvidiafb, nouveau, nvidia_drm, nvidia

3、检查当前的Nvidia驱动程序版本:

在继续进行最新的驱动程序安装之前,请检查当前版本的位置:

$ nvidia-settings --version
nvidia-settings:  version 430.50

4、接下来安装专有驱动:

暂不讨论手工安装和GUI安装

几乎所有操作都要求sudo权限

对于Intel和NVIDIA双显卡,可能需要额外配置(bumblebee/xrandr等)

接下来的方法适用于

完成后重启,安装结束。

我曾一度认为我不需要密码托管这种软件。

直到我发现我无论如何也想不起来北京摇号官网的登录密码了。

使用现成的第三方服务很好,但一来要注册,二来有些服务会收费。

那还不如自己部署一个。

其实可供自己部署的不算很多,我最终选择了bitwarden

Bitwarden 是一款开源密码管理器,它会将所有密码加密存储在服务器上,工作方式与 LastPass、1Password 或 Dashlane 相同。

官方的版本搭建对服务器要求很高,搭建不容易,github上有人用 Rust 实现了 Bitwarden 服务器,项目叫 bitwarden_rs,并且提供了 Docker 镜像,这个实现更进一步降低了对机器配置的要求,并且 Docker 镜像体积很小,部署非常方便。这个项目目前在github也有2k的star,所以说用的人还是有不少的。

此外,官方服务器中需要付费订阅的一些功能,在这个实现中是免费的。下面简单记录怎么搞。

一、基本组件

  1. 拉取镜像:docker pull bitwardenrs/server:latest
  2. 启动:docker run -d --name bitwarden -v /bw-data/:/data/ -p 6666:80 bitwardenrs/server:latest

    1. -v 定义一个保存数据的文件夹
    2. -p 定义一个监听端口

如果仿照上面的步骤,设定了6666端口的话,现在浏览器输入ip:6666可能有几种情况:

  • 访问成功
  • 弹出logo,但登陆界面不能加载
  • UNSAFE_PORT

这是因为项目要求https。所以要么申请一个证书,要么自签名一个证书。我则使用了另一个方法:套在cloudflare的解析上,依靠cf的证书实现。但这些都需要你拥有一个域名。

域名申请就不细说了,下面主要说说如何把域名和服务绑定上——反向代理。

二、域名绑定服务

  1. 我有宝塔,所以直接宝塔新建一个站点,域名自然是要绑定到这个服务的域名
  2. 建立后,在站点修改窗口,点击反向代理 - 添加反向代理

    1. 代理名称任意
    2. 目标URL写入http://127.0.0.1:6666(端口是之前开启docker时候配置的)
    3. 提交

Cloudflare端,将https相关的设置打开

  1. DNS标签下,做解析和开启缓存(箭头穿过小云彩而不是绕过)
  2. SSL/TLS - Overview标签下,加密模式选择Flexible
  3. SSL/TLS - Edge Certificates标签下,启用Always Use HTTPS

三、建立自己的用户

现在,访问域名,应该能正常显示了。按提示建立自己的用户即可。

四、关闭注册

如果并没有公开服务的打算的话。

  1. 停止容器:docker stop bitwarden
  2. 删除容器:docker rm bitwarden
  3. 启动容器,加入禁注册参数-e SIGNUPS_ALLOWED=false

五、使用

可以从浏览器通过域名来管理自己的账户。

密码自动填写、自动保存等通过软件实现:

  • PC中,Chrome有插件,可管理浏览器用户名密码
  • 安卓中,有APP,可全局监控(类似谷歌的密码管理)
  • iOS中,有APP,可用范围不知道

伴随着我服务器的切换,最近把Nextcloud云盘从服务器上头下线了。它确实很强大,但强大的同时也意味着臃肿。而我只需要这臃肿中的同步功能。而它的同步又是全量同步,且不好设置需要同步的文件夹,这就偏离了我自己的需要了。所以一句话,我只需要一个可以增量同步我指定的任意文件夹下的内容的工具。

曾经使用过坚果云。但是每月1G上载3G下载的流量限制让我最终放弃了它。

Dropbox,印象里很不错。但是用它还得翻墙,不值当的。

OneDrive,微软家的东西,很好用。但是速度实在是不稳定。

最终,还是在服务器上面搭建了一个同步工具——Syncthing

这是一个开源工具,据说类似于BTSync的开源实现(这个我并没有考证)。正好符合我的需求:简单、增量同步。不过说是“同步盘”,其实更像是两个朋友间“共享文件夹”。因为这个工具,无论是服务器上还是终端上,安装的都是相同的程序,只需事先添加对方到列表,即可开始文件夹的“共享”之旅。下面具体说说怎么搞。

不必纠结下面的步骤哪个是服务器的哪个是客户机的。因为步骤都一样。

一、服务器 & CentOS

我更倾向于用Docker安装。因为手工部署需要人工把服务文件复制到systemd中,如果更新的话还需要再操作一遍。对于服务器,使用其他方式安装还需要额外配置,就麻烦了。Docker方法如下:

  1. 拉取镜像。关于这个工具的镜像有很多,其中我更倾向于使用 linuxserver/syncthing。官方的有权限问题,可能是我的操作有误吧…docker pull linuxserver/syncthing
  2. 建立容器。使用命令

    docker create \
      --name=syncthing \    # 容器名称
      -e PUID=1000 \        # UserID
      -e PGID=1000 \        # GroupID
      -e TZ=Asia/Shanghai \    # 时区
      -e UMASK_SET=022 \    # 文件夹权限
      -p 8384:8384 \        # 对外端口映射 - GUI端口
      -p 22000:22000 \        # 对外端口映射 - 协议端口
      -p 21027:21027/udp \    # 对外端口映射 - 本地发现端口
      -v /path/to/appdata/config:/config \    #文件夹映射 - 程序文件
      -v /path/to/data1:/data1 \    # 文件夹映射(自定义数据文件夹)
      -v /path/to/data2:/data2 \    # 文件夹映射(自定义数据文件夹)
      --restart unless-stopped \    # 始终重启容器
      linuxserver/syncthing

    其中,参数nameTZ-p-v都可以根据自己的情况进行修改。对于这几个端口,保证本机相应的端口没有被占用且没有被防火墙限制即可。

  3. 启动容器docker start syncthing

    现在,你就可以打开ip:8384映射出来的端口号在图形化界面中设置了。其中,ip地址需要使用:

    • 本机,使用地址127.0.0.1
    • 服务器,使用地址服务器公网ip

二、Debian&Arch安装

源中已提供,直接安装对应的包即可。其中,服务器端和客户端都可使用包syncthing,客户端亦可以使用syncthing-gtk获取一个显示在托盘的同步状态标志及便捷的设置入口和服务起停入口。

  • Debian系

    apt install syncthing    # 安装
    systemctl enable syncthing    # 设置服务开机启动
    systemctl start syncthing    # 启动服务
    # 如果是客户机,可使用下面的命令代替上面的
    apt install syncthing-gtk
  • Arch系

    pacman -S syncthing    # 安装
    systemctl enable syncthing@你的用户名    # 设置服务开机启动
    systemctl start syncthing@你的用户名    # 启动服务
    # 如果是客户机,可使用下面的命令代替上面的
    pacman -S syncthing-gtk

对于本地机器,如果安装的包syncthing,则可打开127.0.0.1:8384进入图形化的设置界面;如果是syncthing-gtk,则找到程序syncthing-gtk,运行即可。

对于服务器,再进行下述操作:

  1. systemctl stop syncthing停止服务
  2. 找到syncthing文件夹,编辑config.xml,将<address>127.0.0.1:8384</address>修改为<address>0.0.0.0:8384</address>

三、GUI设置

1、服务器端

操作 - 设置,打开设置界面。

  • 常规:

    • 如果不是用Docker 安装的,那么请确保默认文件路径的合理性
  • 用户图形界面

    • 设置一个 图形管理界面用户名
    • 设置一个 图形管理界面密码
  • 连接

    • 保证勾选了启用NAT遍历
    • 保证勾选了全球发现

2、客户端

安装的syncthing,则点击操作 - 设置,打开设置界面。

  • 常规:

    • 如果不是用Docker 安装的,那么请确保默认文件路径的合理性

安装的syncthing-gtk,则打开窗口后点击右上齿轮 - 守护程序设置,打开设置界面。

  • 取消其中的全部勾选

四、开启同步之旅

  1. 服务器端的设置界面,点击操作 - 显示ID,复制弹出窗口中的字符串
  2. 本机中,选择添加设备,ID粘贴刚复制的字符串,地址填入服务器ip:22000(或者docker容器,22000映射的端口号),确定
  3. 等一会儿,服务器会弹出添加请求,通过
  4. 本机添加共享文件夹。在共享给设备中,勾选刚添加的服务器,确定
  5. 等一会儿,服务器会弹出建立共享文件夹请求,通过
  6. 共享已联通。同步正式开始了

在新的笔记本上头安装好Arch后,最近几次突然出现了个奇怪的问题:

系统检查完成后,sddm总是起不来。但系统是已经启动成功的,因为我可以切换到tty界面进行操作。但尝试在tty界面输入sddm,却给我返回错误:

Failed to read display number from pipe

但是,通过systemctl restart sddm重启一次服务,却又可以正常启动了,直到下一次重新启动需要再进行一次这个步骤。

真是头一次遇到这种问题……

后来在Archlinuxcn的群组里搜索了一番,看到了一个解释,说是熵不够。可以通过命令

cat /proc/sys/kernel/random/entropy_avail

来查看熵值。想要sddm启动需要差不多2000的样子。

我照做了。然后得到了刚启动时候的熵值:20

虽然到了也没明白为什么sddm启动要检查熵,但是这很明显差得太多了,那问题应该就是这里了。

有没有什么办法能提高熵的值呢?还真有。

pacman -S rng-tools
systemctl enable rngd

重启。

真好,刚启动就2700多了呢。

但是,对sddm启动的解决卵用也没有…

后来又看到一个,大概意思就是:

kabylake架构的CPU,要把驱动加入内核

来试一下:

  1. 安装intel驱动:pacman -S xf86-video-intel
  2. 编辑/etc/mkinitcpio.conf,在MODULES=的括号内增加intel_agp i915
  3. 重新生成initramfs。以防万一,先不做覆盖:mkinitcpio -c /etc/mkinitcpio.conf -g /boot/linux-i915.img
  4. 重新启动。在grub处按 e 编辑启动项,将 initramfs-linux.img 位置更改为 linux-i915.img,按F10启动

啊…终于成功了。虽然熵才30多,但sddm也终于能一次起来了。

既然启动成功了,就可以把这个自定义的名称更改成initramfs-linux.img并覆盖原先的镜像了。不过为了安全,把原先镜像做个备份大概也是有必要的。

不过,虽然解决这个问题了,但我到底也没闹清楚为什么这种架构的CPU要启用KMS,更不明白为啥提高熵也能解决一部分sddm卡住的问题…

不过还行,从解决到现在,驱动啥的都滚了几个版本了,找时间去掉这俩模块再试一下