Dell Precision Mobile Workstation: 7750

Introduction

This is the first computer that I've ever purchased with a version of Linux installed from the factory.  It is both terrifying and exhilarating.

Dell's shipping process is borked.  After placing my order and waiting close to 3 weeks, I got a shipping notification on Sunday 6/21 with an anticipated delivery date of 6/24.  6/24 came and went.  After 2 support order tickets with Dell, I am no clearer on the problem.  Eventually I got an email from FedEx that my shipment was actually received on Thursday 6/25.  With 2 day shipping I had to wait through another weekend to get my order.

This beast is no cheap laptop but I rationalized the expense through several factors: 1) I only upgrade my primary computer once every 5 years or so;  2) I have employer money to offset; 3) I have stimulus money to offset.

I tried to get the best non-upgradable components that I could afford now and saved the user upgradable components for later purchases.  Highlights:

210-AVUS

Mobile Precision 7750 CTO BASE

391-BFHY

17.3-inch, UHD, 3840 x 2160, 60 Hz, Anti-Glare, Non Touchscreen, 100% Adobe, 500 Nits, HDR400, WVA

555-BFTF

Intel Wi-Fi 6 AX201 Wireless Card

605-BBNT

Ubuntu Linux 18.04

354-BBCL

Bottom Cover with Smart Card and SSD Door Opening

346-BGIX

Palmrest with Smart Card, Fingerprint reader, & NFC

583-BGIN

Internal Dual Pointing Backlit Keyboard, US English

400-BJRB

M.2 256GB PCIe NVMe Class 35 Solid State Drive

370-AFFC

8GB, 1X8GB, DDR4 2933Mhz Non-ECC Memory

325-BDSS

Bezel,IR Cam, Mic, Non-Touch

490-BFUY

NVIDIA Quadro 5000

329-BEWF

Intel Core i7-10875H (8 Core, 16MB Cache, 2.30 GHz to 5.10 GHz, 45W, vPro)

379-BDWV

Intel Core Processor i7-10875H (8 Core, 16MB Cache, 2.30 GHz to 5.10 GHz, 45W, vPro)

Introduction

BEFORE First Boot

Make Bitwise Factory Backup

BIOS Changes

First Boot

BE SURE TO GENERATE THE USB RECOVERY when prompted

Update everything

Update Firmware

Reboot

Reinstall System with LVM

Boot the USB Recovery created during the initial installation

Boot into fresh system

Boot end-user first time system

Boot Ubuntu

Update all

Enable the Super Key

Install Xubuntu Desktop

Configure LVM and FIlesystems

Partition and Create Logical Volumes

make Steam (and Lutris) games partition

configure LUKS encrypted home

Install Software

General Packages I like

Additional Fonts

Gaming and Misc

Steam and Epic Game Save Dir (case insensitive)

Lutris

Additional XFCE4 Packages

Commercial Software

Codeweavers Crossover

Jetbrains Snaps

Perforce

Golang

Docker / Docker-Compose

Configure Docker Credential Store

Other Snaps

Fstrim

ZRam

RamDisk

PIN Entry

RVM

Synchronize Data from old laptops

Steam (+ Epic) Games

BTRFS Deduplication

System Tuning

inotify

Configure XFCE

Touchpad Toggle via hotkey

Screen Xrandr Switching

BEFORE First Boot

Make Bitwise Factory Backup

I inserted a USB drive with Xubuntu 20.04 on the left side USB A port.  I powered the laptop and hit F12 to bring up the boot menu.  I chose the EFI boot for the Xubuntu drive and started the boot.

After the system came up, I attached an external USB hard drive to the system and mounted the drive using the file manager (the external drive is encrypted and the file manager handled all the setup).

Next I installed pbzip2:   sudo apt-get install pbzip2

BEING VERY CAREFUL, I made bitwise copies of the SSD;

sudo su -

cd /media/myencrypteddrive/dell-7750 || exit

fdisk -l >fdisk-l.txt

lsblk >lsblk.txt

dd if=/dev/nvme0n1 of=nvme0n1.bootsect.img bs=1M count=1

for PART in nvme0n1p1 nvme0n1p2 nvme0n1p3; do

   echo $PART

   time pbzip2 -9c </dev/${PART} >${PART}.bz2

done

pbzip2 -tv -- *bz2

BIOS Changes

Boot again, press F2.

General

Boot Sequence

Deselect Onboard NIC (x2)

System Configuration

        SMART Reporting

                Enable SMART Reporting

Power Management

Thermal Management

Ultra Performance

POST Behavior

Fn lock options

Lock Mode Disabled/Standard

Fastboot

Thorough

Extend BIOS POST Time

5 seconds

First Boot

Follow the prompts

        BE SURE TO GENERATE THE USB RECOVERY when prompted

Update everything

        (I do this even though I'm going to nuke the system shortly because I want the latest before I try firmware updates)

sudo apt-get -y update; sudo apt-get -y dist-upgrade; sudo apt-get -y autoremove; sudo apt-get -y autoclean

init 6

Update Firmware

sudo fwupdmgr get-updates

sudo fwupdmgr update

Reboot

Reinstall System with LVM

(I have had problems with the step if the laptop was running for too long of a period prior.  I have had luck powering off the laptop and letting it cool to room temp before proceeding.  Otherwise I get CPU throttling in the final stage when it is applying updates.  Always in snap related stuff and it never finishes

Oddly this might be caused by using the Ubuntu update manager but not when using apt directly)

Boot the USB Recovery created during the initial installation

                Choose Customize Installation Radio Button

                Choose Erase disk and Install Ubuntu

                Select Use LVM with the new Ubuntu installation

        Reboot

Boot into fresh system

        Double click "Prepare for shipping to end user icon"

                Password is password

        Reboot

Boot end-user first time system

        Answer System Configuration questions as per your needs

Boot Ubuntu

Update all

sudo apt -y update

sudo apt -y dist-upgrade

sudo apt -y autoremove

sudo apt -y autoclean

sudo apt install openssh-server

Enable the Super Key

(https://goinglinux.com/articles/ConfigureXPS13DeveloperEdition_en.htm)

# Remove the package named "dell-super-key" with the following command:

sudo apt-get -y remove dell-super-key

# Enter the user password when prompted and confirm the install by pressing y on the keyboard.

# Install a utility that will map the super key’s function to open the Dash menu by typing in the following command:

sudo apt-get -y install compizconfig-settings-manager

Install Xubuntu Desktop

(includes some package from recommends)

sudo apt install xubuntu-desktop xserver-xorg-hwe-18.04 xubuntu-core xserver-xorg-input-synaptics fancontrol  xscreensaver xscreensaver-data xscreensaver-data-extra xscreensaver-gl xscreensaver-gl-extra xscreensaver-screensaver-bsod xscreensaver-screensaver-dizzy pm-utils read-edid

sudo init 6; exit  # to ensure everything boots correctly

Configure LVM and FIlesystems

(be super careful with the device paths they might not match what I had)

Partition and Create Logical Volumes

# partition

sudo fdisk -l # find the unused 1TB SSD

sudo gdisk /dev/nvme0n1

## create 1TB partition, label type 8e00 (Linux LVM)

# configure lvm

sudo pvcreate -v /dev/nvme0n1p1

sudo vgextend ubuntu-vg /dev/nvme0n1p1

sudo lvcreate -v -L 400G --name steam ubuntu-vg

sudo lvcreate -v -L 100G --name home ubuntu-vg

make Steam (and Lutris) games partition

sudo mkfs.btrfs -L Steam /dev/mapper/ubuntu--vg-steam

sudoedit /etc/fstab

## /dev/mapper/ubuntu--vg-steam /Steam          btrfs    defaults,compress=lzo        0       2

sudo mkdir /Steam

sudo chmod 0755 /Steam

sudo mount -a

sudo chown -R root:games /Steam

sudo chmod -R 0775 /Steam

configure LUKS encrypted home

# create new user for administrative purposes, ensure user has sudo privileges

# log out entirely from primary account, kill any remaining processes for that user

# log back in with the new administrative user

export PARTITION=/dev/mapper/ubuntu--vg-home

export PRIMARY_USER=username

sudo cryptsetup --verbose --verify-passphrase luksFormat ${PARTITION:?MISSING}

## (use the password of the PRIMARY_USER for the key)

sudo cryptsetup luksOpen ${PARTITION:?MISSING} EncryptedHome

sudo mkfs.ext4 -L EncryptedHome /dev/mapper/EncryptedHome

sudo mkdir -m 0755 -p /tmp/temphome

sudo mount /dev/mapper/EncryptedHome /tmp/temphome

sudo chown -R ${PRIMARY_USER:?MISSING}:${PRIMARY_USER:?MISSING} /tmp/temphome

sudo umount /tmp/temphome

sudo cryptsetup luksClose EncryptedHome

sudo apt install libpam-mount

EDITOR="vi" sudoedit /etc/security/pam_mount.conf.xml

##  <volume user="username" fstype="crypt" path="/dev/mapper/ubuntu--vg-home" mountpoint="/home/username" options="fsck,relatime" />

sudo mv /home/${PRIMARY_USER} /home/${PRIMARY_USER}.oem

ssh ${PRIMARY_USER}@localhost df -h /home/${PRIMARY_USER} ## encrypted right?

Install Software

General Packages I like

sudo apt install xscreensaver xscreensaver-data-extra vim xscreensaver-gl xscreensaver-gl-extra nedit xbacklight curl rxvt-unicode-256color rxvt screen fortune-mod xscreensaver-data openconnect network-manager-openconnect{,-gnome} openjdk-8-jdk ruby awscli xfce4-battery-plugin xfce4-cpufreq-plugin xfce4-datetime-plugin xfce4-diskperf-plugin xfce4-goodies xfce4-sensors-plugin rdesktop openssh-server dump ri ruby-dev bundler xsensors attr quota cifs-utils ntp devilspie2 dos2unix terminator fortunes fonts-linuxlibertine ttf-bitstream-vera xdaliclock fortunes fortunes-bofh-excuses fortunes-debian-hints fortunes-min fortunes-off fortunes-ubuntu-server steam gedit gedit-plugins pbzip2 pixz zlib1g-dev libmysqlclient-dev autoconf automake autotools-dev btrfs-tools bzr cryptsetup cu firefox-locale-en freerdp2-x11 gamin iotop binfmt-support ca-certificates-mono cabextract cdparanoia default-mysql-client fakeroot

Additional Fonts

# how I search for more fonts to install

apt-cache search fonts- | awk '{print $1}' >/tmp/avail.txt

dpkg -l | grep fonts- | awk '{ print $2 }' >/tmp/installed

vi /tmp/installed

# add ^ to beginning of all lines

# add $ to end of all lines

grep -E -v -f /tmp/installed /tmp/avail.txt

sudo apt-get install fonts-font-awesome fonts-emojione fonts-georgewilliams fonts-gfs-artemisia fonts-gfs-baskerville fonts-gfs-bodoni-classic fonts-gfs-complutum fonts-gfs-didot fonts-gfs-didot-classic fonts-gfs-gazis fonts-gfs-neohellenic fonts-gfs-olga fonts-gfs-porson fonts-gfs-solomos fonts-gfs-theokritos fonts-noto fonts-noto fonts-ubuntu-font-family-console fonts-ubuntu-title fonts-wine xfonts-100dpi-transcoded xfonts-75dpi xfonts-75dpi-transcoded xfonts-a12k12 xfonts-terminus xfonts-terminus-dos xfonts-terminus-oblique xfonts-x3270-misc

sudo fc-cache -f -v

Gaming and Misc

Steam and Epic Game Save Dir (case insensitive)

sudo mkdir -m 0755 -p /GameSaveDir

sudo dd if=/dev/zero of=/GameSaveDir/saved-games.dsk bs=2G count=1

sudo mkfs.vfat -v /GameSaveDir/saved-games.dsk

sudoedit /etc/fstab

## use the uid of the primary player and the gid of the games group

## /GameSaveDir/saved-games.dsk /mnt/savedatas vfat loop,uid=1001,gid=60,umask=1002 0 0

sudo mkdir -p -m 0755 /mnt/savedatas

sudo mount -a

df -h /mnt/savedatas

Lutris

sudo apt-get -y update

sudo apt-get -y dist-upgrade

sudo apt-get -y autoremove

sudo apt-get -y autoclean

sudo dpkg --add-architecture i386

sudo apt update

sudo add-apt-repository ppa:lutris-team/lutris

sudo apt-get update

sudo apt-get install lutris --install-suggests

sudo apt install libvulkan1 libvulkan1:i386

wget -nc https://dl.winehq.org/wine-builds/winehq.key

sudo apt-key add winehq.key

wget https://download.opensuse.org/repositories/Emulators:/Wine:/Debian/xUbuntu_18.04/amd64/libfaudio0_19.07-0~bionic_amd64.deb

wget https://download.opensuse.org/repositories/Emulators:/Wine:/Debian/xUbuntu_18.04/i386/libfaudio0_19.07-0~bionic_i386.deb

sudo gdebi libfaudio0_19.07-0~bionic_amd64.deb

sudo gdebi libfaudio0_19.07-0~bionic_i386.deb

sudo apt-add-repository 'deb https://dl.winehq.org/wine-builds/ubuntu/ bionic main'

sudo apt-get update

sudo apt-get install --install-recommends winehq-stable wine-stable wine-stable-i386 wine-stable-amd64

sudo apt-get install libgnutls30:i386 libldap-2.4-2:i386 libgpg-error0:i386 libxml2:i386 libasound2-plugins:i386 libsdl2-2.0-0:i386 libfreetype6:i386 libdbus-1-3:i386 libsqlite3-0:i386

sudo apt install libgl1-mesa-glx:i386 libgl1-mesa-dri:i386

sudo apt install mesa-vulkan-drivers mesa-vulkan-drivers:i386

sudo apt-get install git

Additional XFCE4 Packages

apt-cache search xfce4 | awk '{ print $1 }' >/tmp/avail.txt

dpkg -l | grep xfce4 | awk '{ print $2 }' | xargs -I {} echo \^{}\$ >/tmp/installed

grep -E -v -f /tmp/installed /tmp/avail.txt

sudo apt-get install xfce4-pulseaudio-plugin xfce4-screenshooter-plugin xfce4-volumed xfwm4-theme-breeze xfwm4-themes

Commercial Software

Codeweavers Crossover

sudo dpkg --add-architecture i386

sudo apt update

sudo apt-get install gdebi

sudo gdebi crossover_19.0.2-1.deb

Jetbrains Snaps

sudo snap install clion --classic;

sudo snap install goland --classic;

sudo snap install rubymine --classic;

sudo snap install pycharm-professional --classic;

Perforce

wget -qO - https://package.perforce.com/perforce.pubkey | sudo apt-key add -

EDITOR=vim sudoedit /etc/apt/sources.list.d/perforce.list

## deb http://package.perforce.com/apt/ubuntu bionic release

sudo apt update

sudo apt-get install helix-cli helix-cli-base

cd /usr/local || exit

( umask 022 sudo tar zxvf /tmp/p4v.tgz )

export P4VER=p4v-2020.1.1966006

export ALT_VER=20200608

sudo chown -R bin:bin ${P4VER}

sudo mkdir -m 0755 -p /usr/share/icons/perforce

sudo update-alternatives --install /usr/local/bin/p4v p4v /usr/local/${P4VER}/bin/p4v ${ALT_VER} \

   --slave /usr/share/icons/perforce/p4merge.svg p4merge.svg /usr/local/${P4VER}/lib/P4VResources/icons/p4merge.svg \

   --slave /usr/share/icons/perforce/p4v.svg p4v.svg /usr/local/${P4VER}/lib/P4VResources/icons/p4v.svg \

   --slave /usr/share/icons/perforce/p4admin.svg p4admin.svg /usr/local/${P4VER}/lib/P4VResources/icons/p4admin.svg

sudo update-alternatives --display p4v

Golang

export GOVER=1.14

export GOMINOR=.4

cd /tmp || exit

wget https://dl.google.com/go/go${GOVER}${GOMINOR}.linux-amd64.tar.gz

( umask 022 tar zxf go${GOVER}${GOMINOR}.linux-amd64.tar.gz )

mv go go${GOVER}

sudo rm -rf /usr/local/go${GOVER}

sudo mv go${GOVER} /usr/local

sudo chown -R bin:bin /usr/local/go${GOVER}

vim ~/.bashrc

export GOROOT=/usr/local/go1.14

export PATH=${PATH}:${GOROOT}/bin

Docker / Docker-Compose

sudo apt-get install docker docker.io

EDITOR=vim sudoedit /lib/systemd/system/docker.service

## this is my corporate dns server for access to internal rubygems and git

## ExecStart=/usr/bin/dockerd --dns 172.16.8.181 -H fd://

sudo systemctl daemon-reload

sudo systemctl restart docker.service

cd /tmp || exit

curl -L "https://github.com/docker/compose/releases/download/1.26.1/docker-compose-$(uname -s)-$(uname -m)" -o /tmp/docker-compose

sudo mv /tmp/docker-compose /usr/local/bin

sudo chown bin:bin /usr/local/bin/docker-compose

sudo chmod 0755 /usr/local/bin/docker-compose

Configure Docker Credential Store

## configure docker credential store

curl -sL https://github.com/docker/docker-credential-helpers/releases/download/v0.6.0/docker-credential-secretservice-v0.6.0-amd64.tar.gz >/tmp/dcs.tar

mkdir -p "${HOME}"/{bin,.docker}

cd "${HOME}"/bin || exit

tar xf /tmp/dcs.tar

chmod 700 docker-credential-secretservice

cd || exit

cat >"${HOME}"/.docker/config.json <<'EOF'

{

 "credsStore": "secretservice"

}

EOF

docker logout

Other Snaps

sudo snap install code --classic;

sudo snap install postman;

sudo snap install micropolis;

sudo snap install micropolisj;

Fstrim

sudo apt install smartmontools

ZRam

sudo apt-get install zram-config

RamDisk

sudo cp /usr/share/systemd/tmp.mount /etc/systemd/system/

sudo systemctl enable tmp.mount

PIN Entry

sudo apt install pinentry-tty

sudo update-alternatives --config pinentry

RVM

gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB

\curl -sSL https://get.rvm.io | bash -s stable --ruby

Synchronize Data from old laptops

Steam (+ Epic) Games

cd /Steam && RSYNC_CONNECT_PROG='ssh -o "Compression no" -c aes128-ctr %H' time rsync -a --delete --progress * 6.6.6.11:/Steam/.

BTRFS Deduplication

sudo apt install duperemove fdupes

ssh 6.6.6.11 "btrfs fi df /Steam/ > /tmp/before; cd /Steam && time fdupes -r /Steam/ | duperemove --fdupes; btrfs fi df /Steam/ > /tmp/after"

## Before:  Data, single: total=394.01GiB, used=393.21GiB

## After:   Data, single: total=332.01GiB, used=160.29GiB

System Tuning

inotify

EDITOR=vi sudoedit /etc/sysctl.d/idea.conf

## fs.inotify.max_user_watches = 524288

sudo sysctl -p --system

Configure XFCE

Touchpad Toggle via hotkey

Open XFCE -> Window Manager

Clear things bound to F9

Create new script in ${HOME}/bin/toggle-touchpad.sh

#!/usr/bin/env bash

TOUCH_DELL="DELL09C4:00 0488:120A Touchpad"

TOUCH_PS2="PS/2 Generic Mouse"

ICON_PATH="/usr/share/notify-osd/icons/Humanity/scalable/status"

OFF_ICON=${ICON_PATH}/notification-gpm-mouse-000.svg

ON_ICON=${ICON_PATH}/notification-gpm-mouse-100.svg

function notify() {

 notify-send --urgency=low --icon="${1:?MISSING}" "${2:?MISSING_SUMMARY}" "${3:?MISSING_BODY}"

}

function enable() {

 xinput enable "${1:?MISSING}"

 notify ${ON_ICON} ENABLED "ENABLED ${2:?MISSING}"

}

function disable() {

 xinput disable "${1:?MISSING}"

 notify ${OFF_ICON} DISABLED "DISABLED ${2:?MISSING}"

}

function process() {

 if [ "$(xinput list-props "${1:?MISSING}" | grep -F 'Device Enabled' | awk -F: '{ print $2 }' | head -1)" -eq 0 ]; then

   enable "${1:?MISSING}" "${2:?MISSING}"

 else

   disable "${1:?MISSING}" "${2:?MISSING}"

 fi

}

process "${TOUCH_DELL}" "DELL"

#process "${TOUCH_PS2}" "PS2"

exit 0

Open XFCE -> Keyboard

Create new entry for ${HOME}/bin/toggle-touchpad.sh

Bind to Super F9

Laptop Display Toggle

sudo apt install arandr

xfce4-display-settings

## configure displays with laptop off: dell-7750-nolaptop.sh

arandr

## save config with laptop off: dell-7750-nolaptop.sh

xfce4-display-settings

## configure displays with laptop on: dell-7750-yeslaptop.sh

arandr

## save config with laptop on: dell-7750-yeslaptop.sh

# Open XFCE Window Manager -> Keyboard

## Clear F8 related hotkeys (Workspace 8)

# Create toggle script

cat > ${HOME}/bin/toggle-displays.sh <<'EOF'

#!/usr/bin/env bash

ICON_PATH="/usr/share/notify-osd/icons/Humanity/scalable/status"

ON_ICON=${ICON_PATH}/notification-extend-display.svg

OFF_ICON=${ICON_PATH}/notification-external-display-only.svg

function notify() {

   notify-send --urgency=low --icon="${1:?MISSING}" "${2:?MISSING_SUMMARY}" "${3:?MISSING_BODY}"

}

if xrandr | grep -qE 'eDP-1-1 connected [0-9]'; then

   ${HOME}/.screenlayout/dell-7750-nolaptop.sh

   notify ${OFF_ICON} DISABLED DISABLED

else

   ${HOME}/.screenlayout/dell-7750-yeslaptop.sh

   notify ${ON_ICON} ENABLED ENABLED

fi

EOF

chmod 700 /home/username/bin/toggle-displays.sh

# Open XFCE Keyboard

## add /home/username/bin/toggle-display.sh on Super+F8

Comments

Popular posts from this blog

Xubuntu Home Server on Dell XPS 13 9370

Cygwin + syslog-ng

Installing Fedora 21 on a (late 2014) Mac Mini