====== Dell_XPS_15_(9530) ====== ===== Installing Sabayon ===== * The most recent live cds use an older i915 driver that causes an unrecoverable black screen when booting in any mode. Add ''nomodeset'' to the kernel boot line. * Be sure to install using ethernet, since there are no wireless drivers out of the box on 13.08. ==== Wireless ==== Install a kernel >= 3.11.6 and make sure ''CONFIG_IWLMVM'' is enabled. the ''iwlwifi'' module should be automatically loaded and wifi just works. ==== Audio ==== Mostly just works. There are two physical sound cards, both driven by the ''snd-hda-intel'' driver. The HDMI card is always detected first, and the analog (speakers and headphones) second. Reorder these to make the analog the default by ''/etc/modprobe.d/alsa.conf'' to contain the following options snd-hda-intel index=1,0 KDE defaults to letting the multimedia volume keys (Fn+F1/F2/F3) control the HDMI card by default. Switch this to the analog card by opening KMix and setting ''Settings->Select Master Channel...->Built-in Audio Analog Stereo''. If there's no sound when logging into plasma (the volume icon has a red cross through it, and the kde settings shows no devices), make sure pulseaudio user daemon is running, and if not start it one-time with ''pulseaudio -D'', ==== Graphics ==== After installing and upgrading to latest i915 driver, remove ''nomodeset'' from the kernel boot options. This will enable screen brightness control and fix sleep/resume. Install bumblebee and enable the service to use optimus. Run programs using ''optirun'' to enable the discrete graphics card. Nice feature, the screen brightness can be turned all the way down to zero, which turns the screen and backlight off. === DPI === Because of the high resolution, text will be very small by default. Change the DPI size in KDE to make all KDE applications well-behaved (konsole, plasma). Still working on fixing non-KDE programs such as chrome. ==== Bluetooth ==== * Enable the bluetooth systemctl enable bluetooth systemctl start bluetooth * Use ''bluetoothctl'' to enable the controller, scan and pair with devices, and connect # Start the shell bluetoothctl -a # Turn on the controller power on agent on default-agent # Scan for devices scan on # List available devices devices # Pair with a device pair $mac # Connect to the device connect $mac The error message: Nov 24 12:33:22 serenity.jellybean.sihnon.net dbus[1878]: [system] Rejected send message, 1 matched rules; type="method_call", sender=":1.81" (uid=0 pid=10758 comm="/usr/libexec/bluetooth/bluetoothd --noplugin=sap ") interface="org.bluez.MediaEndpoint1" member="SelectConfiguration" error name="(unset)" requested_reply="0" destination=":1.49" (uid=10001 pid=2994 comm="/usr/bin/pulseaudio --start ") Nov 24 12:33:22 serenity.jellybean.sihnon.net bluetoothd[10758]: Endpoint replied with an error: org.freedesktop.DBus.Error.AccessDenied is fixed by amending ''/etc/dbus-1/system.d/bluetooth.conf'' to match: (Info taken from: https://forums.opensuse.org/showthread.php/410722-how-do-i-fix-bluetooth-permissions-after-last-dbus-update) Set the preference for certain types of audio (e.g. ''Music'') to route through the bluetooth device when present using the ''Multimedia'' applet in KDE's control centre. ==== Touch screen ==== Out of the box, single touch input works but no gestures. This means you can touch to click, and drag to select. No scrolling, or pinch-to-zoom. Install and run ''touchegg'' to get multitouch gestures. ''touchegg'', ''touchegg-gui'' (configuration tool), and dependencies (''utouch-{evemu,frame,grail,geis}'') are in the sihnon portage overlay and community entropy repo. ==== USB ==== Just works. ===== Flashing BIOS ===== Taken from [[https://wiki.archlinux.org/index.php/Flashing_BIOS_from_Linux#Using_a_FreeDOS-provided_Disk_Image_+_USB_stick_on_Linux|Arch Wiki]] * Download the latest freedos version * Flash it to the USB stick with ''dd'' * Mount and copy in the BIOS executable from [[https://www.dell.com/support/home/uk/en/ukbsdt1/product-support/product/xps-15-9530/drivers|Dell website]] * Reboot into freedos, select the ''no drivers'' option (the default option leads to exceptions and the flash failing) * It might also be necessary to disable Intel VTx, not confirmed; don't forget to re-enable after ===== ZFS root ===== * Prepare the partition table manually - BIOS boot for grub/mbr, 1M - ext2 for /boot, 1G - vfat for /efi, 1G - zfs partition - ext4 temporary filesystem for / during install * Install sabayon to the ext4 partition at the end, but don't auto reboot at the end * Create the ''zpool'' with ''zpool create rpool /dev/disk/by-id/wwn-*-part4'' * Create the ''root'', ''root/home'' and ''root/var'' filesystems within, with encrytion * Set ''root filesystem'' to not be mountable automatically with ''zfs set canmount=off rpool/root'' * Set the mountpoints for each filesystem: zfs set mountpoint=/ rpool/root zfs set mountpoint=/var rpool/root/var zfs set mountpoint=/home rpool/root/home * Mount the filesystems to arbitrary locations with: mkdir /mnt/sysimage mount -o zfsutil -t zfs rpool/root /mnt/sysimage/root mount -o zfsutil -t zfs rpool/root/home /mnt/sysimage/root/home mount -o zfsutil -t zfs rpool/rootvar /mnt/sysimage/root/var * Rsync the contents into the ZFS root: mkdir /mnt/temproot mount /dev/sda5 /mnt/temproot rsync -a /mnt/temproot/ /mnt/sysimage/ * Prepare dracut for zfs root booting: add_dracutmodules+="dracut-systemd systemd systemd-initrd zfs" * Chroot into the zfs root filesystem and rebuild the initramfs: dracut -f /boot/initramfs-genkernel-5.4.0-sabayon 5.4.0-sabayon * Remove the temporary partition * Add a swap partition at the very end of the disk * Extend the zfs partition to fill the remaining space * Reboot and pray Kernel package installations run ''sabayon-dract --rebuild x.y'', which invokes dracut with a bunch of module omissions including all the systemd ones needed for ZFS to work. Therefore whenever upgrading the kernel, be sure to run ''dracut -f /boot/initramfs-genkernel-x86_64-$(uname -r) $(uname -r)''. Grub 2.02-r3 ships a version of ''grub2-probe'' which can't handle ZFS properly. This means the generated grub config file will contain ''root=ZFS=/root'' instead of ''root=ZFS=rpool/root'' which breaks root filesystem mounting. After installing grub or any kernel package, fix grub,cfg before rebooting. ====== Troubleshooting ====== ===== Failure to boot from ZFS root ===== Errors on startup about system not having been booted with systemd. This is a problem with the dracut initrd. Manual boot: * Edit grub kernel commandline to add ''rd.break=pre-mount'' and remove ''quiet splash'' * At the prompt, run: zpool import rpool zfs load-key rpool/root # Enter encryption passphrase mount -t zfs -o zfsutil rpool/root /sysroot mount -t zfs -o zfsutil rpool/root/home /sysroot/home mount -t zfs -o zfsutil rpool/root/var /sysroot/var mount -t zfs -o zfsutil rpool/root/docker /sysroot/var/lib/docker exit * After boot, regenerate the initrd dracut -f /boot/initramfs-genkernel-5.4.0-sabayon 5.4.0-sabayon Known issues: * Infinite loop of something complaining about system not having been booted with systemd, dbus error: Initramfs was built without systemd support, and needs rebuilding * Error that ''\'rpool/root\''' contains invalid characters and is not a valid filesystem name: ''/usr/lib/dracut/modules.d/90zfs/mount-zfs.sh'' contains errant single quotes, which need to be removed. Rebuild the initrd afterwards: # This: ask_for_password \ --tries 5 \ --prompt "Encrypted ZFS password for ${ENCRYPTIONROOT}: " \ --cmd "zfs load-key '${ENCRYPTIONROOT}'" # Should be: ask_for_password \ --tries 5 \ --prompt "Encrypted ZFS password for ${ENCRYPTIONROOT}: " \ --cmd "zfs load-key ${ENCRYPTIONROOT}" ===== NetworkManager not authorized to control networking ===== * Ensure interactive user is a member of the ''network'' group (logout and in again) * Ensure polkit permits netdev group to control networkmanager (changes take immediate effect): polkit.addRule(function(action, subject) { if (action.id.indexOf("org.freedesktop.NetworkManager.") == 0 && subject.isInGroup("network")) { return polkit.Result.YES; } });