一号本 OneMix3 Pro Ubuntu屏幕校正

背景

之前在一号本(OneMix3 Pro)上装的Ubuntu系统因为懒得做环境分离,终于把环境搞乱了 T_T,遂重装一下Ubuntu顺便升到最新版20.04。

一号本有点ZZ,主板层面认为屏幕是竖着的,所以除原生 win10 ,加了grub之后,grub和ubuntu默认都是竖屏的。而之前装系统的时候没有做过程记录,所以忘了上次是怎么解决“竖屏”问题的了。。。

重新google一番,主要发现以下方法。

方法一

最快速也是最丑的方法,Ubuntu默认有个服务iio-sensor-proxy,有点类似手机上的“屏幕旋转”,然而一号本的加速度传感器方向不是常规的方向,所以这个旋转总是往错误的方向翻转,可以卸载这个服务后,每次进入桌面手动设置屏幕方向。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 卸载服务
x@One-Mix3-Pro:~$ sudo apt-get --purge remove iio-sensor-proxy

# 查看屏幕名称,这里看到是eDP-1
x@One-Mix3-Pro:~$ xrandr --query
Screen 0: minimum 320 x 200, current 2560 x 1600, maximum 16384 x 16384
eDP-1 connected primary 2560x1600+0+0 left (normal left inverted right x axis y axis) 113mm x 181mm
1600x2560 55.86*+
HDMI-1 disconnected (normal left inverted right x axis y axis)
DP-1 disconnected (normal left inverted right x axis y axis)
HDMI-2 disconnected (normal left inverted right x axis y axis)

# 每次登陆执行屏幕翻转,可以写个自启动项
x@One-Mix3-Pro:~$ xrandr --output eDP-1 --rotate left

可以写一个gnome启动项,控制gnome每次登陆的时候执行屏幕旋转。

打开“启动应用程序”程序

或者alt + F2运行gnome-session-properties,在其中添加旋转屏幕命令

再或者直接shell里添加gnome启动项文件

1
2
3
4
5
6
7
8
9
10
11
x@One-Mix3-Pro:~/.config/autostart$ cat export.desktop
[Desktop Entry]
Type=Application
Exec=export DISPLAY=:0;xrandr --output eDP-1 --rotate left
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[zh_CN]=screen rotate
Name=screen rotate
Comment[zh_CN]=aaa
Comment=Rotate the default screen

Ubuntu 20.04上不知道为什么这个启动项经常不允许,老版本Ubuntu这个启动项还是有点用的。

方法二

上面的方法通过卸载“屏幕旋转”服务,使得屏幕不会被错误的旋转,但也造成屏幕没法自动旋转。不太喜欢这种因噎废食的做法,重新安装上iio-sensor-proxy,继续看了下其他方法。

查阅了一些文档,发现加速度传感器的矩阵可以手工校准,参考reddit网友的帖子,先寻找加速度设备的名称:

1
2
root@One-Mix3-Pro:~# cat /sys/`udevadm info -q path -n /dev/iio:device0`/../modalias
acpi:BOSC0200:BOSC0200:

获取到的设备名称为acpi:BOSC0200:BOSC0200:,增加61-sensor-local.hwdb配置文件,设备名为以下格式,并对ACCEL_MOUNT_MATRIX矩阵进行如下调整,更新硬件数据库:

1
2
3
4
root@One-Mix3-Pro:~# cat /etc/udev/hwdb.d/61-sensor-local.hwdb      # 修改为如下内容
sensor:modalias:acpi:BOSC0200*:dmi:*:*
ACCEL_MOUNT_MATRIX= -1, 0, 0; 0, 1, 0; 0, 0, 1 # 3x3矩阵
root@One-Mix3-Pro:~# systemd-hwdb update # 更新硬件数据库

修改矩阵的时候可以参考monitor-sensor的内容,不断调整设备姿态,确定原生加速度传感器方向。

1
2
3
4
5
6
7
8
9
10
11
12
13
root@One-Mix3-Pro:~# monitor-sensor
Waiting for iio-sensor-proxy to appear
+++ iio-sensor-proxy appeared
=== Has accelerometer (orientation: left-up)
=== No ambient light sensor
Accelerometer orientation changed: bottom-up
Accelerometer orientation changed: left-up
Accelerometer orientation changed: normal
Accelerometer orientation changed: right-up
Accelerometer orientation changed: normal
Accelerometer orientation changed: left-up
Accelerometer orientation changed: normal
Accelerometer orientation changed: left-up

重启并登陆以后,屏幕基本可以按正确的重力方向进行旋转了。那么这个时候新的问题就出现了😂,触屏会偶发性的没有跟随进行旋转,这样就会导致你点右边,左边的程序启动了。。。

依旧查阅文档,发现有个输入设备的矩阵,查看当前输入设备:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
x@One-Mix3-Pro:~$ xinput --list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ HAILUCK CO.,LTD USB KEYBOARD Mouse id=11 [slave pointer (2)]
⎜ ↳ GXTP7386:00 27C6:0113 id=15 [slave pointer (2)]
⎜ ↳ GXTP7386:00 27C6:0113 Stylus id=16 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Power Button id=8 [slave keyboard (3)]
↳ Sleep Button id=9 [slave keyboard (3)]
↳ HAILUCK CO.,LTD USB KEYBOARD id=10 [slave keyboard (3)]
↳ HAILUCK CO.,LTD USB KEYBOARD System Control id=12 [slave keyboard (3)]
↳ HAILUCK CO.,LTD USB KEYBOARD Consumer Control id=13 [slave keyboard (3)]
↳ HAILUCK CO.,LTD USB KEYBOARD Wireless Radio Control id=14 [slave keyboard (3)]
↳ GXTP7386:00 27C6:0113 Keyboard id=17 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=18 [slave keyboard (3)]

id=15GXTP7386:00 27C6:0113是触屏设备,查看这个设备的属性信息:

1
2
3
4
5
6
7
8
9
10
11
x@One-Mix3-Pro:~$ xinput list-props 15
Device 'GXTP7386:00 27C6:0113':
Device Enabled (168): 1
Coordinate Transformation Matrix (170): 0.000000, -1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000
libinput Calibration Matrix (323): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
libinput Calibration Matrix Default (324): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
libinput Send Events Modes Available (288): 1, 0
libinput Send Events Mode Enabled (289): 0, 0
libinput Send Events Mode Enabled Default (290): 0, 0
Device Node (291): "/dev/input/event6"
Device Product ID (292): 10182, 275

最后写了个脚本,把屏幕旋转的部分和触摸屏识别旋转的部分合在一起,当触摸屏识别没有跟随旋转时执行一下。

1
2
3
4
5
6
7
8
9
#!/bin/bash
# Screen_rotate.sh written by badb100d

#portrait (left)
export DISPLAY=:0
xrandr --output eDP-1 --rotate left

# 15 is the touch screen id
xinput set-prop 15 --type=float "Coordinate Transformation Matrix" 0 -1 1 1 0 0 0 0 1

附加

增大grub字体

grub 貌似是没法旋转的(除非patch binary),所以将就一下这个颈椎病康复版grub。不过grub的字体还是可以调的,默认字号太小。

1
2
3
4
root@One-Mix3-Pro:~# apt install ttf-unifont -y
root@One-Mix3-Pro:~# grub-mkfont -s 32 -o /boot/grub/fonts/unicode32.pf2 /usr/share/fonts/truetype/unifont/unifont.ttf
root@One-Mix3-Pro:~# vim /etc/default/grub # 增加 GRUB_FONT=/boot/grub/fonts/unicode32.pf2
root@One-Mix3-Pro:~# update-grub # 更新grub,再重启

修改 tty 下旋转模式

GUI下的屏幕旋转解决了,但是有时候纯CUI操作效率更高,也更节约资源。默认的 tty 界面(ctrl+alt+F3)也是旋转的,通过修改 grub 启动参数进行校正:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
root@One-Mix3-Pro:~# cat /etc/default/grub
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
# info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=2
GRUB_FONT=/boot/grub/fonts/unicode32.pf2
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
#GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX_DEFAULT="video=efifb fbcon=rotate:3 fbcon=rotate_all:1 quiet splash"
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0 video=efifb fbcon=rotate:3 fbcon=rotate_all:1"

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"

更新 grub 并重启

1
root@One-Mix3-Pro:~# update-grub

增加 tty 下中文字符支持

安装fbterm,配置~/.fbtermrc,root和普通用户都配置一下。

1
2
3
font-names=Ubuntu Mono
font-size=40
screen-rotate=3

配置fbterm权限

1
setcap 'cap_sys_tty_config+ep' /usr/bin/fbterm

增加 rc.local 支持

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
root@One-Mix3-Pro:~# cat /etc/systemd/system/rc-local.service
[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99

[Install]
WantedBy=multi-user.target

root@One-Mix3-Pro:~# systemctl enable rc-local; touch /etc/rc.local; chmod +x /etc/rc.local

无线网卡不休眠

查看,并修改无线网卡状态(重启失效)

1
2
3
root@One-Mix3-Pro:~# iw dev wlan0 get power_save
Power save: on
root@One-Mix3-Pro:~# iw dev wlan0 set power_save off

修改无线网卡配置(重启不失效)

1
2
3
root@One-Mix3-Pro:~# cat /etc/NetworkManager/conf.d/default-wifi-powersave-on.conf
[connection]
wifi.powersave = 2

安装VNC(系统自带的太辣鸡)

1
2
3
root@One-Mix3-Pro:~# wget https://downloads.realvnc.com/download/file/vnc.files/VNC-Server-6.10.1-Linux-x64.deb
root@One-Mix3-Pro:~# dpkg -i VNC-Server-6.10.1-Linux-x64.deb
root@One-Mix3-Pro:~# sed -i "s/^[#]WaylandEnable=false/WaylandEnable=false/" /etc/gdm3/custom.conf # force the login screen to use Xorg

VNC license:
cnblog找了一个VKUPN-MTHHC-UDHGS-UWD76-6N36A
zhihu找了一个Z456C-LMKTC-NLGWQ-H5CUR-ZVWEA

开启虚拟桌面服务vncserver-virtuald.service

1
2
3
4
5
root@One-Mix3-Pro:~# apt install xserver-xorg-video-dummy
root@One-Mix3-Pro:~# vncinitconfig --enable-system-xorg
root@One-Mix3-Pro:~# systemctl enable vncserver-virtuald.service
root@One-Mix3-Pro:~# systemctl start vncserver-virtuald.service
root@One-Mix3-Pro:~# # To start a Virtual Mode instance (session), run the command: vncserver-virtual

盒盖不休眠

1
2
root@One-Mix3-Pro:~# echo "HandleLidSwitchExternalPower=ignore" >> /etc/systemd/logind.conf
root@One-Mix3-Pro:~# systemctl restart systemd-logind

再装些有的没的常用软件,差不多基本配置就OK了,后面各个环境全部docker化吧,Ubuntu环境乱了很难受。

设置BIOS时间为本地时间(local time)

Ubuntu默认视BIOS时间为UTC时间,这样对夏令时的兼容最好,业务系统建议保持默认以满足夏令时兼容性。
Windows默认视BIOS时间为本地时间(local time),会导致两个系统时间不一致,个人电脑建议按以下方法将Ubuntu的RTC时间策略改为本地时间。

1
root@One-Mix3-Pro:~# timedatectl set-local-rtc 1

后续更新

2021-08-07

  • 最近设备经常高温重启,从https://extensions.gnome.org/extension/945/cpu-power-manager/处添加gnome插件控制CPU频率,另外后续可以看一下/sys/devices/virtual/thermal/cooling_device\*
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    root@One-Mix3-Pro:/# for i in `ls /sys/devices/virtual/thermal`;do cat /sys/devices/virtual/thermal/$i/type;done
    Fan
    Fan
    Processor
    Processor
    Processor
    intel_powerclamp
    Fan
    Fan
    Fan
    Processor
    Processor
    Processor
    Processor
    Processor
    INT3400 Thermal
    SEN3
    pch_skylake
    B0D4
    iwlwifi_1
    x86_pkg_temp

    2023-06-01

    键盘好像坏了,A键时灵时不灵的,有时候自动aaaaaaaa的,甚至在win下经常跳出粘滞键。。。
    准备做个全盘镜像,然后返厂修键盘。
    重启按DEL进入bios,切换至U盘启动,Try Ubuntu,内置SSD设备为/dev/nvme0n1(nvme0是控制器设备,nvme0n1是磁盘块设备,nvme0n1p[1-9]是磁盘分区)。
    找个移动硬盘,将磁盘完整dd出来(这里找个大的固态盘快一点)。
    1
    2
    3
    4
    5
    # 备份至移动硬盘 Portable-SSD-DIR/nvme-backup/ 目录,如果移动硬盘够大或者CPU不太行,可以不gzip
    dd if=/dev/nvme0n1 bs=4M status=progress | gzip -c | split -b 16G - /media/ubuntu/Portable-SSD-DIR/nvme-backup/nvme.img.gz

    # 恢复至nvme,这里*会按文件名顺序匹配,同样,如果前面没用gzip,这里也要去掉gzip
    cat /media/ubuntu/Portable-SSD-DIR/nvme-backup/nvme.img.gz* | gzip -dc | dd of=/dev/nvme0n1 bs=4M status=progress

本文标题:一号本 OneMix3 Pro Ubuntu屏幕校正

文章作者:

发布时间:2020年11月16日 - 23:11

最后更新:2020年11月16日 - 23:11

原始链接:https://badb100d.com/2020/11/16/2020-11-16/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

谢谢老板打赏 Or2