Pretty much everything is working out of the box. The screen is beautiful and the keyboard is nice to type on.
The battery life when just doing using the laptop as a portable laptop is pretty good. It's light, thin.
I look forwarding to testing its for some light gaming, but until then, here's what I did to get everything working on it.
Installation is straight-forward. I can't figure out how to bring a temporary boot device selection menu, but pressing "Delete" to get into the firmware configuration worked, and I was able to set default boot device there.
"SecureBoot" needs to be disabled, but it does support using your own keys, so there is the option of setting up SecureBoot later on.
Installation was normal following the chroot
guide (void-installer
does not seem to detect NVMe drives).
This laptop supports PRIME Offload, as well as advanced power management of the dGPU under Linux.
I installed the nvidia
package (after installing void-repo-nonfree
) and rebooted. Intel was correctly driven by the modesetting
driver and the GTX 1650 is detected as a provider as well.
To enable advanced power management, I created the file /etc/modprobe.d/nvidia-pm.conf
and added the following:
# Enable DynamicPwerManagement
options nvidia NVreg_DynamicPowerManagement=0x02
I then had to enable PCI power management. I did this by adding the following lines to /lib/udev/rules.d/80-nvidia-pm.rules
:
# Enable runtime PM for NVIDIA VGA/3D controller devices on driver bind
ACTION=="bind", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x030000", TEST=="power/control", ATTR{power/control}="auto"
ACTION=="bind", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x030200", TEST=="power/control", ATTR{power/control}="auto"
# Disable runtime PM for NVIDIA VGA/3D controller devices on driver unbind
ACTION=="unbind", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x030000", TEST=="power/control", ATTR{power/control}="on"
ACTION=="unbind", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x030200", TEST=="power/control", ATTR{power/control}="on"
Backlight control was working with xbacklight
when using the Intel driver, before the nVidia driver switched it to modesetting
and it stopped working. acpilight
seems to be a more reliable solution and is compatible with xbacklight
.
I attempted to monitor power-usage using nvidia-smi
, but the usage never dropped below 3W. I did observe that the battery life had been considerably longer, and that there is a power usage increase when I run nvidia-smi
, so I believe it is waking the dGPU up, never being able to show a 0W consumption.
The modesetting
driver has terrible screen tearing. Using the following picom.conf
settings, I was able to eliminate it:
vsync = true;
use-damage = true;
backend = "glx";
The Function keys operate as "media" keys by default, requiring fn
to modify them to regular F1-12 keys. I didn't bother changing this.
The function keys mostly behave as expected. The following table describes the i3 keymappings I used to the capture the keystrokes.
Fn+ | Action | Capture Method |
---|---|---|
F1 | Mute Volume | bindsym XF86AudioMute |
F2 | Lower Volume | bindsym XF86AudioLowerVolume |
F3 | Raise Volume | bindsym XF86AudioRaiseVolume |
F4 | Toggle Touchpad | bindcode mod4+Contro+93 |
F5 | Mute Microphone | N/A; does not send key or ACPI event |
F6 | Toggle Web Cam | bindsym XF86WebCam; also physically toggles Web Cam connection |
F7 | Not sure. Headbulb? | N/A; does not send key or ACPI event |
F8 | Keyboard Backlight | N/A; handled by system itself |
F9 | Backlight dimmer | bindsym XF86MonBrightnessDown |
F10 | Backlight brighter | bindsym XF86MonBrightnessUp |
F11 | Monitor setup | bindsym mod4+p |
F12 | Rotate screen | N/A; does not send key or ACPI event |
The "headbulb", I think, might be some MSI specific software launcher. I couldn't figure out how it sent anything to the operating system, so I wasn't able to map it to do something, ignoring that I have no idea what I would map it to.
To see if Camera is enabled, I added the following to my i3status.conf:
path_exists "camera" {
path = "/sys/devices/pci0000:00/0000:00:14.0/usb1/1-6/uevent"
format = "Camera: ON"
format_down = "Camera: OFF"
}
Using the standard us
keyboard layout, altgr
sends Alt_R
and the key labeled \
sends <
.
With the following config in /etc/X11/xorg.conf.d/40-altgr.conf
, the keyboard will properly use AltGr (allowing for easy entry of '€', '£', etc) and the \
key sends the right keys!
Section "InputClass"
Identifier "Keyboard Defaults"
MatchIsKeyboard "yes"
Option "XkbLayout" "us"
Option "XkbVariant" "altgr-intl"
EndSection
The default driver of synaptics
sucks. linbinput
is much better for this trackpack in terms of palm-rejection and scrolling. With the following config in /etc/X11/xorg.conf.d/40-libinput.conf
, libinput
will be used for the trackpad only, and it still supports multitouch (i.e., two fingers for middle-click, three fingers for right-click).
# Force libinput for touchpad
Section "InputClass"
Identifier "libinput touchpad catchall"
MatchIsTouchpad "on"
MatchDevicePath "/dev/input/event*"
Driver "libinput"
Option "ClickMethod" "clickfinger"
EndSection
I have a snooze
job setup under runit to one a week run fstrim
.
The runit service (/etc/sv/fstrim/run
) is as follows:
#!/bin/sh
TIMEFILE=$(dirname $0)/fstrim.timer
exec /usr/bin/snooze -w0 -s 7d -t $TIMEFILE $(dirname $0)/dotrim $TIMEFILE
This will call /etc/sv/fstrim/dotrim
:
#!/bin/sh
TIMEFILE=$(dirname $0)/fstrim.timer
LOGFILE=/var/log/fstrim.log
date -u >> $LOGFILE
/usr/bin/fstrim -a -v >> $LOGFILE 2>&1
touch $TIMEFILE
The use of the "time file" will make sure the service runs on boot if it had not run since the expected time (i.e. if the system was off).
I'm really impressed how much of this laptop works out of the box with little effort. I also wasn't looking for "crazy" gaming performance, but so far this laptop has met and exceeded my requirements. This is both a great Linux laptop and a good Linux gaming laptop.
Thx for the review, was looking to do the same 👍