标签 redhat 下的文章

视频点此

如果你需要在Linux中使用Xbox one无线手柄,那么这个软件包或许可以帮助到你。

当然如果你用的是最早的xbox手柄,或者有线连接Xbox one使用的话,那么在Linux下面是可以开箱即用的。唯独对于蓝牙或者接收器方式连接会出现问题。这时我们只需安装一个包:xpadneo。这是针对Linux平台的xboxone开源驱动,我用了很长时间了,通过steam的手柄设置来分配游戏中按键是很完美的,游戏用的延迟也非常低,是一个完全可以使用的开源驱动。

直接去往它的GitHub,就可以看到安装教程。如果你想的话,直接全部下载,然后终端执行./install.sh即可。但如果你跟我一样习惯于通过包管理器统一管理的话,那对于arch用户,直接通过aur即可安装,opensuse用户,通过opi搜索xpadneo,选择不带后缀的选项,再选择home:FrauHolle源即可自动安装。ubuntu好像可以通过apt直接安装。待安装完成,重启,便可以通过蓝牙正常连接xboxone手柄了。

第一期第二期

前两天收到了这么一条私信。

这倒是提醒了我一个很早就想分享的一个小技巧,如何简单的使用不对应自己发行版的安装包程序。但在这之前想先跟各位铺垫一些内容:Linux安装包,或者说,一个二进制程序的安装包实际上在做什么。

macOS软件的安装过程能更好地展现。打开一个下载好的安装包,会看到一个应用程序图标和一个applications文件夹。

安装程序的话,只需将应用图标拖到applications文件夹上面,然后我们就可以在访达的应用程序文件夹下看到这个应用。在macOS中,应用程序文件夹的路径是固定的/Applications, 而安装程序的applications文件夹图标下面有一个快捷方式的小箭头,查看它的属性的话就可以看到,它指向的就是我们电脑中的应用程序文件夹(关注下图原身指向的路径)。

到此就可以看出,macOS应用的安装过程其实就是把应用复制到了应用程序文件夹中。而如果我们右键应用程序—显示包内容,还可以查看这个应用所拥有的各种文件。因此总的来说,macOS应用的安装过程其实就是把这个应用程序的文件夹复制到了一个指定的位置而已。

由此,我们可以类比一下Windows的安装程序。它与macOS的过程其实是一样的,只不过Windows允许用户自己选择应用程序的这一堆文件要复制到哪里,然后自动帮用户进行复制操作(当然,对于Windows,安装程序可能还需要进行注册表编辑的操作)。

那么Linux的安装包呢?

由于Linux更多的是在用包管理器进行操作,所以Linux用户可能很少去关注应用的下载和安装这两个前期过程。这时我就要推荐你去看看我之前的使用obs和aur分发软件包的内容了。

你理解了这个就能明白,Linux无论是包管理器还是手工下载的安装包,其软件安装过程与Windows和macOS依然是一样的。只不过使用包管理器安装,全程不需要用户手工干预,而使用下载的安装包安装,最多也只需要用户手工进行下载的过程而已。

不过,虽然Linux安装的过程本质上也是在往系统中复制文件,但与另外两个系统不同的是,Linux会把不同职责的文件放到对应职责的文件夹中,而且对于被很多程序共同需要的文件,Linux很可能会把这个文件当作一个单独的程序,就不再附加在其他程序的安装包中了。也就是说,Linux是以文件功能为视角来归类文件而不是以应用来归类,这就使得一个应用的文件会被放到多个文件夹中,且可能需要配合安装其他的一些共有组件包才能让程序正常运行。而这种互相关联的情况,就是平时提到的依赖。

但并不是只有Linux有依赖问题,windows同样存在,只有macOS才近似于没有。而Linux比较明显的原因就在于它把文件归类得太细致了。举个现实中不存在的例子:假如说三大操作系统都有dx组件,且现在需要安装的软件要求系统中有d3dx9_25才能正常运作。那么对于linux来说,我除了要安装这个软件之外,可能还需要另行安装一个名字叫d3dx9_25的软件才能实现运行;而windows虽然也需要安装dx的安装包,但它的dx安装包里边会包括了d3dx9_1至d3dx9_30所有的文件;至于macOS,d3dx9_1至d3dx9_30系列文件可能会直接包括在macOS的操作系统中打包提供,或者直接包括在了程序的安装包中,总之不会要求用户再另行安装一个其他的软件。而假如之后又有一个程序需要使用d3dx9_20,windows由于前一次安装时已经部署了dx系列所有的文件,它就不会再要求额外安装了;但linux还需要再额外安装一个包括了d3dx9_20的软件才能实现运行。由此让用户感觉:哇,Linux依赖问题太麻烦了。

为了不让用户自己解决上面这种额外安装的问题,Linux出现了包管理器这种东西。自然,为了顺应不同的包管理器,就产生了不同格式的软件安装包。但万变不离其宗,安装程序的本质依然是在复制文件进系统,没有太多麻烦的事儿,所以手工部署一个程序是可实现的。相对于包管理器来说,我们要解决的仅仅是如何手工组织文件,以及依赖问题。接下来,就以粤政易为例,实际尝试一下手工安装一个应用程序。

根据私信的描述,粤政易本身提供了.deb形式的安装包,但其使用的archlinux中没有对应的软件包可以使用。因此,唯一的突破口就是官方提供的.deb安装包了。

直接下载deb包,通过归档管理器打开——这个可能是Linux和macOS相对于Windows安装包又一个优势所在:前者的安装包仅仅是一个压缩包,因此可以直接用归档管理器打开查看。

可以看到其中包括的文件,这也是一个Debian安装包的基本构造。我们现在是为了可以手工安装,所以这里直接顾名思义,选择最靠谱的data.tar.xz——数据tarball打开。

如果你使用Linux的话,这两个文件夹应该就眼熟了起来。

这里普及一个可能是冷门的现象:对于粤政易这类国内Linux应用来说,普遍都没有完全遵循Linux的打包思路将文件分别归类,而是有些偏向macOS的风格,将一个应用所有需要的文件都放在了同一个文件夹,然后安装时全释放在/opt的程序文件夹里就算完成了。所以对于粤政易,直接将这个data包里opt中的粤政易拿出来,你便可以开始运行这个程序了,到此,整个手工安装过程也就完成了。

但对于一些较为遵循打包方法的应用,单独解压出来没法使用,怎么办呢?

只需要在程序文件夹执行一个命令:

ldd 二进制文件名

你便会得到一个完整的引导。箭头左边指出了这个应用需要的so文件,箭头右侧则给出了这个so在系统中的具体路径。这时只需要寻找右侧为空的so,来对应安装包含这些so的软件包,补全即可。

到此,无论是什么样的软件包,你应该都通过手工部署完成安装了。

前些日子尝试通过电报来实现短信多终端同步的方案,很成功,并且为了实验稳定性开了一天。到了第二天早晨再看,服务是正常的。但新来的短信就是没再往Tg上面发送。

最先想到的就是梯子有问题了,通过尝试也发现确实是梯子的问题。具体表现就是浏览器会报503错误。

现在使用的是v2ray方法,在刚搭建好的时候也遇到过503问题,所以惯性的认为这次出现这个问题也是由于服务器时间与本地时间不一致导致的(服务器商授时比实际时间快了3分钟,不知道什么毛病)。

不过当我查看服务器时间时候,发现问题好像没那么简单了——因为服务器时间很正常,说明并不是时间出错导致的这个问题——一下子就感觉问题严重了起来。

查看服务状态(systemctl status v2ray),是active,一切如常;查看运行日志(/var/log/v2ray/access.log),一大溜的invalid user。这是认证错误;但是我并没有改过我的config文件(/etc/v2ray/config.json)啊,为什么会失效呢?

上网搜索类似的情况,并没有什么有用的解答。不过在网上冲浪的过程中,v2ray的github页面提交issue的模板让我想到了一个可能的原因:

  • 我的安卓机应用是play商店自动更新的
  • 我的iOS应用是商店自动更新的
  • 我的Archlinux是及时跟进版本的
  • 我的openSUSE刚刚做了一次dup,所有存在新版本的软件都升级到了最新

这些都指向了一个可能的原因:版本不同(github上面就写到了如果客户端和服务端版本不同请注明)。我的客户端全部到了最新而服务端已经很久没有更新过了。

所以先尝试把服务端更新到了最新,再次尝试。

仍然503.

这就真让我百思不得其解了。

不过在查看服务状态时,有一行信息引起了我的注意:它提示读取的配置文件路径是/usr/local/etc/v2ray/config.json

咦?跟网上大多数提到的/etc/v2ray/config.json不一样啊。查看了一下usr的配置文件,里边只有一行:

{}

这就很好的解释了为啥认证会失败了。啥配置都没有,能存在有效用户就怪了。

虽然不知道为什么之前的/etc/v2ray/config.json可以生效,但既然它现在貌似读取的是带usr的路径,那给它补上就得了呗。

不过为了延续之前的路径,做一个软连接可能是更恰当的选择。直接ln -s /etc/v2ray/config.json /usr/local/etc/v2ray——当然,提前把usr那个空的config文件删掉。

尝试重启服务systemctl restart v2ray,查看状态……

退出。

不过下面的信息给出了明确的信息:日志文件无法写入。

那就把日志文件的读写权限给上去就得了呗chmod 666 /var/log/v2ray/*

再次启动服务,成功。尝试通过客户端连接,也成功了。


这问题出现的还挺突然的——因为前一天还是可以正常使用的东西,在啥都没手工动过的情况下就不能用了,还是非常没有头绪去解决的。不过好在没有什么特别令人费解的问题(虽然突然间读取的配置文件路径就变了有些令人费解),很快也就解决掉了。但关键在于网上竟然没有一篇文章能适配到这个问题上,所以还是写下来了。

视频点此

我曾经说过如何在Windows下屏蔽笔记本键盘的教程。现在,来看看Linux下面如何实现屏蔽笔记本键盘。

Linux屏蔽需要安装一个工具xinput。arch系的包名为xorg-xinput,debian系的包名为xinput

之后,通过命令xinput找到自带键盘设备的ID号。这个设备的名字为AT Translated Set 2 Keyboard。找到以这个名字开头的一行,记录后面id=字段的数字。我这里是11.

最后,通过命令xinput set-prop ID 'Device Enabled' 0来完成设备的仅用。其中,ID区域替换为前面找到的数字。

如果想恢复使用,将结尾的0更改为1即可。

视频点此:第一期第二期第三期

一、红酒?

红酒,英文wine。当然,电脑界的wine并不能喝,而是一套组件,这个组件可以使得windows程序运行在Linux和MacOS上。可以说,如果需要在Linux上运行windows程序,那一定会利用wine或者通过wine的一些组件来实现——无论游戏还是应用。

那么wine到底是什么东西呢?按照官方的说法,wine是一个兼容层而不是一个模拟器,也就是说,wine与虚拟机不同,而是直接让linux拥有执行windows指令的能力。有些观点认为wine这个东西是在最近一些年里边出现的,确切的说应该是wine在最近几年才真正的易用起来。它的金主——CodeWaver早在25年就开始了wine的研发进程。而wine的商业版——Crossover,则是CodeWaver的一个收入来源。与wine需要用户自己配置的区别在于,wine商业版可以以自动完成运行应用程序需要做的准备工作,从而构建起了在Linux和Mac中一键安装windows程序的能力。很好用,如果你需要wine,自己又不会配置,那么可以尝试购买一份crossover来使用。

二、版本?

当然,如果不想花钱,可以使用crossover的开源版本——wine,同样可以完成crossover相同的功能——当然,很多步骤需要手动操作才能完成。但是因为它开源,所以各种大神为了解决各种应用场景制作了各种版本的wine。接下来就简单介绍一下wine的这些版本。

1、正统

你可以从你的Linux仓库中直接获取到正统的版本。它包含三个后缀:wine-stablewine-stagingwine-devel。就像Chrome在for Linux的官方仓库中拥有的三个版本:stable、unstable、beta,wine的这三个版本稳定性是逐渐下降的,而新特性取得的时间是逐次上升的。一般来说,会推荐使用wine的stable版本。不过随着wine越来越多的可喜的变化,我逐渐的开始推荐使用staging版本了。因为它既不像devel这种开发版那么的不稳定和多变,又不像stable版本过于保守的增加新特性,staging保证了在尽量早的获得新特性的同时,又有着不错的稳定性。

2、不正统

不过,在正统版本之外,还有一些不错的第三方版本推荐一用。这里,你可以前往lutris的wiki来简单浏览一下。

它记录了两个主要的第三方版本:GE——Glorious Eggroll和tkg——TK-Glitch。而这两个第三方版本又有很多不同的衍生版,不同的衍生版针对不同的问题有着对应的修复,具体的修复你可以自己到这里来看一看。至于lutris,我曾经单独说过这个可以集合包括steam和gog在内的游戏库软件,这里就不再多说,只是来演示一下如何在lutris里使用不同版本的wine。

它对wine版本的管理很清晰,只需要点击Wine旁边的Manage Version,你就可以在这里选择各种版本的wine了。可以看到,除了通用的第三方版本,lutris还提供了针对游戏的版本,就比如lutris-lol,很明显,这个版本专门针对lol进行了优化,那用这个版本来运行lol显然是最好的选择。获取和设置也很简单,只需要勾选需要的版本,lutris就会自动安装部署,然后点击游戏的设置图标—启动器选项,就可以自由的选择已经安装的wine了。注意啊,这是可以多版本并存的。你要做的仅仅是勾选即可。

而对于Steam,它自己的Steam play项目和针对这个项目推出的第三方wine版本——proton我曾经也说过。所以这里同样只是介绍一下如何使用自定义的proton套件。

这个第三方套件同样有两个衍生,前边提到的GE和TKG。不同的是,这里的版本是基于steam的proton衍生得到,所以它更主要的目的在于解决使用Steam play官方版本游玩有问题的游戏。也因此,这个组件只能使用在Steam中。

先来看看tkg的自定义版,被称为proton-tkg

  1. 前往https://github.com/Frogging-Family/wine-tkg-git/releases获取最新版本
    因为tkg对于arch分支更加友好,所以对于arch分支的用户,只需要下载前两个;而Debian系的用户,就需要下载源码自行编译了。我是arch用户,所以我下载前两个,接下来也以arch演示
  2. 下载后,两者在同一个文件夹下,使用pacman -U zst结尾的那个文件名来安装
  3. 解压刚刚下载的zip后缀的文件,复制到~/.steam/root/compatibilitytools.d/

    如果没有这个文件夹,则新建一个。同时,复制过来的这些文件用一个文件夹包裹起来。所以最终这些文件所在的位置应该类似于~/.steam/root/compatibilitytools.d/proton-tkg/

    对于Debian分支系统,可能不需要root这一层目录

然后,你就可以在steam的steam play设置界面看到刚刚安装的自定义版本了。不过对于自定义版本,针对游戏进行设置可能是更好的选择。只需要在特定游戏的设置界面选择需要的版本保存即可。

第三方的改动是很有必要的。虽然我没遇到过——因为我的很多游戏都可以原生支持linux,不能支持的使用官方版本proton也能完美运行——不过个别游戏使用第三方会有更好的体验。比如warframe,只有使用tkg版本才能显示更新的进度条和下载信息。

再来看看GE的自定义版,被称为protonGE

  1. 前往https://github.com/GloriousEggroll/proton-ge-custom
  2. Release页面下载tag.gz文档并解压
  3. 将其中的文件夹复制到~/.steam/compatibilitytools.d/下,完成

不过,有实验表明,对于自定义的Proton,因为wine研发和新版本释放时候新功能的不稳定性,对于游戏的流畅度来说也并不是版本越新越好,因此有些游戏可能需要使用旧版本的自定义proton才能更好的游玩。但就像我前边提到的,我自己的这些游戏只需要用官方版本便可流畅运行,所以可能轮到你用的时候才会感觉麻烦的很吧。

聊过了这些全球流行的自定义版本,接下来看看国内定制版本:deepin-wine。

这是深度为了国内的应用特意魔改的一个wine版本,基于wine2.18版本开发——很老的wine版本了,我个人猜测,从2过渡到如今的5可能需要耗费很大的精力,所以现在deepin-wine的开发也几乎是一个停滞的状态了。不过对于国内的一众应用,使用deepin-wine来运行可能反而会比使用正版wine运行问题来的要少——所以也不知道南极大鸟家族在它们的产品里到底使用了什么拥有黑科技的库文件。

不过整体来说,deepin-wine的版本还是太老了一些,而且也不是所有发行版都可以安装这个版本的wine。所以这里也不再多说了,只是知道它的包名叫做deepin-wine就好了。如果想安装,就尝试找到这个包来安装就行了。

三、几个容易被忽略的小技巧

1、使用32位容器

虽然wine默认是64位的,但是使用32位容器会使得程序运行的更可靠。只需要在使用wine命令前增加变量WINEARCH=win32即可。

推荐将这个变量写入到.xprofile,这样每次执行wine命令时默认就是32位的了

2、指定容器位置

在wine命名前增加变量WINEPREFIX=路径即可指定容器创建的位置。默认是在~/.wine

通过这个变量可以实现一容器一软件,保证针对不同软件使用不同的wine环境配置。

3、初始化容器/调整容器设置

使用命令winecfg即可打开wine的容器设置。若当前位置没有容器则会自动初始化一个而不安装任何windows程序。

4、补充wine的组件

安装使用winetricks可以方便的增删容器内的支持组件(.NET等)。

5、中文模糊/乱码

字体问题可通过注册表设置字体替换解决。具体可参考wine字体 - Archwiki解决中文乱码 - Archwiki

最近我笔记本的SSD出现了坏块,而且日渐增多,看样子好像是要挂的节奏。

正好,毕设也搞完了,树莓派又要开始吃灰了。我就寻思着把我新买的一个3T机械盘挂在树莓派上,当作一个备份盘来用,顺便做成家庭共享的那种。

树莓派搭建samba这种教程网上一搜就有,我也就不再赘述,实际做好之后速度也还可以接受——关键在于要用有线来连接树莓派和路由器,wifi连接的速度有点问题(顺便一提,我是树莓派3b+)。但当我想把这个samba磁盘设置开机挂载时候,出大问题了。网上也找不到什么人说这个,所以决定自己记录一下。

如果你在网上搜索fstab挂载samba或者类似的问题,会看到各式各样的fstab写法。

比如Archwiki的://SERVER/sharename /mnt/mountpoint cifs _netdev,username=myuser,password=mypass 0 0

又比如csdn某博客的//shwde7xxx.ccr.corp.xxxxx.com/SE_DailyBuild /home/12/345 cifs auto, username=gli16,password=xxxxx 0 0

等等,就不一一列举了。

但我一一试下来,都不行。因为系统在启动过程中是没有启动网络连接的,这就导致了当fstab打算加载这个samba设备时,由于找不到地址进而挂载失败。如此一来,我还是要在系统启动后,手动在终端进行挂载操作。

当时越搜越气,这帮博主真的就这么不负责任的?还是就我的系统有这个问题?

最终,我决定自己尝试。

尝试的过程就不多说了,难倒是不难,只是fstab各种可能的参数都加上去试一下,但操作还是挺麻烦的:因为问题出现在启动时不能联网,所以我必须重新启动系统来验证参数是否有效。如果按一般方法通过umountmount -a来测试的话,不管什么参数都是成功的(因为这种操作是在有网络连接的情况下进行的)。

最终我的fstab是这样的:

//SERVER/sharename /mnt/samba cifs username=xxx,password=xxx,comment=systemd.automount,nofail,rw,uid=1000,gid=1000

简单解释几点

  • rw:使有读写权限
  • uid=1000,gid=1000:这两个参数让非root用户也可对这个磁盘进行读写
  • nofail:最关键的参数。无论其他参数怎么写,只要有这个,就可以保证即使开机时挂载失败,在进入桌面后还可以直接挂载上而无需用户再通过终端进行操作。

不多说了,也许这也是我头一次遇到比较冷门的问题吧……