Configuring a usable FreeBSD ThinkPad

ceteris

New Member


Messages: 5

Hello!

I'm going to try to keep this short and sweet by getting to the point as quickly as possible.

- I've decided to install FreeBSD 12.2 on my main laptop.
I have substantial experience with different Linux distributions, pfSense, OPNsense and FreeNAS as well as Windows Server (2016), so I'm not new to the OS game. I've also played around with straight FreeBSD quite a lot so I'm familiar with the basics and then some. I decided to install FreeBSD on my laptop to take advantage of 'ZFS on root', Boot Environments, security, jails and other advantages over Linux.

- I've gotten far, having successfully installed my favorite desktop, Xfce4, but I'm having some issues ironing out the remaining kinks. I'm not
expecting my experience be as perfect as with say Ubuntu but I need to make my laptop cooperate enough to enable normal workflow.

The laptop in question is a (2016) Lenovo ThinkPad E560 with:
Intel(R) Core(TM) i5-6200U 2C4T CPU @ 2.30GHz
with integrated Intel HD 520 graphics
2x 8GB DDR3 Kingston HyperX 1600 MT/s SODIMM
15.6" FullHD IPS LED LCD display
Lenovo BIOS from 2017
Sunrise Point-LP USB 3.0 xHCI Controller (PCIe)
Sunrise Point-LP [Intel] HD Audio (PCIe)
Intel(R) Dual Band Wireless AC 3165
Intel Ethernet Connection I219-V
Samsung SSD 840 EVO 250GB
Realtek RTS522A PCI Express Card Reader

Again, I don't expect this laptop to have amazing support for every multimedia key and obscure little feature, quite the opposite - I'm content to have it work just well enough to suit my needs -, but I do need to have SOME things:

I need a usable track/touchpad, some function keys (to regulate screen brightness, volume at least) and some kind of power management, allowing the machine to spin down while not under load and also allowing me to put it so sleep when need be. I also need a basic sound output via the inbuilt speakers as well as the 3.5mm (headphone) jack. I would also like to use a USB printer & scanner or two and have the ability to spin up virtual machines via bhyve, VirtualBox and have them pass through (at least) USB. I can live without the card reader and I can deal with the "reboot" command not executing a real reboot, instead forcing me to shutdown an restart manually. I'm hoping that's not too much to ask as otherwise I might be forced to retract to Linux.

I ask you, good people of FreeBSD forums, to tell me what further information (if any) would you like me to provide. /etc/rc.conf? /boot/loader.conf?

Thank you very much,
ceteris

Bonus question:
To avoid opening a second thread, I'll simply add a related question to this one: I've been trying to set up a home server, consisting of 2 virtual switches, a pfSense bhyve VM and multiple jails (NFS server, Plex, mail server etc.) with an Intel i5-650, 8GB DDR3, 2 Intel GbE NICs and a bunch of HDDs. While jail configuration went on without incident (iocage), setting up
a pfSense virtual machine using 'vm-bhyve' hit a wall: The pfSense VM I manage to install via vm-bhyve (using the pfSense.iso and without VNC/graphics support) seems to only briefly communicate with the network and the console provided by vm-bhyve is useless. I understand I might/should be installing the pfSense.img version of the OS but I don't know how to do it in vm-bhyve. The switches created via "vm switch create xyz" seem to work well with ordinary FreeBSD 12.x guests but my install of pfSense (latest version) barely assigns a WAN IP address DHCP and then vanishes. I've tried using both "virtio-net" and "e1000" type virtual NICs but all to no avail. Previously, on Debian/Proxmox, I used OpenvSwitch to facilitate networking so I'm inclined to do so again but I'd like to give the incorporated FreeBSD/vm-bhyve bridging solution a chance before denouncing it all together as I trust it to be good (enough). I'd like to have my FreeBSD host spin up the pfSense VM immediately after boot to have it serve the jails which should wake immediately after. || Again, thank you very much. FreeBSD is a gem of an OS so I would love to use it whenever I can.
 

twllnbrck

Well-Known Member

Reaction score: 182
Messages: 253

I need a usable track/touchpad, some function keys (to regulate screen brightness, volume at least) and some kind of power management,
For CPU freq scaling you can use powerd(8) or sysutils/powerdxx from ports. I use the latter on my T420s with
Code:
# /etc/rc.conf

powerdxx_enable="YES"
powerdxx_flags="-n adaptive -a hiadaptive -b adaptive -m 800 -M 1200"


You can also configure Cx-states via /etc/rc.conf with performance_cx_lowest (AC) and economy_cx_lowest (battery).
If your wireless card supports power saving you can enable it as well
Code:
# /etc/rc.conf

ifconfig_wlan0="WPA DHCP powersave"

There are more power saving options, e.g. for usb devices via usbconfig(8). But the best guide on power saving is vermadens@ blog entry power-to-serve.
Lenovo uses ACPI for special keys, you can load acpi_ibm.ko kernel module in /etc/rc.conf
Code:
kld_list"${kld_list} acpi_ibm"

The brightness keys are working out of the box for me. This is also true for trackpoint/touchpad. But I increased trackpoint sensitivity with
Code:
# /etc/sysctl.conf

hw.psm.trackpoint.sensitivity=255
hw.psm.trackpoint.upper_plateau=125

For the volume keys (XF86AudioRaiseVolume, XF86AudioLowerVolume) I use keybindings in openbox but I dont know how to configure bindings in XFCE.

I also need a basic sound output via the inbuilt speakers as well as the 3.5mm (headphone) jack.
The FreeBSD sound system remains a kind of mystery for me. I prefer audio/sndio as sound server. Anyway I had some struggle to configure the speaker to headphones switch. I was quite successful by adding
Code:
hint.hdaa.0.nid31.config="as=1 seq=0 device=Speaker"
hint.hdaa.0.nid25.config="as=1 seq=15 device=Headphones"

to /boot/device.hints. You may have to play with the nid channels. This guide might help you with the sound config.
Hope this will give you some starting points.
 

Lars Skogstad

Active Member

Reaction score: 41
Messages: 103

Ill give you a write up later.
You need to use the libinput driver or what its called from linux.
This makes it approx equal to the touchpad in linux.

Have you checked the wiki page regarding touchpad? Lots of info there.

Im running a lenovo t470 but tried on others as well.

As far as I know, the maim problem is slow wifi drivers and suspend/resume isnt always working.
 
OP
ceteris

ceteris

New Member


Messages: 5

(I'm having hell-a time figuring up the BB editoring/highlighting commands of this board so I'll have to resort to a stile a little more oldschool:)

@twlnbrck
Thank you for your reply.
I already have "powerd_enable="YES"" enabled in /etc/rc.conf, have never heard of "powerdxx" but thank you for bringing it to my attention - it looks great.
I might go into configuring Cx-states but I'm not too concerned with batter life at this point. This laptop is getting quite old and the batter, while still usable, is getting worn out. I did have power draw optimized via TLP in Linux and, to tell you the truth, I just ended up running the machine full tilt at all times. The i5-6200U it hosts was never a powerhouse and since I quite often run MS Word inside a stripped down Windows VM while also having open a few instances of Firefox, Thunderbird, and countless terminal windows w/ SSH etc., what I'm concerned with when it comes to power management is that the CPU governor is unlocking the most this chip can offer (which is cca. 2x2.4GHz HT).

I do have enabled "acpi_ibm_load="YES"" in /boot/loader.conf, is that the same as the "kld_list"${kld_list} acpi_ibm"" you've noted? I had known of vermaden's 'ZFS Madness' guide, did not know of the one you've mentioned; thank you very much, I'll be sure to give it a read.

For me, all function keys (mute, vol up, vol down, mic cancel, bright up etc.) work out of the box on most desktop distributions of Linux. FreeBSD w/ Xfce4 gives me virtually nothing, even after enabling:
"acpi_video_load="YES""
"acpi_ibm_load="YES""
So far, I've been forced to regulate screen brightness by commanding "doas sysctl hw.acpi.video.lcd0.brightness=100". Xrandr seems to work as well but the results seem a little different and I don't really know why so I usually stick with the sysctl. The xrandr command I've found is:
"xrandr --output eDP-1 --brightness 0.7" [70% brightness; values above 1.0 work as well but I don't quite understand why.]

The Trackpad DOES work out the box for me, basically. The only thing refusing to respond is the third button / middle button above the Trackpad that would usually be used to scroll with the aid of the Trackpoint(?)(nipple), which I don't use. I've read the Synaptics wiki article about how to configure the Trackpad via /etc/sysctl.conf and the latest configuration I've come up with is as follows:

# $FreeBSD: releng/12.2/sbin/sysctl/sysctl.conf 337624 2018-08-11 13:28:03Z brd $
#
# This file is read when going to multi-user and its contents piped thru
# ``sysctl'' to adjust kernel values. ``man 5 sysctl.conf'' for details.
#

#DEFAULT SECURITY AND OTHER SETTINGS
# Uncomment this to prevent users from seeing information about processes that
# are being run under another UID.
#security.bsd.see_other_uids=0
security.bsd.see_other_uids=0
security.bsd.see_other_gids=0
security.bsd.see_jail_proc=0
security.bsd.unprivileged_read_msgbuf=0
security.bsd.unprivileged_proc_debug=0
kern.randompid=1
vfs.zfs.min_auto_ashift=12

#MAKE DESKTOP MORE RESPONSIVE UNDER HIGH CPU LOAD
kern.sched.preempt_tresh=224

#DISABLE ANNOYING SYSTEM BEEP
hw.syscons.bell=0
kern.vt.enable_bell=0

#ENTER SUSPEND (S3) ON LID CLOSE
hw.acpi.lid_switch_state=S3

#HORIZONTAL SCROLLING
hw.psm.synaptics.vscroll_hor_area=1300

#PALM DETECTION
#FINGER PRESSURE
hw.psm.synaptics.min_pressure=80
hw.psm.synaptics.max_pressure=255

#FINGER WIDTH
hw.psm.synaptics.max_width=10

#MOVEMENT SCROLLING
#hw.psm.synaptics.weight_current=3
#hw.psm.synaptics.weight_previous=6
#hw.psm.synaptics.weight_previous_na=20
#hw.psm.synaptics.weight_len_squared=2000

#hw.psm.synaptics.div_min=9
#hw.psm.synaptics.div_max=17
#hw.psm.synaptics.div_max_na=30
#hw.psm.synaptics.div_len=100

#MULTIPLICATOR (TO INCREASE PRECISION)
#hw.psm.synaptics.multiplicator=10000

#TOUCHPAD BORDERS
#hw.psm.synaptics.margin_top=200
#hw.psm.synaptics.margin_right=200
#hw.psm.synaptics.margin_bottom=200
#hw.psm.synaptics.margin_left=200

#hw.psm.synaptics.na_top=1783
#hw.psm.synaptics.na_right=563
#hw.psm.synaptics.na_bottom=1408
#hw.psm.synaptics.na_left=1600

#POINTS HISTORY
#hw.psm.synaptics.window_min=4
#hw.psm.synaptics.window_max=10

#TAP AND TAP-HOLD
#hw.psm.synaptics.tap_max_delta=80
#hw.psm.synaptics.tap_min_queue=2

#hw.psm.synaptics.taphold_timeout=125000

#VIRTUAL SCROLLING
#hw.psm.synaptics.vscroll_hor_area=1300
#hw.psm.synaptics.vscroll_ver_area="-600"
#hw.psm.synaptics.vscroll_min_delta=50
#hw.psm.synaptics.vscroll_div_min=100
#hw.psm.synaptics.vscroll_div_max=150

For a time, I was unsure where the quoted values/toggles belong, inside /etc/sysctl.conf or /boot/loader.conf? Well, now I'm pretty sure they're sysctl commands and therefore belong inside sysctl.conf. Although most of the values are currently commented out, I've had them active before, played with them quite a lot but NEVER managed to end up with usable configuration. What bothers me most about the trackpad is the LACK of
1) palm rejection while typing (my god, Is it annoying)
2) two finger scrolling (vertical)
3) middle button support
I can live with the trackpad not being perfect but I can hardly use the laptop when I'm constantly forced to correct myself because my palm keeps moving the cursor around. Another error I find with these Trackpad settings is that after completing the boot sequence, I get the following error messages (from dmesg -a | less):
sysctl: unknown oid 'kern.sched.preempt_tresh' at line 20
sysctl: unknown oid 'hw.psm.synaptics.vscroll_hor_area' at line 30
sysctl: unknown oid 'hw.psm.synaptics.min_pressure' at line 34
sysctl: unknown oid 'hw.psm.synaptics.max_pressure' at line 35
sysctl: unknown oid 'hw.psm.synaptics.max_width' at line 38
Starting background file system checks in 60 seconds.
Obviously, they correspond to the toggles I have active in /etc/sysctl.conf and I fear I'm somehow doing it all wrong.

I've discovered I can toggle sound output with:
"sysctl hw.snd.default_unit=0" (inbuilt speakers)
"sysctl hw.snd.default_unit=1" (headphone jack)
"sysctl hw.snd.default_unit=2" (Intel HDMI 8ch)
but that's not exactly optimal.
The audio driver I have in use is currently (from rc.conf):
"sound_load="YES""
"snd_hda_load="YES""
Other from being quite quiet and NOT switching output when I plug in headphones, It seems to work OK-ish.

[USER=50089]Lars Skogstad[/USER]
Thank you very much for your comment. I'm looking forward to the write up you've mentioned. I've already talked about the Trackpad at lenght in this post but the Wireless, well that's a special story...

I fiddled with the wireless A LOT until I finally more or less gave up on getting anything more than a -11g connection with shit speeds. It works but I'm certainly not about to settle for this because, although my wireless AP is cheap 11n device, I'm not about to have all the rest of my wirelessly connected devices downclocked to -11g because FreeBSD's Intel wifi driver is crap. I've already devised a devilish plan but have sadly lacked the time to put it into action - I'm planning on runing modest Alpine Linux VM immediately upon the bootup of the FreeBSD host and having my Intel 3165 PCIe card passed through to it. I'll set networking inside the VM so that the FreeBSD host will be able to connect to the internet through it. Running the card with the Linux driver should (in my experience) allow for full tilt 11ac speeds. The card also supports Bluetooth which also operates nicely inside Linux but I've yet to come up with a plan how to use it in this way.

Here are my complete config files:
rc.conf
#
sshd_enable="YES"
powerd_enable="YES"
#moused_enable="YES"
#moused_flags="-VH"
zfs_enable="YES"
# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="AUTO"
#SYNC CLOCK ON BOOT
#ntpd_enable="YES"
#ntpd_flags="-g"
ntpdate_enable="YES"
ntpdate_hosts="1.si.pool.ntp.org"
#BLUETOOTH (does not work)
hcsecd_enable="YES"
sdpd_enable="YES"
#PRINTING (install 'print/cups')
#cupsd_enable="YES"
sendmail_enable="NONE"
syslogd_flags="-ss"
clear_tmp_enable="YES"
ifconfig_em0="DHCP"
#DON'T HOLD BOOT DUE TO DHCP
background_dhclient="YES"
#INTEL GPU
kld_list="/boot/modules/i915kms.ko"
#WIRELESS
wlans_iwm0="wlan0"
ifconfig_wlan0="WPA DHCP powersave"
create_args_wlan0="country SI regdomain ETSI"
#AUDIO
sound_load="YES"
snd_hda_load="YES"
#GRAPHICAL DESKTOP AND WINDOW MANAGER
dbus_enable="YES"
hald_enable="YES"
#xdm_enable="YES"
sddm_enable="YES"
#VIRTUALBOX NETWORKING
vboxnet_enable="YES"
#VIRTUALBOX USB SUPPORT
devfs_system_ruleset="system"
ntpd_program="/usr/local/sbin/ntpd"
ntpdate_program="/usr/local/sbin/ntpdate"
#VIRTUALBOX GUEST ADDITIONS
vboxguest_enable="YES"
vboxservice_enable="YES"
#PRINTER SETUP (doesn't work)
lpd_enable="YES"
devfs_system_ruleset="system"

loader.conf
aesni_load="YES"
geom_eli_load="YES"
security.bsd.allow_destructive_dtrace=0
kern.geom.label.disk_ident.enable="0"
kern.geom.label.gptid.enable="0"
opensolaris_load="YES"
zfs_load="YES"
#if_iwm_load="YES"
wlan_wep_load="YES"
wlan_ccmp_load="YES"
wlan_tkip_load="YES"
#iwm_3160fw_load="YES"
coretemp_load="YES"
acpi_video_load="YES"
acpi_ibm_load="YES"
#VIRTUALBOX
vboxrv_load="YES"
sysctlinfo_load="YES"
#LENOVO THINKPAD TRACKPAD SETTINGS
hw.psm.synaptics_support=0 #disabled due to Xorg
 

Lars Skogstad

Active Member

Reaction score: 41
Messages: 103

Ceteris: FreeBSD Wiki - Laptops/Thinkpad_470

There is my setup on the laptop I have been using. I think all the .conf files is uploaded to the site.
Here you have 2 links regarding the libinput for touchpad. It seems it's merged into the default xorg-server now so it should be more easy to set it up properly now.

https://www.davidschlachter.com/misc/t480-freebsd
https://www.reddit.com/r/freebsd/comments/hzc5aj View: https://www.reddit.com/r/freebsd/comments/hzc5aj/touchpad_configuration/


---

Sound related:
https://unix.stackexchange.com/ques...ween-sound-in-speaker-and-built-in-headphones
- This might help you with automatic changing from speakers -> headphones and vice versa.

--

https://www.freebsd.org/cgi/man.cgi?acpi_ibm
Have you tried loading in the ACPI_IBM?

Code:
     Depending on the ThinkPad model, event codes may vary. 
     On    a ThinkPad T41p these    are as follows:

       0x01          Fn + F1
       0x02          Fn + F2
       0x03          Fn + F3 (LCD backlight)
       0x04          Fn + F4 (Suspend to RAM)
       0x05          Fn + F5 (Bluetooth)
       0x06          Fn + F6
       0x07          Fn + F7 (Screen expand)
       0x08          Fn + F8
       0x09          Fn + F9
       0x0a          Fn + F10
       0x0b          Fn + F11
       0x0c          Fn + F12 (Suspend    to disk)
       0x0d          Fn + Backspace
       0x0e          Fn + Insert
       0x0f          Fn + Delete
       0x10          Fn + Home    (Brightness up)
       0x11          Fn + End (Brightness down)
       0x12          Fn + PageUp (ThinkLight)
       0x13          Fn + PageDown
       0x14          Fn + Space (Zoom)
       0x15          Volume Up
       0x16          Volume Down
       0x17          Mute
       0x18          Access IBM Button


It seems it's a bit different for certain ThinkPad models, some supports certain stuff and others don't.
 

Argentum

Active Member

Reaction score: 32
Messages: 101

I need a usable track/touchpad, some function keys (to regulate screen brightness, volume at least) and some kind of power management, allowing the machine to spin down while not under load and also allowing me to put it so sleep when need be. I also need a basic sound output via the inbuilt speakers as well as the 3.5mm (headphone) jack. I would also like to use a USB printer & scanner or two and have the ability to spin up virtual machines via bhyve, VirtualBox and have them pass through (at least) USB. I can live without the card reader and I can deal with the "reboot" command not executing a real reboot, instead forcing me to shutdown an restart manually. I'm hoping that's not too much to ask as otherwise I might be forced to retract to Linux.
Hello!

I am writing this reply on Lenovo ThinkPad, using FreeBSD 12.2 and MATE GUI. The touch-pad works. This came out of the box. No special action was needed. It works as well as mouse and built in sound.
 
OP
ceteris

ceteris

New Member


Messages: 5

[USER=61182]Argentum[/USER]:
I'm not too picky when it comes to desktops so I wouldn't hesitate switching to MATE if that was what was needed for a fully functional Trackpad, but I doubt it. My Trackpad works out the box as well but the middle click button is dead.

I've not had time to delve into things with more dedication but I do have a little update (for those who might be dealing with similar issues):

Here are some of the things you can do if faced with too low a sound volume on Intel Audio:
- Set volume to 100% by issuing command "mixer vol 100:100".
- Set pcm to 100% by issuing command "mixer pcm 100:100".
If maximizing those two parameters still doesn't produce the adequate volume, you can also lower the value of the following sysctl:
- "sysctl hw.snd.vpc_0db"
I'm not skilled enough to talk about what these settings do exactly but they do
seem to work with no ill effects, just be sure not to lower "hw.snd.vpc_0db" too much. In my case that means anything below ~10 (the sound starts clipping).
 
Top