SamLukeYes 说:守約 说:啊?是什麽問題呀?我暫時還沒察覺有什麽問題,你說的是哪方面的呀,安裝不成功還是什麽,我還是之前看不知道哪個帖子裡這樣說的,就記下了。
-Sy 后面一定要接 u,不然就会只更新了软件包数据库而没有更新已安装的软件包,再获取新的软件包就可能导致部分更新。
是這樣的,-sy我看說是同步軟件倉庫,所以每次我安裝包的時候用-sy,然後-syu我看的說是更新的,我就每次開機或關機的時候用一次-syu,請問我這樣用能不能避免你說的那個部分更新的情況啊?
不更新的时候不要同步软件仓库,只要定期滚就行
离线
你的意思是說裝東西就衹用-S,然後更新就-Syu,是這樣子嗎?
是的。可以设想一下这样一种情况:假如你的 Arch 有几个小时或者几天没滚了,有些软件包已经过期,但落后得还不是太多。这时,如果你需要安装一个新的软件包,只用 -S 的话,pacman 就会根据本地的数据库试图取回和系统上次更新的时间点相匹配的软件包版本。由于软件仓库通常会保留若干个历史版本(没记错的话惯例是 3 个),即使要装的这个包有更新了,pacman 仍然大概率能取回正确的版本(如果找不到的话就说明远程仓库已经把这个历史版本删了,该滚一滚了)。但如果用了 -Sy,就会造成数据库已经更新,而实际安装的软件包还没更新的情况。这时再安装新的软件包,就有可能造成“部分更新”。为了保证软件包数据库和实际安装的软件包版本的一致性,-S 的选项 y 一定要和 u 一起使用。
离线
恰好我用的就是 slstatus,我整理了一下它的配置方法,希望能有用。
使用 git 下载 slstatus 的源代码,这里我下载到家目录下的 software 目录。
git clone https://git.suckless.org/slstatus ~/software/slstatus # 下载源代码
编辑 config.h 来自定义您的状态栏,拿我的为例,以供参考。
const unsigned int interval = 2000;
// 每隔 2s 更新一次
static const char unknown_str[] = "n/a";
// 如果某个值不存在,就显示 n/a(默认),比如断网时 IP 地址就会显示成 n/a
#define MAXLEN 2048
// 状态栏最大字符数量 MAXLEN,如果超过了它,第 MAXLEN 个字符及其右边的字符会被丢弃。
// 下面的注释介绍了 slstatus 的各种函数,每个函数负责显示一项信息。
/*
* 函数 描述 参数 (示例)
*
* battery_perc 电量(百分比形式) 电池名称 (BAT0)
* 在 OpenBSD/FreeBSD 上无需参数
* battery_state 电池的状态:是不是正在充电 电池名称 (BAT0)
* 在 OpenBSD/FreeBSD 上无需参数
* battery_remaining 剩下的电量还能撑多久 电池名称 (BAT0)
* 在 OpenBSD/FreeBSD 上无需参数
* cpu_perc CPU 的利用率(百分比形式) 无
* cpu_freq CPU 的频率(单位是 MHz) 无
* datetime 日期和时间 格式化字符串 (%F %T)
* disk_free 硬盘还剩多少(单位是 GB) 硬盘的挂载点 (/)
* disk_perc 硬盘已经使用了多少 (百分比形式) 硬盘的挂载点 (/)
* disk_total 硬盘总量(单位是 GB) 硬盘的挂载点 (/)
* disk_used 硬盘已经使用了多少(单位是 GB) 硬盘的挂载点 (/)
* entropy 系统的可用熵值,该值越大系统越安全 无
* gid 当前用户的 GID 无
* hostname 主机名 无
* ipv4 IPv4 的地址 网卡名字 (eth0)
* ipv6 IPv6 的地址 网卡名字 (eth0)
* kernel_release 内核版本号 无
* keyboard_indicators 显示大写锁定和数字键盘是否开启 格式化字符串 (c?n?)
* 参数由字母 c 和字母 n 构成,大小写都可以。c 表示大写锁定,n 表示数字键盘。
* c 和 n 后面都可以附加一个问号"?"。
* 如果加了问号 "?",只有锁定开启时才显示字母。比如开启大写锁定时显示 c,关闭时不显示。
* 如果没加问号"?",锁定开启时显示大写字母,关闭时显示小写字母。
* keymap 键盘布局 无
* load_avg 系统负载(共 3 个值,分别是 1 分钟、5 分钟和 15 分钟的平均负载)无
* netspeed_rx 下行网速 网卡名字 (wlan0)
* netspeed_tx 上传网速 网卡名字 (wlan0)
* num_files 指定文件夹的文件数量 该文件夹的路径 (/home/foo/Inbox/cur)
* ram_free 内存还剩多少(单位是 GB) 无
* ram_perc 内存已经使用了多少(百分比形式) 无
* ram_total 内存总量(单位是 GB) 无
* ram_used 内存已经使用了多少(单位是 GB) 无
* run_command 执行一个自定义的 shell 命令 具体的 shell 命令 (echo foo)
* separator 各信息之间的分隔符 无
* swap_free 交换空间还剩多少(单位是 GB) 无
* swap_perc 交换空间已经使用了多少(百分比形式)无
* swap_total 交换空间总量(单位是 GB) 无
* swap_used 交换空间已经使用了多少(单位是 GB) 无
* temp 温度(单位是摄氏度) 传感器文件的路径 (/sys/class/thermal/...)
* 在 OpenBSD 上无需参数
* 在 FreeBSD 上需要热区 (thermal zone) 作参数 (tz0, tz1, etc.)
* uid 当前用户的 UID 无
* uptime 系统已经开机运行了多久 无
* username 当前用户的用户名 无
* vol_perc OSS/ALSA 音量(百分比形式) mixer 文件的路径 (/dev/mixer)
* 在 OpenBSD 上无需参数
* wifi_perc WiFi 信号强度(百分比形式) 网卡名字 (wlan0)
* wifi_essid WiFi 的 ESSID 网卡名字 (wlan0)
*/
static const struct arg args[] = {// 选择上面的函数,在下面添加您想让状态栏显示的信息
// 函数 格式 参数
{ ipv4, " %s", "wlan0" },
// %s 代表 ipv4 的值;参数需要用双引号引起来,不能是单引号,
// 因为 C 语言里单引号内的是字符常量,双引号内的是字符串常量,两者不一样。
{ separator, "|", NULL },
// 用 "|" 间隔两项信息;参数 NULL 表示空,就是没有参数
{ battery_perc, "Battery %s%%","BAT0" },
// 在 C 语言里 "%" 需要转义,用 "%%" 来表示
{ battery_state,"%s", "BAT0" },
{ separator, "|", NULL },
{ disk_free, "Disk %s", "/" },
{ separator, "|", NULL },
{ vol_perc, "Volume %s", "/dev/mixer" },
{ separator, "|", NULL },
{ ram_free, "Memory %s", NULL },
{ separator, "|", NULL },
{ cpu_perc, "CPU %s%%", NULL },
{ separator, "|", NULL },
{ datetime, "%s", "%m月%d日周%u %H:%M" },
};
slstatus 的默认安装目录是 /usr/local/,如果您想安装到别的地方,可以在执行下面的安装命令之前编辑 config.mk 文件,把第 7 行左右的 PREFIX 的值改成您想要的目录。这里我选择默认的安装目录。
执行下面的命令来安装 slstatus
cd ~/software/slstatus # 切换到 slstatus 目录
sudo make clean install # 安装
执行完后,slstatus 可执行程序和 slstatus.1 手册都已经被保存在安装目录 (默认 /usr/local/)下。
现在您可以把配置好的显示内容打印到终端上,来查看 slstatus 的效果
slstatus -1 # 只打印一次
slstatus -s # 连续打印,间隔时间是您在 config.h 里设置的时间,按 Ctrl+c 结束打印
把这些信息显示到状态栏上
slstatus &
在 ~/.xinitrc 中添加
slstatus &
,注意一定要添加到 exec 命令的前面,否则 slstatus 不会被执行。
安装并启动 slstatus 后,如果您又修改了 config.h 里的配置,可以用下面的命令启动新的 slstatus:
sudo make clean install # 重新编译
killall slstatus # 结束旧的 slstatus 进程
slstatus &
状态栏每隔固定时间才会更新,但我们希望调整音量时状态栏能立刻进行一次更新,来显示新的音量。我的解决办法是用下面的三个脚本来控制音量。
您需要先安装 pamixer (调整音量) 和 xorg-xsetroot (设置状态栏的内容)
sudo pacman -S pamixer xorg-xsetroot
~/.local/bin/vol-up
#!/usr/bin/env bash
# 音量增加 %5
pamixer -i 5
# 更新状态栏
status=$(slstatus -1)
xsetroot -name "$status"
~/.local/bin/vol-down
#!/usr/bin/env bash
# 音量减少 %5
pamixer -d 5
# 更新状态栏
status=$(slstatus -1)
xsetroot -name "$status"
~/.local/bin/vol-toggle
#!/usr/bin/env bash
# 静音和取消静音
pamixer -t
# 更新状态栏
status=$(slstatus -1)
xsetroot -name "$status"
给这三个脚本添加可执行权限:
chmod u+x ~/.local/bin/vol-*
将这三个脚本绑定到快捷键上。可以在 dwm 的 config.h 里进行绑定:
static const char *voltoggle[] = { "~/.local/bin/vol-toggle", NULL };
static const char *voldown[] = { "~/.local/bin/vol-down", NULL };
static const char *volup[] = { "~/.local/bin/vol-up", NULL };
...
static Key keys[] = {
/* modifier key function argument */
{ 0, XF86XK_AudioMute, spawn, {.v = voltoggle } },
{ 0, XF86XK_AudioLowerVolume, spawn, {.v = voldown } },
{ 0, XF86XK_AudioRaiseVolume, spawn, {.v = volup } },
};
您可以执行
xmodmap -pke | less
来查看 XF86XK_AudioMute、XF86XK_AudioLowerVolume 和 XF86XK_AudioRaiseVolume 对应的按键,在我电脑上分别是 F1、F2 和 F3。
重新编译并重启 dwm 后,按 F1、F2 和 F3 键来调整音量,就能看到状态栏的音量信息会及时更新。
如果您想卸载 slstatus,执行下面的命令:
sudo make uninstall
执行完后,安装目录 (默认 /usr/local/) 下的 slstatus 可执行程序和 slstatus.1 手册都已经被删除。
(1) 音量显示 n/a
您可能没有 /dev/mixer 设备,您需要执行
sudo modprobe snd-pcm-oss
echo 'snd-pcm-oss' | sudo tee /etc/modules-load.d/snd-pcm-oss.conf
最近编辑记录 tanloong (2022-03-01 20:59:45)
离线
不客气,整理它的时候我自己也发现很多没注意过的细节。嗯……关于那两个问题,我还真没遇到过。我可能明天试着查一查,或者您也可以问问其他人。
最近编辑记录 tanloong (2021-09-27 23:49:08)
离线
给那三个控制音量的脚本添加执行权限试试?
离线
我的输入法框架用的也是 fcitx5, 模拟终端用的是 st。
我的环境变量是这样的:
tan:~$ cat .pam_environment
INPUT_METHOD DEFAULT=fcitx
GTK_IM_MODULE DEFAULT=fcitx
QT_IM_MODULE DEFAULT=fcitx
XMODIFIERS DEFAULT="@im=fcitx"
我安装的 fcitx5 软件有这些:
tan:~$ sudo pacman -Qq | grep fcitx5
fcitx5
fcitx5-chinese-addons
fcitx5-configtool
fcitx5-gtk
fcitx5-material-color
fcitx5-pinyin-zhwiki
fcitx5-qt
我之前在 zathura (一个 pdf 阅读器) 上也无法使用中文输入法,我当时运行下面的命令之后就好了
sudo pacman -S fcitx5-qt fcitx5-gtk
最近编辑记录 tanloong (2021-10-01 02:31:03)
离线
支持一下
离线
支持一下
离线
楼主这个安装教学贴很详细,非常受益,感谢。
pacman -Sy
wiki上说慎用
离线
谢谢楼主分享!
离线