Merge pull request #22 from linux-surface/feature/setup-script
Setup script
This commit is contained in:
commit
3ca250a015
|
@ -85,12 +85,12 @@ If you want to compile the kernel yourself (e.g. if your distribution is not sup
|
|||
|
||||
* If you are getting stuck at boot when loading the ramdisk, you need to install the Processor Microcode Firmware for Intel CPUs (usually found under Additional Drivers in Software and Updates).
|
||||
* Do not install TLP! It can cause slowdowns, laggy performance, and occasional hangs! You have been warned.
|
||||
* If you chose to use hibernate over suspend, please follow the instructions [here][hibernate-setup].
|
||||
* If you want to use hibernate instead of suspend, you need to create a swap partition or file, please follow your distribution's instructions (or [here][hibernate-setup]).
|
||||
|
||||
### Support
|
||||
|
||||
If you have questions or need support, please use our [Gitter Community][gitter]!
|
||||
For development related questions and discussions, please consider joining our IRC channel on freenode (`freenode/##linux-surface`).
|
||||
For development related questions and discussions, please consider joining our IRC channel on freenode (`freenode/##linux-surface`) or the [equivalent Matrix bridge](https://matrix.to/#/#freenode_##linux-surface:matrix.org).
|
||||
|
||||
[wiki-setup]: https://github.com/linux-surface/linux-surface/wiki/Installation-and-Setup
|
||||
[wiki-setup-post]: https://github.com/linux-surface/linux-surface/wiki/Installation-and-Setup#post-installation
|
||||
|
@ -103,5 +103,6 @@ For development related questions and discussions, please consider joining our I
|
|||
|
||||
[gitter]: https://gitter.im/linux-surface
|
||||
[hibernate-setup]: https://fitzcarraldoblog.wordpress.com/2018/07/14/configuring-lubuntu-18-04-to-enable-hibernation-using-a-swap-file
|
||||
[releases]: https://github.com/linux-surface/linux-surface/releases
|
||||
|
||||
[linux-surface-kernel]: https://github.com/linux-surface/kernel/
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
[main]
|
||||
plugins=ifupdown,keyfile,ofono
|
||||
#dns=dnsmasq
|
||||
|
||||
[ifupdown]
|
||||
managed=false
|
||||
|
||||
[connection]
|
||||
wifi.powersave = 2
|
||||
|
||||
[device]
|
||||
wifi.scan-rand-mac-address=false
|
5
root/etc/NetworkManager/conf.d/99-surface.conf
Normal file
5
root/etc/NetworkManager/conf.d/99-surface.conf
Normal file
|
@ -0,0 +1,5 @@
|
|||
[connection]
|
||||
wifi.powersave = 2
|
||||
|
||||
[device]
|
||||
wifi.scan-rand-mac-address=false
|
|
@ -1,2 +0,0 @@
|
|||
[connection]
|
||||
wifi.powersave = 2
|
|
@ -1,7 +0,0 @@
|
|||
#Section "Device"
|
||||
# Identifier "Intel Graphics"
|
||||
# Driver "intel"
|
||||
# Option "TripleBuffer" "true"
|
||||
# Option "TearFree" "true"
|
||||
# Option "DRI" "true"
|
||||
#EndSection
|
|
@ -1,21 +0,0 @@
|
|||
# List of modules that you want to include in your initramfs.
|
||||
# They will be loaded at boot time in the order below.
|
||||
#
|
||||
# Syntax: module_name [args ...]
|
||||
#
|
||||
# You must run update-initramfs(8) to effect this change.
|
||||
#
|
||||
# Examples:
|
||||
#
|
||||
# raid1
|
||||
# sd_mod
|
||||
hid
|
||||
hid_sensor_hub
|
||||
i2c_hid
|
||||
hid_generic
|
||||
usbhid
|
||||
hid_multitouch
|
||||
intel_ipts
|
||||
surface_sam_ssh
|
||||
surface_sam_san
|
||||
surface_sam_vhf
|
|
@ -1,3 +0,0 @@
|
|||
options snd-hda-intel single_cmd=1
|
||||
options snd-hda-intel probe_mask=1
|
||||
options snd-hda-intel model=basic
|
|
@ -1 +0,0 @@
|
|||
softdep soc_button_array pre: pinctrl_sunrisepoint
|
|
@ -1,86 +0,0 @@
|
|||
# This file is part of PulseAudio.
|
||||
#
|
||||
# PulseAudio is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Lesser General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# PulseAudio is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
## Configuration file for the PulseAudio daemon. See pulse-daemon.conf(5) for
|
||||
## more information. Default values are commented out. Use either ; or # for
|
||||
## commenting.
|
||||
|
||||
; daemonize = no
|
||||
; fail = yes
|
||||
; allow-module-loading = yes
|
||||
; allow-exit = yes
|
||||
; use-pid-file = yes
|
||||
; system-instance = no
|
||||
; local-server-type = user
|
||||
; enable-shm = yes
|
||||
; shm-size-bytes = 0 # setting this 0 will use the system-default, usually 64 MiB
|
||||
; lock-memory = no
|
||||
; cpu-limit = no
|
||||
|
||||
; high-priority = yes
|
||||
; nice-level = -11
|
||||
|
||||
; realtime-scheduling = yes
|
||||
; realtime-priority = 5
|
||||
|
||||
; exit-idle-time = 20
|
||||
; scache-idle-time = 20
|
||||
|
||||
; dl-search-path = (depends on architecture)
|
||||
|
||||
; load-default-script-file = yes
|
||||
; default-script-file = /etc/pulse/default.pa
|
||||
|
||||
; log-target = auto
|
||||
; log-level = notice
|
||||
; log-meta = no
|
||||
; log-time = no
|
||||
; log-backtrace = 0
|
||||
|
||||
resample-method = speex-float-3
|
||||
; enable-remixing = yes
|
||||
; enable-lfe-remixing = yes
|
||||
; lfe-crossover-freq = 120
|
||||
|
||||
flat-volumes = no
|
||||
|
||||
; rlimit-fsize = -1
|
||||
; rlimit-data = -1
|
||||
; rlimit-stack = -1
|
||||
; rlimit-core = -1
|
||||
; rlimit-as = -1
|
||||
; rlimit-rss = -1
|
||||
; rlimit-nproc = -1
|
||||
; rlimit-nofile = 256
|
||||
; rlimit-memlock = -1
|
||||
; rlimit-locks = -1
|
||||
; rlimit-sigpending = -1
|
||||
; rlimit-msgqueue = -1
|
||||
; rlimit-nice = 31
|
||||
; rlimit-rtprio = 9
|
||||
; rlimit-rttime = 200000
|
||||
|
||||
default-sample-format = s24le
|
||||
default-sample-rate = 44100
|
||||
; alternate-sample-rate = 48000
|
||||
; default-sample-channels = 2
|
||||
; default-channel-map = front-left,front-right
|
||||
|
||||
; default-fragments = 4
|
||||
; default-fragment-size-msec = 25
|
||||
|
||||
; enable-deferred-volume = yes
|
||||
; deferred-volume-safety-margin-usec = 1
|
||||
; deferred-volume-extra-delay-usec = 0
|
|
@ -1,145 +0,0 @@
|
|||
#!/usr/bin/pulseaudio -nF
|
||||
#
|
||||
# This file is part of PulseAudio.
|
||||
#
|
||||
# PulseAudio is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Lesser General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# PulseAudio is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# This startup script is used only if PulseAudio is started per-user
|
||||
# (i.e. not in system mode)
|
||||
|
||||
.fail
|
||||
|
||||
### Automatically restore the volume of streams and devices
|
||||
load-module module-device-restore
|
||||
load-module module-stream-restore
|
||||
load-module module-card-restore
|
||||
|
||||
### Automatically augment property information from .desktop files
|
||||
### stored in /usr/share/application
|
||||
load-module module-augment-properties
|
||||
|
||||
### Should be after module-*-restore but before module-*-detect
|
||||
load-module module-switch-on-port-available
|
||||
|
||||
### Use hot-plugged devices like Bluetooth or USB automatically (LP: #1702794)
|
||||
.ifexists module-switch-on-connect.so
|
||||
load-module module-switch-on-connect
|
||||
.endif
|
||||
|
||||
### Load audio drivers statically
|
||||
### (it's probably better to not load these drivers manually, but instead
|
||||
### use module-udev-detect -- see below -- for doing this automatically)
|
||||
#load-module module-alsa-sink
|
||||
#load-module module-alsa-source device=hw:1,0
|
||||
#load-module module-oss device="/dev/dsp" sink_name=output source_name=input
|
||||
#load-module module-oss-mmap device="/dev/dsp" sink_name=output source_name=input
|
||||
#load-module module-null-sink
|
||||
#load-module module-pipe-sink
|
||||
|
||||
### Automatically load driver modules depending on the hardware available
|
||||
.ifexists module-udev-detect.so
|
||||
load-module module-udev-detect tsched=0
|
||||
.else
|
||||
### Use the static hardware detection module (for systems that lack udev support)
|
||||
load-module module-detect
|
||||
.endif
|
||||
|
||||
### Automatically connect sink and source if JACK server is present
|
||||
.ifexists module-jackdbus-detect.so
|
||||
.nofail
|
||||
load-module module-jackdbus-detect channels=2
|
||||
.fail
|
||||
.endif
|
||||
|
||||
### Automatically load driver modules for Bluetooth hardware
|
||||
.ifexists module-bluetooth-policy.so
|
||||
load-module module-bluetooth-policy
|
||||
.endif
|
||||
|
||||
.ifexists module-bluetooth-discover.so
|
||||
load-module module-bluetooth-discover
|
||||
.endif
|
||||
|
||||
### Load several protocols
|
||||
.ifexists module-esound-protocol-unix.so
|
||||
load-module module-esound-protocol-unix
|
||||
.endif
|
||||
load-module module-native-protocol-unix
|
||||
|
||||
### Network access (may be configured with paprefs, so leave this commented
|
||||
### here if you plan to use paprefs)
|
||||
#load-module module-esound-protocol-tcp
|
||||
#load-module module-native-protocol-tcp
|
||||
#load-module module-zeroconf-publish
|
||||
|
||||
### Load the RTP receiver module (also configured via paprefs, see above)
|
||||
#load-module module-rtp-recv
|
||||
|
||||
### Load the RTP sender module (also configured via paprefs, see above)
|
||||
#load-module module-null-sink sink_name=rtp format=s16be channels=2 rate=44100 sink_properties="device.description='RTP Multicast Sink'"
|
||||
#load-module module-rtp-send source=rtp.monitor
|
||||
|
||||
### Load additional modules from GConf settings. This can be configured with the paprefs tool.
|
||||
### Please keep in mind that the modules configured by paprefs might conflict with manually
|
||||
### loaded modules.
|
||||
.ifexists module-gconf.so
|
||||
.nofail
|
||||
load-module module-gconf
|
||||
.fail
|
||||
.endif
|
||||
|
||||
### Automatically restore the default sink/source when changed by the user
|
||||
### during runtime
|
||||
### NOTE: This should be loaded as early as possible so that subsequent modules
|
||||
### that look up the default sink/source get the right value
|
||||
load-module module-default-device-restore
|
||||
|
||||
### Automatically move streams to the default sink if the sink they are
|
||||
### connected to dies, similar for sources
|
||||
load-module module-rescue-streams
|
||||
|
||||
### Make sure we always have a sink around, even if it is a null sink.
|
||||
load-module module-always-sink
|
||||
|
||||
### Honour intended role device property
|
||||
load-module module-intended-roles
|
||||
|
||||
### Automatically suspend sinks/sources that become idle for too long
|
||||
load-module module-suspend-on-idle
|
||||
|
||||
### If autoexit on idle is enabled we want to make sure we only quit
|
||||
### when no local session needs us anymore.
|
||||
.ifexists module-console-kit.so
|
||||
load-module module-console-kit
|
||||
.endif
|
||||
.ifexists module-systemd-login.so
|
||||
load-module module-systemd-login
|
||||
.endif
|
||||
|
||||
### Enable positioned event sounds
|
||||
load-module module-position-event-sounds
|
||||
|
||||
### Cork music/video streams when a phone stream is active
|
||||
load-module module-role-cork
|
||||
|
||||
### Modules to allow autoloading of filters (such as echo cancellation)
|
||||
### on demand. module-filter-heuristics tries to determine what filters
|
||||
### make sense, and module-filter-apply does the heavy-lifting of
|
||||
### loading modules and rerouting streams.
|
||||
load-module module-filter-heuristics
|
||||
load-module module-filter-apply
|
||||
|
||||
### Make some devices default
|
||||
#set-default-sink output
|
||||
#set-default-source input
|
|
@ -1,36 +0,0 @@
|
|||
# This file is part of systemd.
|
||||
#
|
||||
# systemd is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Lesser General Public License as published by
|
||||
# the Free Software Foundation; either version 2.1 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# Entries in this file show the compile time defaults.
|
||||
# You can change settings by editing this file.
|
||||
# Defaults can be restored by simply deleting this file.
|
||||
#
|
||||
# See logind.conf(5) for details.
|
||||
|
||||
[Login]
|
||||
#NAutoVTs=6
|
||||
#ReserveVT=6
|
||||
#KillUserProcesses=no
|
||||
#KillOnlyUsers=
|
||||
#KillExcludeUsers=root
|
||||
#InhibitDelayMaxSec=5
|
||||
#HandlePowerKey=poweroff
|
||||
#HandleSuspendKey=suspend
|
||||
#HandleHibernateKey=hibernate
|
||||
#HandleLidSwitch=suspend
|
||||
#HandleLidSwitchDocked=ignore
|
||||
#PowerKeyIgnoreInhibited=no
|
||||
#SuspendKeyIgnoreInhibited=no
|
||||
#HibernateKeyIgnoreInhibited=no
|
||||
#LidSwitchIgnoreInhibited=yes
|
||||
#HoldoffTimeoutSec=30s
|
||||
#IdleAction=ignore
|
||||
#IdleActionSec=30min
|
||||
#RuntimeDirectorySize=10%
|
||||
#RemoveIPC=yes
|
||||
#UserTasksMax=12288
|
||||
HandleLidSwitch=suspend
|
|
@ -1,2 +0,0 @@
|
|||
[Sleep]
|
||||
SuspendState=freeze
|
11
root/etc/systemd/system/surfacego-touchscreen.service
Normal file
11
root/etc/systemd/system/surfacego-touchscreen.service
Normal file
|
@ -0,0 +1,11 @@
|
|||
[Unit]
|
||||
Description=Surface Go Touchscreen Power Management
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
ConditionPathExists=/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.1/power/control
|
||||
Exec=/bin/sh -c "echo on > /sys/devices/pci0000:00/0000:00:15.1/i2c_designware.1/power/control"
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
|
@ -1,47 +0,0 @@
|
|||
# NTRG Touchscreen (SP3)
|
||||
SUBSYSTEMS=="input", ATTRS{name}=="NTRG0001:01 1B96:1B05 Touchscreen", ENV{ID_INPUT_TOUCHSCREEN}="1", SYMLINK+="input/touchscreen"
|
||||
|
||||
# NTRG Pen (SP3)
|
||||
SUBSYSTEMS=="input", ATTRS{name}=="NTRG0001:01 1B96:1B05 Pen", SYMLINK+="input/pen"
|
||||
|
||||
# Touchscreen (SG)
|
||||
SUBSYSTEMS=="input", ATTRS{name}=="04F3:261A Touchscreen", ENV{ID_INPUT_TOUCHSCREEN}="1", SYMLINK+="input/touchscreen"
|
||||
|
||||
# Pen (SG)
|
||||
SUBSYSTEMS=="input", ATTRS{name}=="04F3:261A Pen", SYMLINK+="input/pen"
|
||||
|
||||
# IPTS Touchscreen (SP4)
|
||||
SUBSYSTEMS=="input", ATTRS{name}=="ipts 1B96:006A Touchscreen", ENV{ID_INPUT_TOUCHSCREEN}="1", SYMLINK+="input/touchscreen"
|
||||
|
||||
# IPTS Pen (SP4)
|
||||
SUBSYSTEMS=="input", ATTRS{name}=="ipts 1B96:006A Pen", SYMLINK+="input/pen"
|
||||
|
||||
# IPTS Touchscreen (SP2017)
|
||||
SUBSYSTEMS=="input", ATTRS{name}=="ipts 1B96:001F Touchscreen", ENV{ID_INPUT_TOUCHSCREEN}="1", SYMLINK+="input/touchscreen"
|
||||
|
||||
# IPTS Pen (SP2017)
|
||||
SUBSYSTEMS=="input", ATTRS{name}=="ipts 1B96:001F Pen", SYMLINK+="input/pen"
|
||||
|
||||
# IPTS Touchscreen (SP6)
|
||||
SUBSYSTEMS=="input", ATTRS{name}=="ipts 045E:001F Touchscreen", ENV{ID_INPUT_TOUCHSCREEN}="1", SYMLINK+="input/touchscreen"
|
||||
|
||||
# IPTS Pen (SP6)
|
||||
SUBSYSTEMS=="input", ATTRS{name}=="ipts 045E:001F Pen", SYMLINK+="input/pen"
|
||||
|
||||
# IPTS Touchscreen (SB)
|
||||
SUBSYSTEMS=="input", ATTRS{name}=="ipts 1B96:005E Touchscreen", ENV{ID_INPUT_TOUCHSCREEN}="1", SYMLINK+="input/touchscreen"
|
||||
|
||||
# IPTS Pen (SB)
|
||||
SUBSYSTEMS=="input", ATTRS{name}=="ipts 1B96:005E Pen", SYMLINK+="input/pen"
|
||||
|
||||
# IPTS Touchscreen (SB2 15")
|
||||
SUBSYSTEMS=="input", ATTRS{name}=="ipts 045E:0020 Touchscreen", ENV{ID_INPUT_TOUCHSCREEN}="1", SYMLINK+="input/touchscreen"
|
||||
|
||||
# IPTS Pen (SB2 15")
|
||||
SUBSYSTEMS=="input", ATTRS{name}=="ipts 045E:0020 Pen", SYMLINK+="input/pen"
|
||||
|
||||
# IPTS Touchscreen (SB2 13")
|
||||
SUBSYSTEMS=="input", ATTRS{name}=="ipts 045E:0021 Touchscreen", ENV{ID_INPUT_TOUCHSCREEN}="1", SYMLINK+="input/touchscreen"
|
||||
|
||||
# IPTS Pen (SB2 13")
|
||||
SUBSYSTEMS=="input", ATTRS{name}=="ipts 045E:0021 Pen", SYMLINK+="input/pen"
|
53
root/lib/systemd/system-sleep/sleep
Normal file → Executable file
53
root/lib/systemd/system-sleep/sleep
Normal file → Executable file
|
@ -1,4 +1,5 @@
|
|||
#!/bin/bash
|
||||
#!/bin/sh
|
||||
|
||||
case $1 in
|
||||
pre) # unload the modules before going to sleep
|
||||
|
||||
|
@ -8,55 +9,44 @@ case $1 in
|
|||
fi
|
||||
|
||||
## Disable bluetooth regardless if devices are connected (see notes below)
|
||||
#if ps cax | grep bluetoothd; then
|
||||
# if ps cax | grep bluetoothd; then
|
||||
# bluetoothctl power off
|
||||
#fi
|
||||
|
||||
# handle wifi issues
|
||||
modprobe -r mwifiex_pcie;
|
||||
modprobe -r mwifiex;
|
||||
modprobe -r cfg80211;
|
||||
# fi
|
||||
|
||||
## IPTS: see notes below
|
||||
## > Remove IPTS from ME side
|
||||
#modprobe -r ipts_surface
|
||||
#modprobe -r intel_ipts
|
||||
#modprobe -r mei_hdcp
|
||||
#modprobe -r mei_me
|
||||
#modprobe -r mei
|
||||
# modprobe -r ipts_surface
|
||||
# modprobe -r intel_ipts
|
||||
# modprobe -r mei_hdcp
|
||||
# modprobe -r mei_me
|
||||
# modprobe -r mei
|
||||
## > Remove IPTS from i915 side
|
||||
#for i in $(find /sys/kernel/debug/dri -name i915_intel_ipts_cleanup); do echo 1 > $i; done
|
||||
# for i in $(find /sys/kernel/debug/dri -name i915_intel_ipts_cleanup); do
|
||||
# echo 1 > $i
|
||||
# done
|
||||
;;
|
||||
post) # re-load modules after resume
|
||||
## IPTS: see notes below
|
||||
## > Load IPTS from i915 side
|
||||
#for i in $(find /sys/kernel/debug/dri -name i915_intel_ipts_init); do echo 1 > $i; done
|
||||
# for i in $(find /sys/kernel/debug/dri -name i915_intel_ipts_init); do
|
||||
# echo 1 > $i
|
||||
# done
|
||||
## > Load IPTS from ME side
|
||||
#modprobe mei
|
||||
#modprobe mei_me
|
||||
#modprobe mei_hdcp
|
||||
#modprobe intel_ipts
|
||||
#modprobe ipts_surface
|
||||
# modprobe mei
|
||||
# modprobe mei_me
|
||||
# modprobe mei_hdcp
|
||||
# modprobe intel_ipts
|
||||
# modprobe ipts_surface
|
||||
|
||||
# Restart bluetooth
|
||||
if ps cax | grep bluetoothd; then
|
||||
bluetoothctl power on
|
||||
fi
|
||||
|
||||
# handle wifi issues: complete cycle
|
||||
modprobe cfg80211;
|
||||
modprobe mwifiex;
|
||||
modprobe mwifiex_pcie;
|
||||
echo 1 > /sys/bus/pci/rescan
|
||||
|
||||
if [ -x "$(command -v nmcli)" ] && [ "$(nmcli net)" = "enabled" ]; then
|
||||
nmcli net off
|
||||
nmcli net on
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
# Notes:
|
||||
#
|
||||
# - For IPTS, see
|
||||
# > https://github.com/jakeday/linux-surface/issues/544#issuecomment-519126757
|
||||
# for an explanation/discussion. We do not unload/reload modules for now as
|
||||
|
@ -64,6 +54,7 @@ esac
|
|||
# experience any issues on suspend/resume, please file an appropriate issue or
|
||||
# join the discussion linked above so that we can fix it. As a temporary
|
||||
# workaround, you may want to uncomment the IPTS-related lines above.
|
||||
#
|
||||
# - For bluetooth: If you have spontaneous wakeups, you may want to disable
|
||||
# bluetooth completely, regardless if any devices are connected or not, by
|
||||
# removing the `! bluetoothctl info;` part as indicated in the comment (e.g.
|
||||
|
|
168
setup.sh
168
setup.sh
|
@ -1,71 +1,70 @@
|
|||
#!/bin/bash
|
||||
#!/bin/sh
|
||||
|
||||
LX_BASE=""
|
||||
LX_VERSION=""
|
||||
# https://gist.github.com/davejamesmiller/1965569
|
||||
ask() {
|
||||
local prompt default reply
|
||||
|
||||
if [ -r "/etc/os-release" ]; then
|
||||
. "/etc/os-release"
|
||||
if [ "$ID" = "arch" ]; then
|
||||
LX_BASE="$ID"
|
||||
elif [ "$ID" = "ubuntu" ]; then
|
||||
LX_BASE="$ID"
|
||||
LX_VERSION=$VERSION_ID
|
||||
elif [ -n "$UBUNTU_CODENAME" ] ; then
|
||||
LX_BASE="ubuntu"
|
||||
LX_VERSION="$VERSION_ID"
|
||||
if [ "${2:-}" = "Y" ]; then
|
||||
prompt="Y/n"
|
||||
default=Y
|
||||
elif [ "${2:-}" = "N" ]; then
|
||||
prompt="y/N"
|
||||
default=N
|
||||
else
|
||||
LX_BASE="$ID"
|
||||
LX_VERSION="$VERSION"
|
||||
prompt="y/n"
|
||||
default=
|
||||
fi
|
||||
else
|
||||
echo "Could not identify your distro. Please open script and run commands manually."
|
||||
exit
|
||||
fi
|
||||
|
||||
SUR_MODEL="$(dmidecode | grep "Product Name" -m 1 | xargs | sed -e 's/Product Name: //g')"
|
||||
while true; do
|
||||
|
||||
echo "Running $LX_BASE version $LX_VERSION on a $SUR_MODEL."
|
||||
read -rp "Press enter if this is correct, or CTRL-C to cancel." tmp; echo
|
||||
echo "Continuing setup..."
|
||||
# Ask the question (not using "read -p" as it uses stderr not stdout)
|
||||
echo -n "$1 [$prompt]: "
|
||||
|
||||
# Read the answer (use /dev/tty in case stdin is redirected from somewhere else)
|
||||
read reply </dev/tty
|
||||
|
||||
# Default?
|
||||
if [ -z "$reply" ]; then
|
||||
reply=$default
|
||||
fi
|
||||
|
||||
# Check if the reply is valid
|
||||
case "$reply" in
|
||||
Y*|y*) return 0 ;;
|
||||
N*|n*) return 1 ;;
|
||||
esac
|
||||
|
||||
done
|
||||
}
|
||||
|
||||
echo "==> Copying the config files under root to where they belong..."
|
||||
for dir in $(ls root/); do cp -Rbv "root/$dir/"* "/$dir/"; done
|
||||
echo
|
||||
for dir in $(ls root/); do
|
||||
sudo cp -Rbv "root/$dir/"* "/$dir/"
|
||||
done
|
||||
|
||||
echo "==> Copying firmware files under root..."
|
||||
cp -rv firmware/* /lib/firmware/
|
||||
sudo cp -rv firmware/* /lib/firmware/
|
||||
|
||||
echo "==> Enabling power management for Surface Go touchscreen..."
|
||||
sudo systemctl enable -q surfacego-touchscreen
|
||||
|
||||
echo
|
||||
|
||||
echo "==> Making /lib/systemd/system-sleep/sleep executable..."
|
||||
chmod -v a+x /lib/systemd/system-sleep/sleep
|
||||
|
||||
printf "
|
||||
Suspend is recommended over hibernate. If you chose to use hibernate, please
|
||||
make sure you've setup your swap file per the instructions in the README.\n\n"
|
||||
read -rp "Do you want to replace suspend with hibernate? (type yes or no): " \
|
||||
usehibernate;echo
|
||||
|
||||
if [ "$usehibernate" = "yes" ]; then
|
||||
if [ "$LX_BASE" = "ubuntu" ] && [ 1 -eq "$(echo "${LX_VERSION} >= 17.10" | bc)" ]; then
|
||||
echo "==> Using Hibernate instead of Suspend..."
|
||||
ln -vsfb /lib/systemd/system/hibernate.target /etc/systemd/system/suspend.target
|
||||
sudo ln -vsfb /lib/systemd/system/systemd-hibernate.service /etc/systemd/system/systemd-suspend.service
|
||||
else
|
||||
echo "==> Using Hibernate instead of Suspend..."
|
||||
ln -vsfb /usr/lib/systemd/system/hibernate.target /etc/systemd/system/suspend.target
|
||||
sudo ln -vsfb /usr/lib/systemd/system/systemd-hibernate.service /etc/systemd/system/systemd-suspend.service
|
||||
fi
|
||||
echo "Setting your clock to local time can fix issues with Windows dualboot."
|
||||
if ask "Do you want to set your clock to local time instead of UTC?" N; then
|
||||
echo "==> Setting clock to local time..."
|
||||
sudo timedatectl set-local-rtc 1
|
||||
sudo hwclock --systohc --localtime
|
||||
else
|
||||
echo "==> Not touching Suspend"
|
||||
echo "==> Not setting clock..."
|
||||
fi
|
||||
|
||||
printf "
|
||||
Patched libwacom packages are available to better support the pen. If you
|
||||
intend to use the pen, it's recommended that you install them!\n\n"
|
||||
read -rp "Do you want to install the patched libwacom packages? (type yes or no): " \
|
||||
uselibwacom;echo
|
||||
echo
|
||||
|
||||
if [ "$uselibwacom" = "yes" ]; then
|
||||
echo "Patched libwacom packages are available to better support the pen."
|
||||
echo "If you intend to use the pen, it's recommended that you install them!"
|
||||
|
||||
if ask "Do you want to install the patched libwacom?" Y; then
|
||||
echo "==> Downloading latest libwacom-surface..."
|
||||
|
||||
urls=$(curl --silent "https://api.github.com/repos/linux-surface/libwacom-surface-deb/releases/latest" \
|
||||
|
@ -78,73 +77,15 @@ if [ "$uselibwacom" = "yes" ]; then
|
|||
|
||||
echo "==> Installing latest libwacom-surface..."
|
||||
|
||||
dpkg -i tmp/*.deb
|
||||
sudo dpkg -i tmp/*.deb
|
||||
rm -rf tmp
|
||||
else
|
||||
echo "==> Not touching libwacom"
|
||||
fi
|
||||
|
||||
printf "
|
||||
This repo comes with example xorg and pulse audio configs. If you chose to
|
||||
keep them, be sure to rename them and uncomment out what you'd like to
|
||||
keep!\n\n"
|
||||
read -rp "Do you want to remove the example intel xorg config? (type yes or no): " \
|
||||
removexorg;echo
|
||||
|
||||
if [ "$removexorg" = "yes" ]; then
|
||||
echo "==> Removing the example intel xorg config..."
|
||||
rm -v /etc/X11/xorg.conf.d/20-intel_example.conf
|
||||
else
|
||||
echo "==> Not touching example intel xorg config" \
|
||||
"(/etc/X11/xorg.conf.d/20-intel_example.conf)"
|
||||
fi
|
||||
|
||||
echo
|
||||
read -rp "Do you want to remove the example pulse audio config files? (type yes or no): "\
|
||||
removepulse;echo
|
||||
|
||||
if [ "$removepulse" = "yes" ]; then
|
||||
echo "==> Removing the example pulse audio config files..."
|
||||
rm -v /etc/pulse/daemon_example.conf
|
||||
rm -v /etc/pulse/default_example.pa
|
||||
else
|
||||
echo "==> Not touching example pulse audio config files" \
|
||||
" (/etc/pulse/*_example.*)"
|
||||
fi
|
||||
|
||||
if [ "$SUR_MODEL" = "Surface Pro 3" ]; then
|
||||
echo "==> Remove unneeded udev rules for Surface Pro 3..."
|
||||
rm -v /etc/udev/rules.d/98-keyboardscovers.rules
|
||||
fi
|
||||
|
||||
if [ "$SUR_MODEL" = "Surface Go" ]; then
|
||||
if [ ! -f "/etc/init.d/surfacego-touchscreen" ]; then
|
||||
echo "==> Patching power control for Surface Go touchscreen..."
|
||||
echo "echo \"on\" > /sys/devices/pci0000:00/0000:00:15.1/i2c_designware.1/power/control" \
|
||||
> /etc/init.d/surfacego-touchscreen
|
||||
chmod -v 755 /etc/init.d/surfacego-touchscreen
|
||||
update-rc.d surfacego-touchscreen defaults
|
||||
fi
|
||||
fi
|
||||
|
||||
read -rp "
|
||||
Do you want to set your clock to local time instead of UTC? This fixes
|
||||
issues when dual booting with Windows. (type yes or no): " \
|
||||
uselocaltime;echo
|
||||
|
||||
if [ "$uselocaltime" = "yes" ]; then
|
||||
echo "==> Setting clock to local time..."
|
||||
timedatectl set-local-rtc 1
|
||||
hwclock --systohc --localtime
|
||||
else
|
||||
echo "==> Not setting clock"
|
||||
fi
|
||||
|
||||
read -rp "
|
||||
Do you want this script to download and install the latest kernel for you?
|
||||
(type yes or no): " autoinstallkernel;echo
|
||||
|
||||
if [ "$autoinstallkernel" = "yes" ]; then
|
||||
if ask "Do you want to download and install the latest kernel?" Y; then
|
||||
echo "==> Downloading latest kernel..."
|
||||
|
||||
urls=$(curl --silent "https://api.github.com/repos/linux-surface/linux-surface/releases/latest" \
|
||||
|
@ -158,11 +99,12 @@ if [ "$autoinstallkernel" = "yes" ]; then
|
|||
echo
|
||||
echo "==> Installing latest kernel..."
|
||||
|
||||
dpkg -i tmp/*.deb
|
||||
sudo dpkg -i tmp/*.deb
|
||||
rm -rf tmp
|
||||
else
|
||||
echo "==> Not downloading latest kernel"
|
||||
fi
|
||||
|
||||
echo
|
||||
|
||||
echo "All done! Please reboot."
|
||||
|
|
Loading…
Reference in a new issue