分类: Linux & homelab

  • 解决Linux下RTL8111/8168/8411有线网卡工作不正常的问题

    解决Linux下RTL8111/8168/8411有线网卡工作不正常的问题

    时效性提醒:本文首次编写发布于7 年前。

    Linux下RTL8111/8168/8411这一系列的Realtek网卡可以说是通病了,在内核默认的r8169驱动下工作不正常,轻则不稳定,重则根本无法使用。今天就遇到了RTL8111H网卡无法使用的问题,ifconfig下可以看到对应设备,但MAC地址为全零(实际上这个问题可能是因为我的硬件有问题),导致网卡无法启用。

    参考这篇文章,得知可以通过安装官方的r8168驱动来解决,debian的源中有r8168-dkms这个软件包,直接安装就可以。但要注意,这个软件包依赖内核编译工具链,如果之前没有安装诸如gcc等编译工具的话,安装体积会比较大。这个软件包会自动去配置modprobe,使r8169不会再对你的网卡自动加载。

    除了通过这个软件包,也可以通过Realtek官网下载驱动来手动安装,这时可能就需要手动把r8169给blacklist掉了。

    后续:有趣的是,我的网卡实际上依然存在问题,MAC地址还是不正确,但r8168驱动会自动帮我瞎编一个。。。

  • 在Arch Linux中禁止生成/boot/initramfs-linux-fallback.img以节省/boot分区空间

    在Arch Linux中禁止生成/boot/initramfs-linux-fallback.img以节省/boot分区空间

    时效性提醒:本文首次编写发布于8 年前。

    在Arch Linux中linux软件包安装或更新时会生成两个initramfs:initramfs-linux.img和initramfs-linux-fallback.img,后者顾名思义,就是个后备的,而其文件大小也远大于前者,足足有28MB。

    对于将EFI分区直接挂在到/boot的分区方案而言(用于让UEFI直接加载内核而不用通过Bootloader),预装的Windows所自带的EFI分区只有100MB左右,这个巨大的initramfs-linux-fallback.img几乎要将它彻底占满。EFI分区可用空间过少会导致Windows10在进行大版本更新时出现“无法更新EFI系统分区”这样的错误,从而造成更新失败。

    究竟是什么导致了initramfs-linux-fallback.img如此巨大?我们可以看一看/etc/mkinitcpio.d/linux.preset文件的内容,这个文件是linux软件包对mkinitcpio提供的预设文件,控制了那两个initramfs的生成:

    # mkinitcpio preset file for the 'linux' package
    
    ALL_config="/etc/mkinitcpio.conf"
    ALL_kver="/boot/vmlinuz-linux"
    
    PRESETS=('default' 'fallback')
    
    #default_config="/etc/mkinitcpio.conf"
    default_image="/boot/initramfs-linux.img"
    #default_options=""
    
    #fallback_config="/etc/mkinitcpio.conf"
    fallback_image="/boot/initramfs-linux-fallback.img"
    fallback_options="-S autodetect"
    

    从最后一行可以看出,这initramfs-linux-fallback.img与initramfs-linux.img区别就是其禁用了autodetect钩子,而autodetect钩子的功能为“通过生成模块白名单缩减 initramfs 的大小,白名单中仅包含 sysfs 中扫描到的模块。”,也就是说,initramfs-linux-fallback.img的不同,便是其一股脑的将许多用不到的东西,也添加进了initramfs。

    也就是说,对于一般的桌面系统,这个initramfs-linux-fallback.img实际上就是个鸡肋,如果你的系统一直能正常启动,那你根本不需要它,可以删掉。但手动删除了initramfs-linux-fallback.img后,在每次内核更新时它都又会自动生成,要想一劳永逸,我们还需要修改刚才的/etc/mkinitcpio.d/linux.preset文件,删掉fallback的配置:(记着备份原版)

    # mkinitcpio preset file for the 'linux' package
    
    ALL_config="/etc/mkinitcpio.conf"
    ALL_kver="/boot/vmlinuz-linux"
    
    PRESETS=('default')
    
    #default_config="/etc/mkinitcpio.conf"
    default_image="/boot/initramfs-linux.img"
    #default_options=""

    这样,EFI分区就可以剩下一小半的空间,足够WIndows10正常更新。

  • 在KDE中实现Unity风格的顶部全局菜单与窗口按钮

    在KDE中实现Unity风格的顶部全局菜单与窗口按钮

    时效性提醒:本文首次编写发布于8 年前。

    Unity是Ubuntu 11.04至Ubuntu 17.04中默认的桌面环境,抛去其那标志性的dash启动器不谈,其另一个给世人留下深刻印象的,便是它那“多合一”的顶栏。

    在这个有些像MacOS风格的顶栏中,对于最大化的窗口,其包含了“一般的顶栏、窗口标题栏、窗口菜单栏”的三种功能。相比于Gnome2,其节省了“两个栏”的空间,对于绝大多数本就不高的16:9屏幕而言,这空间上的节省是很有意义的。在那个桌面特效火热的年代,Unity的这种设计无疑使别致而又优秀的。

    而随着C社跨平台战略的失败,CEO更替,几经辗转,留下了一个不再维护的Unity7和尚不成熟的Unity8,Ubuntu 17.10的重归Gnome,拉开了Unity衰亡的序幕。这个曾经让人眼前一亮的桌面环境,也终将在资本的熙攘中飘然逝去。

    然而这并不意味着我们就无法再体验到这种顶栏了,在强大且高度可定制的KDE5中,我们可以以自己的方式去实现它。

    1.全局菜单

    KDE5从5.9版本就开始支持QT程序的全局菜单,在5.12更是简化了设置,并在5.13中引入了对GTK程序的支持

    在5.12以后的版本中,只需要将“Global Menu”桌面部件放置在面板上,就可以自动开启全局菜单功能。而最简单的方法,便是直接在桌面上右键单击,然后选择添加面板-> 应用程序菜单栏

    然后你就会注意到,顶部多了一个细小的面板,尝试打开一个新的应用(已启动的应用需要重新关闭再打开才能生效),你会发现原本在窗口内的菜单栏消失了,而菜单出现在了刚刚创建的顶栏中。

    (注:如果你是5.12之前版本的用户,你还需要到系统设置中设置一下,请参见https://linux.cn/article-8210-1.html

    2.窗口控制按钮

    全局菜单是有了,但此时对于最大化的窗口,顶部就会出现“两条栏”,如何实现Unity的将最大化窗口的标题栏与顶栏“合并”的效果,就需要plasma5-applets-active-window-control这个插件。

    通过KDE自带的Discover应用市场就可以安装,Arch Linux可以通过AUR安装更新的版本,其他发行版的用户也可以到Git仓库地址上自行下载安装。

    安装完成后,将其添加到Global Menu部件的左侧,并打开改部件的设置,打开“Hide titlebar for maximized windows”选项,并对外观做一些调整,可以参考下图中我的部分设置:

    这样,当窗口最大化时,窗口的标题栏就会自动隐藏,转而使用顶栏上的按钮进行控制,达到了和Unity的顶栏一样的效果。

    最后,放置一些你喜欢的部件到顶栏的右侧,使它发挥一些一般顶栏的作用:

    由于KDE的高可定制性,我们的顶栏可以比Unity的跟加华丽,这也算是我们的“青出于蓝胜于蓝”了

    另外,如果你遇到了某些KDE应用在取消了全局菜单后,窗口中的菜单栏依然消失不见的情况,请尝试CTRL+M快捷键

  • KDE Plasma视频动态壁纸插件新版发布

    KDE Plasma视频动态壁纸插件新版发布

    时效性提醒:本文首次编写发布于8 年前。

    距离上次更新已经快一年的KDE Plasma视频动态壁纸插件,今天下午我终于想起来更新了!

    这次更新主要解决了视频在循环时的黑屏卡顿问题,让每次视频循环更加丝滑流畅,无缝衔接。当然由于循环时卡顿是QML的MediaPlayer本身的问题,对于一个插件而言也没法从根本上解决,于是乎我只能采用一种较为简单粗暴的方式:使用两个MediaPlayer交替播放

    这样在一个播放器播放时,另一个播放器就会有时间去加载。在每个播放器播放完一遍后,启动另一个播放器的同时,自己也开始播放下一遍并立即在开头暂停,这样每次播放完一遍后,另一个播放器都可以直接从暂停状态继续播放,而不是从停止状态加载一会才能开始播放。

    这样就解决了卡顿,但缺点也很明显,那就是会占用两个播放器的内存。一般视频还好,但若你心血来潮放个4k,那就可能会徒增几百MB的内存占用。于是乎,我在设置页面加了个开关,来让用户选择是否开启这个功能。

    https://github.com/WuSiYu/PlasmaVideoWallpaper

    走过路过给个star?反正不要钱(笑

  • 通过修改linux内核启动参数的方式来快速破解(重置)VPS或物理机的root密码

    通过修改linux内核启动参数的方式来快速破解(重置)VPS或物理机的root密码

    时效性提醒:本文首次编写发布于8 年前。

    这里的方法适用于你可以接触到机器bootloader(比如GRUB2)阶段的情况,比如你忘记了自己身边机器的密码,或者是vultr这类提供能看到启动过程的VNC画面的VPS,因为不知道密码要修改linux内核的启动参数,只能从这里下手。

    不管你用什么方法接触到了bootloader,这里以常见的GRUB为例,在GRUB界面读秒的时候按下e健,便可以中断读秒并进入当前启动项的编辑界面。

    将光标移动到加载内核那一行的末尾,也就是一般内容为linux /boot/vmlinuz-xxxxxx root=xxxxx那一行,然后在这里加入以下内核参数:

    init=/bin/bash

    init=参数的作用是指定根文件系统中init程序的路径,而此处填写的/bin/bash则使linux内核在挂载根文件系统后不去执行真正的init程序,而是去启动bash,这样我们就可以得到一个root权限的shell

    需要注意的是,有些环境下使用bash会在启动后卡死,如果你遇到了这种情况,请尝试使用init=/bin/sh作为替代。

    接下来按下F10来让GRUB启动这个修改后的启动项,一会后就能看到屏幕上出现了一个root的shell提示符,在这里我们就能以root权限来执行各种命令了,但此时的根文件系统往往还只是只读(ro)的状态,为对系统进行修改,我们需要使用下面的指令来以读写(rw)模式重新挂载根文件系统:

    mount -o rw,remount /

    接下来我们就可以对系统为所欲为了,使用passwd指令即可直接更改root密码。

    做完所有你想做的事后,由于没有真正的init进程,你无法通过shutdownreboot等指令来重启系统,所以我们需要更加简单粗暴一些,在执行几次sync指令确保文件缓存已写回磁盘后,使用exit潇洒地结束掉bash——这个目前系统中唯一的进程,留下一个一脸蒙蔽的Linux内核在那里kernel panic。

  • KDE Plasma video wallpaper 视频动态壁纸

    KDE Plasma video wallpaper 视频动态壁纸

    时效性提醒:本文首次编写发布于9 年前。

    之前觉得wallpaper engine能用视频当桌面壁纸十分有趣,于是KDE Plasma 5编写了一个wallpaper的qml组件,使Linux + KDE下也能实现用视频当动态壁纸。由于使用了qml和plasma的API,只支持KDE大法,本人在Archlinux上的KDE Plasma 5.91测试通过。自带多语言文件,根据你的系统语言在设置里会自动切换中英文。

    可以设置音量,要静音就设置成0即可。不看桌面时,单击壁纸可以暂停视频播放。

    Github:https://github.com/WuSiYu/PlasmaVideoWallpaper

    百度贴吧地址:http://tieba.baidu.com/p/4974430821 (还加了精233)

    安装方法

    下载解压,进入文件目录后依次执行:

    cmake .
    make
    sudo make install

    会安装在系统路径中,插件:/usr/local/share/plasma/wallpapers/org.kde.plasma.videowallpaper/语言文件:/usr/local/share/locale/zh_CN/LC_MESSAGES/plasma_wallpaper_org.kde.plasma.videowallpaper.mo,如果想安装在用户目录,可以在make后(make会生成一个json文件,是必须的),将package文件夹里的文件(插件)全部复制到~/.local/share/plasma/wallpapers/随便起个名字/中。

    重启plasmashell或直接重新登陆后,在壁纸类型中选择视频Video(视你的语言而定),选择视频文件,即可看到效果。

    目测不是很占CPU,在E3-1231 v3处理器下,播放1080p视频,CPU占用约10%,暂停后几乎不占资源。

    注:如果由于一些玄学的问题,播放突然停止并黑屏,尝试随便该一下视频文件路径(比如随便加个字符),点应用,然后再改回来,再应用,就能恢复。发生概率很小,应该是Plasma的问题,这个插件代码很简单,也不应该会出什么bug

  • 使用mount的offset参数挂载包含多个分区的磁盘镜像中的指定分区

    使用mount的offset参数挂载包含多个分区的磁盘镜像中的指定分区

    时效性提醒:本文首次编写发布于10 年前。

    首先,本文是适用于磁盘镜像的,不同于分区镜像,磁盘镜像一般包含多个分区和分区表等信息,简而言之,磁盘镜像分区镜像可以理解为/dev/sda/dev/sda1的区别。对于分区镜像,直接用mount挂载即可。

    虽然有自动化挂载磁盘镜像的工具,不过还是比较麻烦。其实,既然磁盘镜像中包含分区,那么我们就可以使用offset(偏移量)的方式,直接让mount去访问并挂载磁盘镜像中特定分区。

    screenshot_20161203_115951

    (更多…)

  • Archlinux中pacman的一些“垃圾清理”命令

    时效性提醒:本文首次编写发布于10 年前。

    今天重启一下Arch,发现系统简直如三路全崩,mysql崩了,sddm崩了,该崩的崩了一大堆。我心说滚挂也不至于挂成这样吧。。。

    然后查log发现原来是/分区爆了。。。剩余空间0字节,服务想写入个log都不行,不崩才怪

    于是执行了这两条指令,成功释放了5GB的空间。。。

    清除系统中无用的包

    sudo pacman -R $(pacman -Qdtq)

    清除已下载的安装包

    sudo pacman -Scc
  • 多种方法解决开机显示grub rescue>_的故障

    多种方法解决开机显示grub rescue>_的故障

    时效性提醒:本文首次编写发布于10 年前。

    grub rescue>_,即GRUB启动管理器的救援模式,可以理解为一个残缺的GRUB,通常在GRUB无法找到其相关文件时出现,一般是由分区变更引起的。

    用4个字概括就是:引导挂了~

     

    下面两张方法适用于linux的分区还在的情况,如果你是希望删除linux而删掉了linux,请看最后一种方式。

    下面两张方法中,部分命令仅针对deb系发行版,其他发行版类似。

    法一:使用LiveCD启动并重新安装GRUB

    这种方法最为简单,不用输入繁琐的GRUB命令。

    首先LiveCD启动,进入Live系统,将硬盘上linux的/分区挂载到Live系统中例如/mnt的地方:

    sudo mount /dev/sdaN /mnt          #按实际情况替换N,如果你的启动磁盘不是sda,也请替换为你的启动磁盘

    如果单独分了/boot,则一并挂载,例如:

    sudo mount /dev/sdaM /mnt/boot     #按实际情况替换M,如果你的启动磁盘不是sda,也请替换为你的启动磁盘

    然后重新安装GRUB:

    sudo grub-install --root-directory=/mnt/ /dev/sda

    若看到类似如下的输出,则表示成功完成修复:

    Installing for i386-pc platform.
    Installation finished. No error reported.

    法二:先将GRUB恢复到正常模式,然后进入Linux重新安装GRUB

    既然GRUB找不到他的文件,那么我们就手动加载即可,救援模式其实就是一个支持的命令有限的GRUB命令行,我们可以在其中执行一些命令。
    先输入以下命令:

    ls

    GRUB会列出所有的磁盘和上面的分区,如:

    (hd0) (hd0,msdos5) (hd0,msdos1) (hd0,msdos2)

    然后就一个分区一个分区的试,看看那个是linux的/分区,如果你当分了/boot,则要找/boot分区
    如果/boot没有单独分区,用以下命令:

    ls (hd0,msdosN)/boot/grub

    如果/boot单独分区,则用下列命令:

    ls (hd0,msdosN)/grub

    正常情况下,会列出来一大堆文件,很多文件的扩展名是.mod和.lst和.img,还有一个文件是grub.cfg。假设找到(hd0,msdos2)时,显示了文件夹中的文件,则表示我们要找的就是这个分区。

    然后我们要让GRUB去加载之前它没有加载的文件
    下面是/boot没有单独分区的命令:

    grub rescue>set root=(hd0,msdos2)
    grub rescue>set prefix=(hd0,msdos2)/boot/grub
    grub rescue>insmod /boot/grub/normal.mod

    下面是/boot 单独分区的命令:

    grub rescue>set root=(hd0,5)
    grub rescue>set prefix=(hd0,5)/grub
    grub rescue>insmod /grub/normal.mod

    然后调用如下命令,就可以看到GRUB的菜单了。

    grub rescue>normal

    然后进入Linux系统,执行:

    sudo update-grub             #更新引导菜单,非deb系的发行版可能不是这个命令
    sudo grub-install /dev/sda   #如果你的启动磁盘不是sda,请替换为你的启动磁盘

    至此,修复完毕。

    法三:使用PE系统直接安装Windows的启动管理器

    这种方法适合已经删除了Linux分区,或者正准备删除Linux分区,然后回到Windows系统的人。

    首先你需要一个装在U盘上的PE,网上一搜全是,个人比较推荐这个还算比较干净的PE:http://www.wepe.com.cn/

    然后启动PE系统,里面一般有个修复Windows引导的工具,运行即可。

  • Linux 在4K屏幕下的界面缩放设置

    Linux 在4K屏幕下的界面缩放设置

    时效性提醒:本文首次编写发布于10 年前。

    最近趁着京东特价,入了个23寸的4K显示器。由于4K的分辨率是3840*2160,是1080P的整整4倍,像素密度十分高,但整个屏幕的大小却和一般的1080P显示器一样大,这就造成了如果还是按照原来的显示方式,界面会变得非常小,根本看不了,所以需要把界面的尺寸放大。对于我的分辨率,放大2倍正好,在windows下缩放是自动完成的,但有些字体还是不太清晰,下面介绍如何在linux下启用缩放。

    (点击图片查看完整尺寸4k屏幕截图)

    一开始,我尝试桌面环境的显示设置中直接启用缩放,后来发现总会有各种各样的问题,最终选择了通过开机时设置qt和gtk的环境变量来实现缩放:

    在创建一个开机会执行的脚本文件,如/etc/profile.d/hidpi.sh 脚本文件的内容如下:

    export QT_AUTO_SCREEN_SCALE_FACTOR=1
    export GDK_SCALE=2

    然后重启即可,如果鼠标指针过小,到桌面环境的设置里设置一下了可以了。

  • 网易云音乐Linux版体验

    网易云音乐Linux版体验

    时效性提醒:本文首次编写发布于10 年前。

    一直把linux作为开发环境,而写代码时没点音乐怎么行呢?但网易云音乐那缓慢的基于flash的web端简直不能忍,而现在这些都不是问题了,因为在几个月前就说要发布的网易云音乐Linux客户端最近终于发布了!

    Arch Linux用户可以直接从aurarchlinuxcn中安装,debian系用户请到官网下载,其他发行版请尝试直接解包安装或干看着眼馋23333

    顺便说一下,如果出现无法播放的问题,请尝试关闭其他程序,因为有可能是其他程序占用了。linux下的音频驱动,你懂得~

  • 服务器外网无法访问?可能是网关设置问题!

    服务器外网无法访问?可能是网关设置问题!

    时效性提醒:本文首次编写发布于10 年前。

    一个在内网的服务器出现如下症状:使用内网地址访问正常,但无法使用外网地址访问,路由器等设备均已配置正确。

    起初因为内网访问是正常的,所以直接忽略了网络配置不正确的可能。但在更新时发现,这台服务器也无法访问外网。

    自然而然的想到了路由的问题,使用route命令查询后果不其然:连default都没有设置,就设置了个192.168.1.0,也就能在内网玩玩!

    之后检查 /etc/network/interfaces发现原来是少写了个auto enp3s0,应该加上这个导致的网关的问题,加上之后重启(也可以只重启网络服务)就没有问题了,一切正常。

     

    PS:那个link-local大可不必管它,那个叫做链路本地地址,似乎也没什么用,wikipedia上连它的中文页面都没有。。。

    顺便附一张IPv4保留地址全表,截自wikipedia:

  • 在Virtualbox下玩windows平台的opengl游戏

    时效性提醒:本文首次编写发布于10 年前。

    最近迷上了一个算是太空射击类游戏,叫reassembly,制作精良,自由性也非常的高。

     

    但很可惜,这款游戏并没有linux版,而且用wine也跑不起来。不过好在,这款游戏使用的是opengl,而且显存占用也不大。这就意味着,简单的使用virtualbox自带的3D图形加速功能,就可以使这个游戏流畅运行。

    (更多…)

  • SMCL – 使用Python编写简单Minecraft启动器

    时效性提醒:本文首次编写发布于10 年前。

    Simple Minecraft Launcher,一个使用python3编写的轻量级Minecraft启动器。

    代码见:http://ideone.com/aVWnVh , Github地址:https://github.com/WuSiYu/smcl。直接不加任何参数运行脚本会显示帮助和用法,这里就不再多说了。

    下面介绍原理:

    (更多…)
  • Apache2配置虚拟主机(VirtualHost)快速教程

    时效性提醒:本文首次编写发布于10 年前。

    Apache2的一个基本的虚拟主机配置范例如下:

    <VirtualHost *:80>
    
        # 站点域名
        ServerName wusiyu.me
    
        # 需绑定更多域名则启用下面这句
        # ServerAlias new.wusiyu.me www.wusiyu.me
        
        # 站点的Web根目录
        DocumentRoot /var/www/wusiyu.me
    
        # 站点管理员邮箱
        ServerAdmin webmaster@localhost
    
        # 站点的日志
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
    
    </VirtualHost>

    理论上将这些内容直接扔在apache配置文件里即可,不过为了管理方便我们一般都把每一个虚拟主机都存成一个配置文件,并放在一个目录中。debian系的发行版默认就已经这样做了。

    如果你用得不是debian系发行版,或者是自己编译安装的apache,可以在apache的主配置文件中加入这句来使其加载其他目录下的配置文件:

    IncludeOptional sites/*.conf

    配置完后,apache的服务restart或reload即可:

    service apache2 reload