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) |
BE SURE TO GENERATE THE USB RECOVERY when prompted
Boot the USB Recovery created during the initial installation
Boot end-user first time system
Partition and Create Logical Volumes
make Steam (and Lutris) games partition
Steam and Epic Game Save Dir (case insensitive)
Configure Docker Credential Store
Synchronize Data from old laptops
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
Post a Comment