ASUS C302
Asus C302 (也被称为 Asus C302C 和 Asus C302CA) 是一款 Chromebook,可以安装 Linux。以下是一些关于 Arch Linux 顺畅运行的建议。
安装
将 acpi_osi=Linux intel_iommu=on,igfx_off 添加到你的 内核参数。
intel_iommu=on,igfx_off 来自 BBS#228604,以防止以下错误出现在 dmesg 的输出中
[drm:intel_cpu_fifo_underrun_irq_handler [i915]] *ERROR* CPU pipe A FIFO underrun
CPU 是 Intel Core M3,因此请安装 intel-ucode。
内核模块
例如,在 /etc/modprobe.d/skylake.conf 中
# Needed for the nau8825 kernel sound modules to initialize blacklist snd_hda_intel options tpm_tis interrupts=0
注意:这似乎(不再)是必需的,音频也可以在 #声音 下描述的 snd_hda_intel 和 alsa-firmware 下工作。
Screen
屏幕对角线长 12.5 英寸。在 1920x1080 分辨率下,这是 176 DPI,即 HiDPI。
在 ~/.xinitrc 中,设置屏幕尺寸(以毫米为单位)
xrandr --fbmm 277x156
垂直同步
要在 XFCE 中实现正确的垂直同步(包括 Firefox 中的全屏 YouTube 等),请安装 xfwm4-gitAUR,并启用 XFCE 的合成器。
正确的垂直同步还需要 xf86-video-intel,而不是 modesetting。
在 /etc/X11/xorg.conf.d/20-intel.conf 中
Section "Device"
Identifier "Intel Graphics"
Driver "intel"
EndSection
屏幕翻转
要在帐篷模式下使用笔记本电脑,以下脚本将翻转屏幕和触摸输入
#!/bin/dash
set_normal() {
r="normal"
ctm="1 0 0 0 1 0 0 0 1"
}
set_upside_down() {
r="inverted"
ctm="-1 0 1 0 -1 1 0 0 1"
}
line=$(xrandr | grep '^eDP.* connected ')
screen=$(printf "%s" "$line" | cut -d" " -f1)
if $(printf "%s" "$line" | grep -q ' inverted (normal') ; then
set_normal
else
set_upside_down
fi
xrandr --output "$screen" --rotate "$r"
xinput set-prop "Elan Touchscreen" "Coordinate Transformation Matrix" $ctm
键盘
要将 Chromebook 键盘的顶行用作 Xorg 中的有用按键,请使用例如
在 ~/.Xmodmap 中
keycode 9 = Escape NoSymbol Escape keycode 22 = BackSpace BackSpace BackSpace BackSpace Delete NoSymbol Delete keycode 37 = Control_L NoSymbol Control_L keycode 50 = Shift_L NoSymbol Shift_L keycode 66 = Caps_Lock NoSymbol Caps_Lock keycode 67 = Home F1 Home F1 F1 F1 XF86Switch_VT_1 keycode 68 = End F2 End F2 F2 F2 XF86Switch_VT_2 keycode 69 = Prior F3 Prior F3 F3 F3 XF86Switch_VT_3 keycode 70 = Next F4 Next F4 F4 F4 XF86Switch_VT_4 keycode 71 = Delete F5 Delete F5 F5 F5 XF86Switch_VT_5 keycode 72 = XF86MonBrightnessDown F6 XF86MonBrightnessDown F6 F6 F6 XF86Switch_VT_6 keycode 73 = XF86MonBrightnessUp F7 XF86MonBrightnessUp F7 F7 F7 XF86Switch_VT_7 keycode 74 = XF86AudioMute F8 XF86AudioMute F8 F8 F8 XF86Switch_VT_8 keycode 75 = XF86AudioLowerVolume F9 XF86AudioLowerVolume F9 F9 F9 XF86Switch_VT_9 keycode 76 = XF86AudioRaiseVolume F10 XF86AudioRaiseVolume F10 F10 F10 XF86Switch_VT_10 keycode 111 = Up Up Up Up Prior Prior keycode 112 = Prior NoSymbol Prior keycode 113 = Left Left Left Left Home Home keycode 114 = Right Right Right Right End End keycode 115 = End NoSymbol End keycode 116 = Down Down Down Down Next Next keycode 117 = Next NoSymbol Next keycode 118 = Insert NoSymbol Insert keycode 119 = Delete NoSymbol Delete keycode 124 = XF86PowerOff NoSymbol XF86PowerOff keycode 167 = XF86Forward NoSymbol XF86Forward keycode 182 = XF86Close NoSymbol XF86Close keycode 191 = XF86ScreenSaver NoSymbol XF86ScreenSaver
(此列表可以缩减。)
~/.Xmodmap 将由 /etc/X11/xinit/xinitrc 加载,它实际上会运行
xmodmap ~/.Xmodmap
键盘背光
要能够以普通用户身份更改键盘背光亮度,请以 root 身份运行
b="/sys/devices/platform/GOOG0002:00/leds/chromeos::kbd_backlight/brightness" chgrp users "$b" && chmod 660 "$b" && echo 6 > "$b"
这是一个介于 0(关闭)和 100(全亮度)之间的值。ChromeOS 上的默认值为 25。6 是一个合理的较低值。
ChromeOS 能够在键盘不使用时禁用键盘背光——这种功能似乎在 Linux 内核中不可用,但可以通过一个简单的脚本,借助 xprintidle 来复制,例如:
#!/bin/dash
set_keyboard_backlight() {
printf "%s" "$1" > "/sys/devices/platform/GOOG0002:00/leds/chromeos::kbd_backlight/brightness"
b="$1"
}
b=0
while true ; do
pgrep ^Xorg > /dev/null || exit 0
seconds_to_sleep=10
idle_millis=$(xprintidle)
if [ "$idle_millis" -gt 10000 ] ; then
nb=0
seconds_to_sleep=5
else
nb=25
seconds_to_sleep=15
fi
if [ "$nb" -ne "$b" ] ; then
set_keyboard_backlight "$nb"
fi
echo "nb=$nb, sleeping for $seconds_to_sleep"
sleep "$seconds_to_sleep"
done
触控板
从 libinput 1.12.0-2 开始,触摸板工作良好,支持所有
- 点击
- 单指点击 = "左" 按钮
- 双指点击 = "右" 按钮
- 三指点击 = "中" 按钮
- 点击板(点击触摸板的下部)
- 左侧 = "左" 按钮
- 右侧 = "右" 按钮
- 中间 = "中" 按钮
鼠标
由于 USB 端口数量有限,蓝牙鼠标是一个不错的选择。Logitech M590 鼠标工作正常。
在启动时运行 "bluetoothctl power on &",例如在 ~/.xinitrc 中
在例如 /etc/X11/xorg.conf.d/99-mouse.conf 中
Section "InputClass"
Identifier "Logitech M590"
MatchIsPointer "on"
MatchDevicePath "/dev/input/event*"
Driver "libinput"
Option "AccelProfile" "flat"
EndSection
然后,可以使用 XFCE GUI 中的“设置 - 鼠标”,将“加速”设置为例如 2.0 来设置鼠标的“速度”。
声音
笔记本电脑应该能够通过 HDMI(未测试)、内置扬声器、耳机插孔或蓝牙耳机播放声音。
安装 alsa-utils(可选?)和 alsa-firmware 软件包后,内置扬声器和耳机插孔可以使用 ALSA,然后重新启动以确保固件已加载。
ALSA 也可以用作 PulseAudio(未测试)和 Pipewire 声卡的输出接收器。
更多信息请参见
- https://github.com/GalliumOS/galliumos-distro/issues/379
- https://github.com/WeirdTreeThing/chromebook-linux-audio
故障排除
成功后,lspci -v -s 00:1f.3 应显示
00:1f.3 Multimedia audio controller: Intel Corporation Sunrise Point-LP HD Audio (rev 21) DeviceName: Multimedia audio controller Flags: bus master, fast devsel, latency 64, IRQ 132, IOMMU group 7 Memory at 9112c000 (64-bit, non-prefetchable) [size=16K] Memory at 91110000 (64-bit, non-prefetchable) [size=64K] Capabilities: [50] Power Management version 3 Capabilities: [60] MSI: Enable+ Count=1/1 Maskable- 64bit+ Kernel driver in use: snd_soc_avs Kernel modules: snd_soc_avs, snd_hda_intel
并且 aplay -l 显示
**** List of PLAYBACK Hardware Devices **** card 0: HDMI [AVS HDMI], device 0: HDMI1 (*) [] Subdevices: 1/1 Subdevice #0: subdevice #0 card 0: HDMI [AVS HDMI], device 1: HDMI2 (*) [] Subdevices: 1/1 Subdevice #0: subdevice #0 card 0: HDMI [AVS HDMI], device 2: HDMI3 (*) [] Subdevices: 1/1 Subdevice #0: subdevice #0 card 1: MAX98357A [AVS I2S MAX98357A], device 0: Built-in Speakers (*) [] Subdevices: 1/1 Subdevice #0: subdevice #0 card 4: NAU8825 [AVS I2S NAU8825], device 0: Headset (*) [] Subdevices: 1/1 Subdevice #0: subdevice #0
这里,MAX98357A 是内置扬声器,NAU8825 是耳机音频端口。
例如,使用以下命令验证播放是否正常工作:
aplay -D default:CARD=MAX98357A -i example.wav
ALSA
要将音频设置为合理水平,请在 ~/.xinitrc 中运行
amixer -q -c0 sset Headphone 70% &
PulseAudio
为防止音频“咔哒”声,请注释掉 /etc/pulse/default.pa 和 /etc/pulse/system.pa 中的 "load-module module-suspend-on-idle"
线圈啸叫
偶尔会出现 线圈啸叫,通过运行以下命令可以大大减轻:
printf "1" > /sys/devices/system/cpu/intel_pstate/no_turbo