mirror of
https://github.com/the-sane/lug-helper.git
synced 2025-07-01 09:11:02 +00:00
Compare commits
53 Commits
Author | SHA1 | Date | |
---|---|---|---|
28051a135a | |||
44b1332782 | |||
10c5438189 | |||
57df0a8dd9 | |||
f67c76be2e | |||
d9d58702d1 | |||
3d6e4cc367 | |||
3932fd2754 | |||
314a1ff5ea | |||
26f1377506 | |||
b71f601547 | |||
717a83a512 | |||
ae25785a41 | |||
2f45058e58 | |||
33b8643d47 | |||
faa047546b | |||
5ef3a95a2a | |||
37e487d296 | |||
ab9155b9b8 | |||
7b7347dd64 | |||
9a2c064a06 | |||
6ef58adc12 | |||
3b3abbe8ea | |||
da1fc66571 | |||
bc5d5c4a9b | |||
deb84dd757 | |||
fc70cdc687 | |||
21444076de | |||
4b32177e97 | |||
b4762d4724 | |||
37c94af2ed | |||
6d56599e2f | |||
9909221dff | |||
a328b465ef | |||
8e28327e0f | |||
156a0884d4 | |||
809efb6a54 | |||
5afa8e7c19 | |||
49079818f6 | |||
227038a289 | |||
8f53957f3c | |||
662d78a021 | |||
d10a84c5fe | |||
35e63f5bd5 | |||
f3166c77da | |||
707211962f | |||
5df5cb210d | |||
bf36fc96a9 | |||
702c678716 | |||
dedefebd2d | |||
d24e8b590b | |||
3daeb0b3b1 | |||
e8c93196ff |
19
README.md
19
README.md
@ -1,4 +1,4 @@
|
||||
# LUG-Helper
|
||||
# LUG Helper
|
||||
**Star Citizen's Linux Users Group Helper Script**
|
||||
https://robertsspaceindustries.com/orgs/LUG
|
||||
|
||||
@ -8,7 +8,7 @@ _**This script is designed to help you manage and optimize Star Citizen on Linux
|
||||
Zenity menus are used for a GUI experience with a fallback to terminal-based menus where Zenity is unavailable.
|
||||
Command line arguments are available for quickly launching functions from the terminal.
|
||||
|
||||
Configuration is saved in *$XDG_CONFIG_HOME/starcitizen-lug/*.
|
||||
Configuration is saved in *$XDG_CONFIG_HOME/starcitizen-lug/*
|
||||
Keybinds are backed up to *$XDG_CONFIG_HOME/starcitizen-lug/keybinds/*
|
||||
|
||||
## Options:
|
||||
@ -20,10 +20,16 @@ Keybinds are backed up to *$XDG_CONFIG_HOME/starcitizen-lug/keybinds/*
|
||||
- Checks that the hard open file descriptors limit is set to at least 524288.
|
||||
- This limits the maximum number of open files on your system. On some Linux distributions, the default is set too low for Star Citizen.
|
||||
|
||||
`Install Star Citizen`
|
||||
- Launches Lutris and uses the bundled json to install Star Citizen
|
||||
|
||||
`Deploy Easy Anti-Cheat Workaround`
|
||||
- Applies the workaround to /etc/hosts and deletes the necessary EAC files
|
||||
|
||||
`Manage Lutris Runners`
|
||||
- Quickly install and delete Lutris wine runners
|
||||
|
||||
`Manage DXVK Versions`
|
||||
`Manage Lutris DXVK Versions`
|
||||
- Quickly install and delete DXVK versions for Lutris
|
||||
|
||||
`Maintenance and Troubleshooting`
|
||||
@ -57,9 +63,9 @@ Keybinds are backed up to *$XDG_CONFIG_HOME/starcitizen-lug/keybinds/*
|
||||
## Installation:
|
||||
|
||||
From Source:
|
||||
1. Download it!
|
||||
2. Run it!
|
||||
3. If you want, move *lug-logo.png* to */usr/share/pixmaps/*
|
||||
1. Download it! https://github.com/starcitizen-lug/lug-helper/releases
|
||||
2. Extract it!
|
||||
3. Run it!
|
||||
|
||||
Arch Linux: https://aur.archlinux.org/packages/lug-helper/
|
||||
|
||||
@ -69,4 +75,5 @@ Arch Linux: https://aur.archlinux.org/packages/lug-helper/
|
||||
- https://github.com/gort818
|
||||
- https://github.com/victort
|
||||
- https://github.com/Wrzlprnft
|
||||
- https://github.com/ananace
|
||||
- Runner Downloader inspired by https://github.com/richardtatum/sc-runner-updater
|
||||
|
583
lug-helper.sh
583
lug-helper.sh
@ -15,6 +15,8 @@
|
||||
# - Check your system for optimal settings and
|
||||
# change them as needed to prevent crashes.
|
||||
#
|
||||
# - Install Star Citizen using a bundled Lutris install script
|
||||
#
|
||||
# - Easily install and remove Lutris wine Runners and DXVK versions.
|
||||
#
|
||||
# - Qickly wipe your Star Citizen USER folder as is recommended
|
||||
@ -46,6 +48,8 @@
|
||||
# Contributor: https://github.com/Wrzlprnft
|
||||
# Runner Downloader inspired by:
|
||||
# https://github.com/richardtatum/sc-runner-updater
|
||||
#
|
||||
# License: GPLv3.0
|
||||
############################################################################
|
||||
|
||||
# Check if script is run as root
|
||||
@ -61,13 +65,15 @@ if [ ! -x "$(command -v curl)" ]; then
|
||||
notify-send "lug-helper" "The required package 'curl' was not found on this system.\n" --icon=dialog-warning
|
||||
exit 1
|
||||
fi
|
||||
if [ ! -x "$(command -v mktemp)" ] || [ ! -x "$(command -v basename)" ] || [ ! -x "$(command -v sort)" ]; then
|
||||
if [ ! -x "$(command -v mktemp)" ] || [ ! -x "$(command -v sort)" ] || [ ! -x "$(command -v basename)" ] || [ ! -x "$(command -v realpath)" ] || [ ! -x "$(command -v dirname)" ]; then
|
||||
# Print to stderr and also try warning the user through notify-send
|
||||
printf "lug-helper.sh: One or more required packages were not found on this system.\nPlease check that the following packages are installed:\n- mktemp (part of gnu coreutils)\n- basename (part of gnu coreutils)\n- sort (part of gnu coreutils)\n" 1>&2
|
||||
notify-send "lug-helper" "One or more required packages were not found on this system.\nPlease check that the following packages are installed:\n- mktemp (part of gnu coreutils)\n- basename (part of gnu coreutils)\n- sort (part of gnu coreutils)\n" --icon=dialog-warning
|
||||
printf "lug-helper.sh: One or more required packages were not found on this system.\nPlease check that the following coreutils packages are installed:\n- mktemp\n- sort\n- basename\n- realpath\n- dirname\n" 1>&2
|
||||
notify-send "lug-helper" "One or more required packages were not found on this system.\nPlease check that the following coreutils packages are installed:\n- mktemp\n- sort\n- basename\n- realpath\n- dirname\n" --icon=dialog-warning
|
||||
exit 1
|
||||
fi
|
||||
|
||||
######## Config ############################################################
|
||||
|
||||
wine_conf="winedir.conf"
|
||||
game_conf="gamedir.conf"
|
||||
|
||||
@ -78,6 +84,9 @@ data_dir="${XDG_DATA_HOME:-$HOME/.local/share}"
|
||||
# .config subdirectory
|
||||
conf_subdir="starcitizen-lug"
|
||||
|
||||
# Helper directory
|
||||
helper_dir="$(realpath "$0" | xargs -0 dirname)"
|
||||
|
||||
# Temporary directory
|
||||
tmp_dir="$(mktemp -d --suffix=".lughelper")"
|
||||
trap 'rm -r "$tmp_dir"' EXIT
|
||||
@ -105,7 +114,7 @@ runners_dir="$data_dir/lutris/runners/wine"
|
||||
# The second is expected to contain the github api releases url
|
||||
# ie. "RawFox" "https://api.github.com/repos/rawfoxDE/raw-wine/releases"
|
||||
runner_sources=(
|
||||
"RawFox" "https://api.github.com/repos/rawfoxDE/raw-wine/releases"
|
||||
"RawFox" "https://api.github.com/repos/starcitizen-lug/raw-wine/releases"
|
||||
"Molotov/Snatella" "https://api.github.com/repos/snatella/wine-runner-sc/releases"
|
||||
"/dev/null" "https://api.github.com/repos/gort818/wine-sc-lug/releases"
|
||||
"GloriousEggroll" "https://api.github.com/repos/GloriousEggroll/wine-ge-custom/releases"
|
||||
@ -123,6 +132,7 @@ dxvk_dir="$data_dir/lutris/runtime/dxvk"
|
||||
dxvk_sources=(
|
||||
"Sporif Async" "https://api.github.com/repos/Sporif/dxvk-async/releases"
|
||||
"/dev/null" "https://api.github.com/repos/gort818/dxvk/releases"
|
||||
"gnusenpai" "https://api.github.com/repos/gnusenpai/dxvk/releases"
|
||||
)
|
||||
|
||||
# Set a maximum number of versions to display from each download url
|
||||
@ -132,22 +142,35 @@ max_download_items=20
|
||||
# used to dynamically determine the height of menus
|
||||
menu_option_height="25"
|
||||
|
||||
############################################################################
|
||||
######## Bundled Files #####################################################
|
||||
|
||||
# Use logo installed by a packaged version of this script if available
|
||||
# Otherwise, default to the logo in the same directory
|
||||
if [ -f "/usr/share/pixmaps/lug-logo.png" ]; then
|
||||
lug_logo="/usr/share/pixmaps/lug-logo.png"
|
||||
elif [ -f "lug-logo.png" ]; then
|
||||
lug_logo="lug-logo.png"
|
||||
elif [ -f "$helper_dir/lug-logo.png" ]; then
|
||||
lug_logo="$helper_dir/lug-logo.png"
|
||||
else
|
||||
lug_logo="info"
|
||||
fi
|
||||
|
||||
# Use Lutris install script installed by a packaged version of this script if available
|
||||
# Otherwise, default to the json in the same directory
|
||||
if [ -f "/usr/share/lug-helper/lug-lutris-install.json" ]; then
|
||||
install_script="/usr/share/lug-helper/lug-lutris-install.json"
|
||||
else
|
||||
install_script="$helper_dir/lug-lutris-install.json"
|
||||
fi
|
||||
|
||||
######## Links #############################################################
|
||||
|
||||
# LUG Wiki
|
||||
lug_wiki="https://github.com/starcitizen-lug/information-howtos/wiki"
|
||||
|
||||
# Github repo and script version info
|
||||
repo="starcitizen-lug/lug-helper"
|
||||
releases_url="https://github.com/$repo/releases"
|
||||
current_version="v1.12"
|
||||
current_version="v1.19"
|
||||
|
||||
############################################################################
|
||||
############################################################################
|
||||
@ -411,7 +434,7 @@ getdirs() {
|
||||
# If we don't have the directory paths we need yet,
|
||||
# ask the user to provide them
|
||||
if [ -z "$wine_prefix" ] || [ -z "$game_path" ]; then
|
||||
message info "At the next screen, please select your Star Citizen WINE prefix.\nIt will be remembered for future use."
|
||||
message info "Star Citizen must be installed before proceeding.\n\nAt the next screen, please select your Star Citizen install directory (WINE prefix)\nIt will be remembered for future use.\n\nLutris default install path: ~/Games/star-citizen"
|
||||
if [ "$use_zenity" -eq 1 ]; then
|
||||
# Using Zenity file selection menus
|
||||
# Get the wine prefix directory
|
||||
@ -438,7 +461,7 @@ getdirs() {
|
||||
message warning "An unexpected error has occurred. The Helper is unable to proceed."
|
||||
return 1
|
||||
elif [ "$(basename "$game_path")" != "$sc_base_dir" ]; then
|
||||
message warning "You must select the Star Citizen base game directory.\n\nFor Example: prefix/drive_c/Program Files/Roberts Space Industries/StarCitizen"
|
||||
message warning "You must select the base game directory named '$sc_base_dir'\n\nie. [prefix]/drive_c/Program Files/Roberts Space Industries/StarCitizen"
|
||||
else
|
||||
# All good or cancel
|
||||
break
|
||||
@ -619,8 +642,8 @@ mapcount_once() {
|
||||
mapcount_set() {
|
||||
if [ -d "/etc/sysctl.d" ]; then
|
||||
# Newer versions of sysctl
|
||||
preflight_actions+=('printf "\n# Added by LUG-Helper:\nvm.max_map_count = 16777216\n" >> /etc/sysctl.d/20-max_map_count.conf && sysctl --system')
|
||||
preflight_results+=("The vm.max_map_count configuration has been appended to:\n/etc/sysctl.d/20-max_map_count.conf")
|
||||
preflight_actions+=('printf "\n# Added by LUG-Helper:\nvm.max_map_count = 16777216\n" > /etc/sysctl.d/20-starcitizen-max_map_count.conf && sysctl --system')
|
||||
preflight_results+=("The vm.max_map_count configuration has been appended to:\n/etc/sysctl.d/20-starcitizen-max_map_count.conf")
|
||||
else
|
||||
# Older versions of sysctl
|
||||
preflight_actions+=('printf "\n# Added by LUG-Helper:\nvm.max_map_count = 16777216" >> /etc/sysctl.conf && sysctl -p')
|
||||
@ -655,7 +678,7 @@ mapcount_check() {
|
||||
# Add info for manually changing the setting
|
||||
if [ -d "/etc/sysctl.d" ]; then
|
||||
# Newer versions of sysctl
|
||||
preflight_manual+=("To change vm.max_map_count permanently, add the following line to\n'/etc/sysctl.d/20-max_map_count.conf' and reload with 'sudo sysctl --system':\n vm.max_map_count = 16777216\n\nOr, to change vm.max_map_count temporarily until next boot, run:\n sudo sysctl -w vm.max_map_count=16777216")
|
||||
preflight_manual+=("To change vm.max_map_count permanently, add the following line to\n'/etc/sysctl.d/20-starcitizen-max_map_count.conf' and reload with 'sudo sysctl --system'\n vm.max_map_count = 16777216\n\nOr, to change vm.max_map_count temporarily until next boot, run:\n sudo sysctl -w vm.max_map_count=16777216")
|
||||
else
|
||||
# Older versions of sysctl
|
||||
preflight_manual+=("To change vm.max_map_count permanently, add the following line to\n'/etc/sysctl.conf' and reload with 'sudo sysctl -p':\n vm.max_map_count = 16777216\n\nOr, to change vm.max_map_count temporarily until next boot, run:\n sudo sysctl -w vm.max_map_count=16777216")
|
||||
@ -679,8 +702,8 @@ filelimit_set() {
|
||||
if [ -f "/etc/systemd/system.conf" ]; then
|
||||
# Using systemd
|
||||
# Append to the file
|
||||
preflight_actions+=('printf "\n# Added by LUG-Helper:\nDefaultLimitNOFILE=524288\n" >> /etc/systemd/system.conf && systemctl daemon-reexec')
|
||||
preflight_results+=("The open files limit configuration has been appended to:\n/etc/systemd/system.conf")
|
||||
preflight_actions+=('mkdir -p /etc/systemd/system.conf.d && printf "[Manager]\n# Added by LUG-Helper:\nDefaultLimitNOFILE=524288\n" > /etc/systemd/system.conf.d/20-starcitizen-filelimit.conf && systemctl daemon-reexec')
|
||||
preflight_results+=("The open files limit configuration has been added to:\n/etc/systemd/system.conf.d/20-starcitizen-filelimit.conf")
|
||||
elif [ -f "/etc/security/limits.conf" ]; then
|
||||
# Using limits.conf
|
||||
# Insert before the last line in the file
|
||||
@ -712,7 +735,7 @@ filelimit_check() {
|
||||
# Add info for manually changing the settings
|
||||
if [ -f "/etc/systemd/system.conf" ]; then
|
||||
# Using systemd
|
||||
preflight_manual+=("To change your open file descriptors limit, add the following line to\n'/etc/systemd/system.conf':\n DefaultLimitNOFILE=524288")
|
||||
preflight_manual+=("To change your open file descriptors limit, add the following to\n'/etc/systemd/system.conf.d/20-starcitizen-filelimit.conf':\n\n[Manager]\nDefaultLimitNOFILE=524288")
|
||||
elif [ -f "/etc/security/limits.conf" ]; then
|
||||
# Using limits.conf
|
||||
preflight_manual+=("To change your open file descriptors limit, add the following line to\n'/etc/security/limits.conf':\n * hard nofile 524288")
|
||||
@ -725,6 +748,15 @@ filelimit_check() {
|
||||
|
||||
#------------------------- end filelimit functions ---------------------------#
|
||||
|
||||
# Check if WINE is installed
|
||||
wine_check() {
|
||||
if [ -x "$(command -v wine)" ]; then
|
||||
preflight_pass+=("Wine is installed on your system.")
|
||||
else
|
||||
preflight_fail+=("Wine does not appear to be installed.\nAt a minimum, wine dependencies must be installed.\nPlease refer to our Quick Start Guide:\n$lug_wiki")
|
||||
fi
|
||||
}
|
||||
|
||||
# Check total system memory
|
||||
memory_check() {
|
||||
memtotal="$(LC_NUMERIC=C awk '/MemTotal/ {printf "%.1f \n", $2/1024/1024}' /proc/meminfo)"
|
||||
@ -744,56 +776,130 @@ avx_check() {
|
||||
fi
|
||||
}
|
||||
|
||||
# Check if swap is set up
|
||||
swap_check() {
|
||||
if cat /proc/swaps | grep -vq "Filename"; then
|
||||
preflight_pass+=("You have swap space configured.")
|
||||
else
|
||||
preflight_fail+=("You don't appear to have swap space configured.\nWe recommend configuring an 8-16 GB swap file.")
|
||||
fi
|
||||
}
|
||||
|
||||
# Check that the system is optimized for Star Citizen
|
||||
preflight_check() {
|
||||
# Initialize variables
|
||||
unset preflight_pass
|
||||
unset preflight_fail
|
||||
unset preflight_action_funcs
|
||||
unset preflight_actions
|
||||
unset preflight_results
|
||||
unset preflight_manual
|
||||
unset preflight_followup
|
||||
|
||||
# Call the optimization functions to perform the checks
|
||||
wine_check
|
||||
memory_check
|
||||
swap_check
|
||||
avx_check
|
||||
mapcount_check
|
||||
filelimit_check
|
||||
|
||||
# Populate info strings with the results and add formatting
|
||||
if [ "${#preflight_pass[@]}" -gt 0 ]; then
|
||||
preflight_pass_string="Passed Checks:"
|
||||
for (( i=0; i<"${#preflight_pass[@]}"; i++ )); do
|
||||
preflight_pass_string="$preflight_pass_string\n- ${preflight_pass[i]//\\n/\\n }"
|
||||
done
|
||||
# Add extra newlines if there are also failures to report
|
||||
if [ "${#preflight_fail[@]}" -gt 0 ]; then
|
||||
preflight_pass_string="$preflight_pass_string\n\n"
|
||||
fi
|
||||
fi
|
||||
if [ "${#preflight_fail[@]}" -gt 0 ]; then
|
||||
preflight_fail_string="Failed Checks:"
|
||||
for (( i=0; i<"${#preflight_fail[@]}"; i++ )); do
|
||||
if [ "$i" -eq 0 ]; then
|
||||
preflight_fail_string="$preflight_fail_string\n- ${preflight_fail[i]//\\n/\\n }"
|
||||
else
|
||||
preflight_fail_string="$preflight_fail_string\n\n- ${preflight_fail[i]//\\n/\\n }"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
for (( i=0; i<"${#preflight_manual[@]}"; i++ )); do
|
||||
if [ "$i" -eq 0 ]; then
|
||||
preflight_manual_string="${preflight_manual[i]}"
|
||||
else
|
||||
preflight_manual_string="$preflight_manual_string\n\n${preflight_manual[i]}"
|
||||
fi
|
||||
done
|
||||
|
||||
# Display the results of the preflight check
|
||||
if [ -z "$preflight_fail_string" ]; then
|
||||
# Formatting
|
||||
message_heading="Preflight Check Complete"
|
||||
if [ "$use_zenity" -eq 1 ]; then
|
||||
message_heading="<b>$message_heading</b>"
|
||||
fi
|
||||
|
||||
message info "$message_heading\n\nYour system is optimized for Star Citizen!\n\n$preflight_pass_string"
|
||||
else
|
||||
if [ -z "$preflight_action_funcs" ]; then
|
||||
message warning "$preflight_pass_string$preflight_fail_string"
|
||||
elif message question "$preflight_pass_string$preflight_fail_string\n\nWould you like configuration issues to be fixed for you?"; then
|
||||
# Call functions to build fixes for any issues found
|
||||
for (( i=0; i<"${#preflight_action_funcs[@]}"; i++ )); do
|
||||
${preflight_action_funcs[i]}
|
||||
done
|
||||
# Populate a string of actions to be executed
|
||||
for (( i=0; i<"${#preflight_actions[@]}"; i++ )); do
|
||||
if [ "$i" -eq 0 ]; then
|
||||
preflight_actions_string="${preflight_actions[i]}"
|
||||
else
|
||||
preflight_actions_string="$preflight_actions_string; ${preflight_actions[i]}"
|
||||
fi
|
||||
done
|
||||
|
||||
# Execute the actions set by the functions
|
||||
if [ ! -z "$preflight_actions_string" ]; then
|
||||
# Use pollkit's pkexec for gui with a fallback to sudo
|
||||
if [ -x "$(command -v pkexec)" ]; then
|
||||
pkexec sh -c "$preflight_actions_string"
|
||||
else
|
||||
sudo sh -c "$preflight_actions_string"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Call any followup functions
|
||||
for (( i=0; i<"${#preflight_followup[@]}"; i++ )); do
|
||||
${preflight_followup[i]}
|
||||
done
|
||||
|
||||
# Populate the results string
|
||||
for (( i=0; i<"${#preflight_results[@]}"; i++ )); do
|
||||
if [ "$i" -eq 0 ]; then
|
||||
preflight_results_string="${preflight_results[i]}"
|
||||
else
|
||||
preflight_results_string="$preflight_results_string\n\n${preflight_results[i]}"
|
||||
fi
|
||||
done
|
||||
|
||||
# Display the results
|
||||
message info "$preflight_results_string"
|
||||
else
|
||||
# User declined to automatically fix configuration issues
|
||||
# Show manual configuration options
|
||||
if [ ! -z "$preflight_manual_string" ]; then
|
||||
message info "$preflight_manual_string"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
#------------------------- end preflight check functions ---------------------#
|
||||
|
||||
# Delete the shaders directory
|
||||
rm_shaders() {
|
||||
# Get/Set directory paths
|
||||
getdirs
|
||||
if [ "$?" -eq 1 ]; then
|
||||
# User cancelled and wants to return to the main menu, or error
|
||||
return 0
|
||||
fi
|
||||
#------------------------- begin download functions ----------------------------#
|
||||
|
||||
# Sanity check
|
||||
if [ ! -d "$shaders_dir" ]; then
|
||||
message warning "Shaders directory not found. There is nothing to delete!\n\n$shaders_dir"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Delete the shader directory
|
||||
if message question "The following directory will be deleted:\n\n$shaders_dir\n\nDo you want to proceed?"; then
|
||||
debug_print continue "Deleting $shaders_dir..."
|
||||
rm -r "$shaders_dir"
|
||||
message info "Your shaders have been deleted!"
|
||||
fi
|
||||
}
|
||||
|
||||
# Delete DXVK cache
|
||||
rm_dxvkcache() {
|
||||
# Get/Set directory paths
|
||||
getdirs
|
||||
if [ "$?" -eq 1 ]; then
|
||||
# User cancelled and wants to return to the main menu
|
||||
# or there was an error
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Sanity check
|
||||
if [ ! -f "$dxvk_cache" ]; then
|
||||
message warning "Unable to find the DXVK cache file. There is nothing to delete!\n\n$dxvk_cache"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Delete the cache file
|
||||
if message question "The following file will be deleted:\n\n$dxvk_cache\n\nDo you want to proceed?"; then
|
||||
debug_print continue "Deleting $dxvk_cache..."
|
||||
rm "$dxvk_cache"
|
||||
message info "Your DXVK cache has been deleted!"
|
||||
fi
|
||||
}
|
||||
|
||||
# Restart lutris
|
||||
# Restart lutris if necessary
|
||||
lutris_restart() {
|
||||
if [ "$lutris_needs_restart" = "true" ] && [ "$(pgrep lutris)" ]; then
|
||||
if message question "Lutris must be restarted to detect the changes.\nWould you like this Helper to restart it for you?"; then
|
||||
@ -804,22 +910,42 @@ lutris_restart() {
|
||||
lutris_needs_restart="false"
|
||||
}
|
||||
|
||||
#------------------------- begin download functions ----------------------------#
|
||||
|
||||
# Display post download message or instructions if needed
|
||||
# Perform post-download actions, display messages or instructions
|
||||
# Expects the variables message_heading, post_download_msg_text,
|
||||
# post_download_msg_italics, and downloaded_item_name
|
||||
# Optional: post_download_msg_more_info and post_download_msg_link
|
||||
post_download() {
|
||||
if [ "$trigger_post_download" = "true" ]; then
|
||||
# Check if lutris needs to be restarted after making changes
|
||||
lutris_restart
|
||||
|
||||
if [ "$display_post_download_msg" = "true" ]; then
|
||||
message_heading="Download Complete"
|
||||
|
||||
# Format some variables for zenity
|
||||
if [ "$use_zenity" -eq 1 ]; then
|
||||
message_heading="<b>$message_heading</b>"
|
||||
post_download_msg_italics="<i>$post_download_msg_italics</i>"
|
||||
|
||||
# If we have a link to provide, format it as well
|
||||
if [ -n "$post_download_msg_link" ]; then
|
||||
post_download_msg_link="<a href='$post_download_msg_link'>$post_download_msg_link</a>"
|
||||
fi
|
||||
fi
|
||||
message info "$message_heading\n\n$post_download_msg_text\n\n$post_download_msg_italics\n$downloaded_item_name"
|
||||
|
||||
# Add newlines to the optional variables if set
|
||||
if [ -n "$post_download_msg_more_info" ]; then
|
||||
post_download_msg_more_info="\n\n$post_download_msg_more_info"
|
||||
fi
|
||||
if [ -n "$post_download_msg_link" ]; then
|
||||
post_download_msg_link="\n$post_download_msg_link"
|
||||
fi
|
||||
|
||||
# Display the info
|
||||
message info "$message_heading\n\n$post_download_msg_text\n$post_download_msg_italics\n\n$downloaded_item_name$post_download_msg_more_info$post_download_msg_link"
|
||||
fi
|
||||
trigger_post_download="false"
|
||||
|
||||
# Reset
|
||||
display_post_download_msg="false"
|
||||
}
|
||||
|
||||
# Uninstall the selected item
|
||||
@ -905,6 +1031,9 @@ download_install() {
|
||||
*.tar.xz)
|
||||
download_name="$(basename "$download_file" .tar.xz)"
|
||||
;;
|
||||
*.tar.zst)
|
||||
download_name="$(basename "$download_file" .tar.zst)"
|
||||
;;
|
||||
*)
|
||||
debug_print exit "Unknown archive filetype in download_install function. Aborting."
|
||||
;;
|
||||
@ -1001,7 +1130,7 @@ download_install() {
|
||||
# Store the final name of the downloaded directory
|
||||
downloaded_item_name="$download_name"
|
||||
# Trigger the post_download() function
|
||||
trigger_post_download="true"
|
||||
display_post_download_msg="true"
|
||||
elif [ "$num_dirs" -gt 1 ] || [ "$num_files" -gt 0 ]; then
|
||||
# If the archive contains more than one directory or
|
||||
# one or more files, we must create a subdirectory
|
||||
@ -1019,7 +1148,7 @@ download_install() {
|
||||
# Store the final name of the downloaded directory
|
||||
downloaded_item_name="$download_name"
|
||||
# Trigger the post_download() function
|
||||
trigger_post_download="true"
|
||||
display_post_download_msg="true"
|
||||
else
|
||||
# Some unexpected combination of directories and files
|
||||
debug_print exit "Script error: Unexpected archive contents in download_install function. Aborting"
|
||||
@ -1029,9 +1158,6 @@ download_install() {
|
||||
# Cleanup tmp download
|
||||
debug_print continue "Cleaning up $tmp_dir/$download_file..."
|
||||
rm "$tmp_dir/$download_file"
|
||||
|
||||
# Display any post-download messages or instructions
|
||||
post_download
|
||||
}
|
||||
|
||||
# List available items for download
|
||||
@ -1057,13 +1183,15 @@ download_select_install() {
|
||||
debug_print exit "Script error: Unknown api/url format in ${download_type}_sources array. Aborting."
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
# For runners, check GlibC version against runner requirements
|
||||
if [ "download_type" = "runner" ] && [ "$contributor_name" = "/dev/null" ]; then
|
||||
if [ "$download_type" = "runner" ] && [ "$contributor_name" = "/dev/null" ]; then
|
||||
required_glibc="2.33"
|
||||
system_glibc="$(ldd --version | awk '/ldd/{print $NF}')"
|
||||
|
||||
if [ "$(bc <<< "$required_glibc > $system_glibc")" = "1" ]; then
|
||||
# Sort the versions and check if the installed glibc is smaller
|
||||
if [ "$required_glibc" != "$system_glibc" ] &&
|
||||
[ "$system_glibc" = "$(printf "$system_glibc\n$required_glibc" | sort -V | head -n1)" ]; then
|
||||
message warning "Your glibc version is incompatible with the selected runner.\n\nSystem glibc: v$system_glibc\nMinimum required glibc: v$required_glibc"
|
||||
return 1
|
||||
fi
|
||||
@ -1107,7 +1235,10 @@ download_select_install() {
|
||||
;;
|
||||
*.tar.xz)
|
||||
download_name="$(basename "${download_versions[i]}" .tar.xz)"
|
||||
;;
|
||||
;;
|
||||
*.tar.zst)
|
||||
download_name="$(basename "${download_versions[i]}" .tar.zst)"
|
||||
;;
|
||||
*)
|
||||
debug_print exit "Unknown archive filetype in download_select_install function. Aborting."
|
||||
;;
|
||||
@ -1213,19 +1344,16 @@ download_manage() {
|
||||
|
||||
# Call the menu function. It will use the options as configured above
|
||||
menu
|
||||
# Perform post-download actions and display messages or instructions
|
||||
post_download
|
||||
done
|
||||
|
||||
# Check if lutris needs to be restarted after making changes
|
||||
lutris_restart
|
||||
}
|
||||
|
||||
#-------------------------- end download functions -----------------------------#
|
||||
|
||||
# Configure the download_manage function for runners
|
||||
runner_manage() {
|
||||
# Set some defaults
|
||||
lutris_needs_restart="false"
|
||||
trigger_post_download="false"
|
||||
display_post_download_msg="false"
|
||||
|
||||
# Use indirect expansion to point download_sources
|
||||
# to the runner_sources array set at the top of the script
|
||||
@ -1242,9 +1370,13 @@ runner_manage() {
|
||||
# A header is automatically displayed that reads: Download Complete
|
||||
# msg_text is displayed below the header
|
||||
# msg_italics is displayed below that in italics when zenity is in use
|
||||
# Lastly, the downloaded directory name is automatically displayed
|
||||
post_download_msg_text="Select the runner in Lutris from the dropdown menu"
|
||||
# Then, the downloaded directory name is automatically displayed
|
||||
# Optional variables post_download_msg_more_info and
|
||||
# post_download_msg_link will be displayed if set
|
||||
post_download_msg_text="Select the following runner in Lutris from the dropdown menu under:"
|
||||
post_download_msg_italics="Configure->Runner Options->Wine version"
|
||||
post_download_msg_more_info=""
|
||||
post_download_msg_link=""
|
||||
|
||||
# Call the download_manage function with the above configuration
|
||||
# The argument passed to the function is used for special handling
|
||||
@ -1256,7 +1388,7 @@ runner_manage() {
|
||||
dxvk_manage() {
|
||||
# Set some defaults
|
||||
lutris_needs_restart="false"
|
||||
trigger_post_download="false"
|
||||
display_post_download_msg="false"
|
||||
|
||||
# Use indirect expansion to point download_sources
|
||||
# to the dxvk_sources array set at the top of the script
|
||||
@ -1264,8 +1396,8 @@ dxvk_manage() {
|
||||
download_dir="$dxvk_dir"
|
||||
|
||||
# Configure the text displayed in the menus
|
||||
download_menu_heading="DXVK Versions"
|
||||
download_menu_description="The DXVK versions below may help improve game performance"
|
||||
download_menu_heading="Lutris DXVK Versions"
|
||||
download_menu_description="The DXVK versions below may help reduce stuttering"
|
||||
download_menu_height="140"
|
||||
|
||||
# Set the post download instructions
|
||||
@ -1273,9 +1405,13 @@ dxvk_manage() {
|
||||
# A header is automatically displayed that reads: Download Complete
|
||||
# msg_text is displayed below the header
|
||||
# msg_italics is displayed below that in italics when zenity is in use
|
||||
# Lastly, the downloaded directory name is automatically displayed
|
||||
post_download_msg_text="Type the DXVK folder name in your Lutris settings"
|
||||
# Then, the downloaded directory name is automatically displayed
|
||||
# Optional variables post_download_msg_more_info and
|
||||
# post_download_msg_link will be displayed if set
|
||||
post_download_msg_text="Type the following DXVK name into your Lutris settings under:"
|
||||
post_download_msg_italics="Configure->Runner Options->DXVK version"
|
||||
post_download_msg_more_info="See our wiki for instructions on setting the DXVK_ASYNC environment variable in Lutris:"
|
||||
post_download_msg_link="https://github.com/starcitizen-lug/information-howtos/wiki/Performance-Tuning#dxvk-async"
|
||||
|
||||
# Call the download_manage function with the above configuration
|
||||
# The argument passed to the function is used for special handling
|
||||
@ -1283,113 +1419,127 @@ dxvk_manage() {
|
||||
download_manage "dxvk"
|
||||
}
|
||||
|
||||
#-------------------------- end dxvk functions -----------------------------#
|
||||
#-------------------------- end download functions -----------------------------#
|
||||
|
||||
# Check that the system is optimized for Star Citizen
|
||||
preflight_check() {
|
||||
# Initialize variables
|
||||
unset preflight_pass
|
||||
unset preflight_fail
|
||||
unset preflight_action_funcs
|
||||
unset preflight_actions
|
||||
unset preflight_results
|
||||
unset preflight_manual
|
||||
unset preflight_followup
|
||||
|
||||
# Call the optimization functions to perform the checks
|
||||
memory_check
|
||||
avx_check
|
||||
mapcount_check
|
||||
filelimit_check
|
||||
|
||||
# Populate info strings with the results and add formatting
|
||||
if [ "${#preflight_pass[@]}" -gt 0 ]; then
|
||||
preflight_pass_string="Passed Checks:"
|
||||
for (( i=0; i<"${#preflight_pass[@]}"; i++ )); do
|
||||
preflight_pass_string="$preflight_pass_string\n- ${preflight_pass[i]//\\n/\\n }"
|
||||
done
|
||||
# Add extra newlines if there are also failures to report
|
||||
if [ "${#preflight_fail[@]}" -gt 0 ]; then
|
||||
preflight_pass_string="$preflight_pass_string\n\n"
|
||||
fi
|
||||
# Deploy Easy Anti-Cheat Workaround
|
||||
eac_workaround() {
|
||||
# Get/set directory paths
|
||||
getdirs
|
||||
if [ "$?" -eq 1 ]; then
|
||||
# User cancelled and wants to return to the main menu
|
||||
# or there was an error
|
||||
return 0
|
||||
fi
|
||||
if [ "${#preflight_fail[@]}" -gt 0 ]; then
|
||||
preflight_fail_string="Failed Checks:"
|
||||
for (( i=0; i<"${#preflight_fail[@]}"; i++ )); do
|
||||
if [ "$i" -eq 0 ]; then
|
||||
preflight_fail_string="$preflight_fail_string\n- ${preflight_fail[i]//\\n/\\n }"
|
||||
else
|
||||
preflight_fail_string="$preflight_fail_string\n\n- ${preflight_fail[i]//\\n/\\n }"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
for (( i=0; i<"${#preflight_manual[@]}"; i++ )); do
|
||||
if [ "$i" -eq 0 ]; then
|
||||
preflight_manual_string="${preflight_manual[i]}"
|
||||
else
|
||||
preflight_manual_string="$preflight_manual_string\n\n${preflight_manual[i]}"
|
||||
fi
|
||||
done
|
||||
|
||||
# Display the results of the preflight check
|
||||
if [ -z "$preflight_fail_string" ]; then
|
||||
# Formatting
|
||||
message_heading="Preflight Check Complete"
|
||||
if [ "$use_zenity" -eq 1 ]; then
|
||||
message_heading="<b>$message_heading</b>"
|
||||
fi
|
||||
# Set the EAC directory path and hosts modification
|
||||
eac_dir="$wine_prefix/drive_c/users/$USER/AppData/Roaming/EasyAntiCheat"
|
||||
eac_hosts="127.0.0.1 modules-cdn.eac-prod.on.epicgames.com"
|
||||
|
||||
# Check if EAC workaround is already applied
|
||||
if grep "$eac_hosts" /etc/hosts; then
|
||||
message info "The Easy Anti-Cheat workaround has already been applied.\nYou're all set!"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Configure message variables
|
||||
eac_title="Easy Anti-Cheat Workaround"
|
||||
eac_hosts_formatted="$eac_hosts"
|
||||
eac_dir_formatted="$eac_dir"
|
||||
if [ "$use_zenity" -eq 1 ]; then
|
||||
eac_title="<b>$eac_title</b>"
|
||||
eac_hosts_formatted="<i>$eac_hosts_formatted</i>"
|
||||
eac_dir_formatted="<i>$eac_dir_formatted</i>"
|
||||
fi
|
||||
|
||||
if message question "$eac_title\n\nThe following entry will be added to /etc/hosts:\n$eac_hosts_formatted\n\nThe following directory will be deleted:\n$eac_dir_formatted\n\n\nTo revert these changes, delete the above line from\n/etc/hosts and relaunch the game\n\nDo you want to proceed?"; then
|
||||
debug_print continue "Editing hosts file..."
|
||||
|
||||
message info "$message_heading\n\nYour system is optimized for Star Citizen!\n\n$preflight_pass_string"
|
||||
else
|
||||
if [ -z "$preflight_action_funcs" ]; then
|
||||
message warning "$preflight_pass_string$preflight_fail_string"
|
||||
elif message question "$preflight_pass_string$preflight_fail_string\n\nWould you like configuration issues to be fixed for you?"; then
|
||||
# Call functions to build fixes for any issues found
|
||||
for (( i=0; i<"${#preflight_action_funcs[@]}"; i++ )); do
|
||||
${preflight_action_funcs[i]}
|
||||
done
|
||||
# Populate a string of actions to be executed
|
||||
for (( i=0; i<"${#preflight_actions[@]}"; i++ )); do
|
||||
if [ "$i" -eq 0 ]; then
|
||||
preflight_actions_string="${preflight_actions[i]}"
|
||||
else
|
||||
preflight_actions_string="$preflight_actions_string; ${preflight_actions[i]}"
|
||||
fi
|
||||
done
|
||||
|
||||
# Execute the actions set by the functions
|
||||
if [ ! -z "$preflight_actions_string" ]; then
|
||||
# Use pollkit's pkexec for gui with a fallback to sudo
|
||||
if [ -x "$(command -v pkexec)" ]; then
|
||||
pkexec sh -c "$preflight_actions_string"
|
||||
else
|
||||
sudo sh -c "$preflight_actions_string"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Call any followup functions
|
||||
for (( i=0; i<"${#preflight_followup[@]}"; i++ )); do
|
||||
${preflight_followup[i]}
|
||||
done
|
||||
|
||||
# Populate the results string
|
||||
for (( i=0; i<"${#preflight_results[@]}"; i++ )); do
|
||||
if [ "$i" -eq 0 ]; then
|
||||
preflight_results_string="${preflight_results[i]}"
|
||||
else
|
||||
preflight_results_string="$preflight_results_string\n\n${preflight_results[i]}"
|
||||
fi
|
||||
done
|
||||
|
||||
# Display the results
|
||||
message info "$preflight_results_string"
|
||||
# Use pollkit's pkexec for gui with a fallback to sudo
|
||||
if [ -x "$(command -v pkexec)" ]; then
|
||||
pkexec sh -c "echo $eac_hosts '#Star Citizen EAC workaround' >> /etc/hosts"
|
||||
else
|
||||
# User declined to automatically fix configuration issues
|
||||
# Show manual configuration options
|
||||
if [ ! -z "$preflight_manual_string" ]; then
|
||||
message info "$preflight_manual_string"
|
||||
fi
|
||||
sudo sh -c "echo $eac_hosts '#Star Citizen EAC workaround' >> /etc/hosts"
|
||||
fi
|
||||
|
||||
# Delete the EAC directory if it exists
|
||||
if [ -d "$eac_dir" ]; then
|
||||
debug_print continue "Deleting $eac_dir..."
|
||||
rm -r "$eac_dir"
|
||||
fi
|
||||
|
||||
message info "Easy Anti-Cheat workaround has been deployed!"
|
||||
fi
|
||||
}
|
||||
|
||||
# Install Star Citizen using Lutris
|
||||
install_game() {
|
||||
# Check if Lutris is installed
|
||||
if [ ! -x "$(command -v lutris)" ]; then
|
||||
message warning "Lutris is required but does not appear to be installed."
|
||||
return 0
|
||||
fi
|
||||
# Check if the install script exists
|
||||
if [ ! -f "$install_script" ]; then
|
||||
message warning "Lutris install script not found.\n\n$install_script\n\nIt is included in our official releases here:\n$releases_url"
|
||||
return 0
|
||||
fi
|
||||
|
||||
if message question "Before proceeding, please refer to our Quick Start Guide:\n\n$lug_wiki\n\nAre you ready to continue?"; then
|
||||
lutris --install "$install_script" &
|
||||
message info "The installation will continue in Lutris"
|
||||
fi
|
||||
}
|
||||
|
||||
# Display the LUG Wiki
|
||||
display_wiki() {
|
||||
# Display a message containing the URL
|
||||
message info "See the Wiki for our Quick-Start Guide, Manual Installation instructions,\nPerformance Tuning, and Common Issues and Solutions:\n\n$lug_wiki"
|
||||
}
|
||||
|
||||
# Delete the shaders directory
|
||||
rm_shaders() {
|
||||
# Get/Set directory paths
|
||||
getdirs
|
||||
if [ "$?" -eq 1 ]; then
|
||||
# User cancelled and wants to return to the main menu, or error
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Sanity check
|
||||
if [ ! -d "$shaders_dir" ]; then
|
||||
message warning "Shaders directory not found. There is nothing to delete!\n\n$shaders_dir"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Delete the shader directory
|
||||
if message question "The following directory will be deleted:\n\n$shaders_dir\n\nDo you want to proceed?"; then
|
||||
debug_print continue "Deleting $shaders_dir..."
|
||||
rm -r "$shaders_dir"
|
||||
message info "Your shaders have been deleted!"
|
||||
fi
|
||||
}
|
||||
|
||||
# Delete DXVK cache
|
||||
rm_dxvkcache() {
|
||||
# Get/Set directory paths
|
||||
getdirs
|
||||
if [ "$?" -eq 1 ]; then
|
||||
# User cancelled and wants to return to the main menu
|
||||
# or there was an error
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Sanity check
|
||||
if [ ! -f "$dxvk_cache" ]; then
|
||||
message warning "Unable to find the DXVK cache file. There is nothing to delete!\n\n$dxvk_cache"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Delete the cache file
|
||||
if message question "The following file will be deleted:\n\n$dxvk_cache\n\nDo you want to proceed?"; then
|
||||
debug_print continue "Deleting $dxvk_cache..."
|
||||
rm "$dxvk_cache"
|
||||
message info "Your DXVK cache has been deleted!"
|
||||
fi
|
||||
}
|
||||
|
||||
@ -1409,13 +1559,14 @@ maintenance_menu() {
|
||||
shaders_msg="Delete my shaders folder only (Do this after each game update)"
|
||||
vidcache_msg="Delete my DXVK cache"
|
||||
dirs_msg="Display Helper and Star Citizen directories"
|
||||
wiki_msg="Show the LUG Wiki"
|
||||
reset_msg="Reset Helper configs"
|
||||
quit_msg="Return to the main menu"
|
||||
|
||||
# Set the options to be displayed in the menu
|
||||
menu_options=("$version_msg" "$sanitize_msg" "$shaders_msg" "$vidcache_msg" "$dirs_msg" "$reset_msg" "$quit_msg")
|
||||
menu_options=("$version_msg" "$sanitize_msg" "$shaders_msg" "$vidcache_msg" "$dirs_msg" "$wiki_msg" "$reset_msg" "$quit_msg")
|
||||
# Set the corresponding functions to be called for each of the options
|
||||
menu_actions=("set_version" "sanitize" "rm_shaders" "rm_dxvkcache" "display_dirs" "reset_helper" "menu_loop_done")
|
||||
menu_actions=("set_version" "sanitize" "rm_shaders" "rm_dxvkcache" "display_dirs" "display_wiki" "reset_helper" "menu_loop_done")
|
||||
|
||||
# Calculate the total height the menu should be
|
||||
menu_height="$(($menu_option_height * ${#menu_options[@]} + $menu_text_height))"
|
||||
@ -1431,7 +1582,7 @@ maintenance_menu() {
|
||||
# Get a random Penguin's Star Citizen referral code
|
||||
referral_randomizer() {
|
||||
# Populate the referral codes array
|
||||
referral_codes=("STAR-4TZD-6KMM" "STAR-4XM2-VM99" "STAR-2NPY-FCR2" "STAR-T9Z9-7W6P" "STAR-VLBF-W2QR" "STAR-BYR6-YHMF" "STAR-3X2H-VZMX" "STAR-BRWN-FB9T" "STAR-FG6Y-N4Q4" "STAR-VLD6-VZRG" "STAR-T9KF-LV77" "STAR-4XHB-R7RF" "STAR-9NVF-MRN7" "STAR-3Q4W-9TC3" "STAR-3SBK-7QTT" "STAR-XFBT-9TTK" "STAR-F3H9-YPHN" "STAR-BYK6-RCCL" "STAR-XCKH-W6T7" "STAR-H292-39WK" "STAR-ZRT5-PJB7" "STAR-GMBP-SH9Y" "STAR-PLWB-LMFY" "STAR-TNZN-H4ZT" "STAR-T5G5-L2GJ" "STAR-6TPV-7QH2" "STAR-THHD-TV3Y" "STAR-7ZFS-PK2L" "STAR-SRQN-43TB" "STAR-9TDG-D4H9" "STAR-BPH3-THJC" "STAR-HL3M-R5KC" "STAR-GBS5-LTVB" "STAR-CJ3Y-KZZ4" "STAR-5GRM-7HBY" "STAR-G2GX-Y2QJ" "STAR-YWY3-H4XX" "STAR-6VGM-PTKC" "STAR-T6MZ-QFHX" "STAR-T2K6-LXFW" "STAR-XN25-9CJJ" "STAR-47V3-4QGB" "STAR-YD4Z-TQZV" "STAR-XLN7-9XNJ" "STAR-N62T-2R39" "STAR-3S3D-9HXQ" "STAR-TRZF-NMCV" "STAR-TLLJ-SMG4")
|
||||
referral_codes=("STAR-4TZD-6KMM" "STAR-4XM2-VM99" "STAR-2NPY-FCR2" "STAR-T9Z9-7W6P" "STAR-VLBF-W2QR" "STAR-BYR6-YHMF" "STAR-3X2H-VZMX" "STAR-BRWN-FB9T" "STAR-FG6Y-N4Q4" "STAR-VLD6-VZRG" "STAR-T9KF-LV77" "STAR-4XHB-R7RF" "STAR-9NVF-MRN7" "STAR-3Q4W-9TC3" "STAR-3SBK-7QTT" "STAR-XFBT-9TTK" "STAR-F3H9-YPHN" "STAR-BYK6-RCCL" "STAR-XCKH-W6T7" "STAR-H292-39WK" "STAR-ZRT5-PJB7" "STAR-GMBP-SH9Y" "STAR-PLWB-LMFY" "STAR-TNZN-H4ZT" "STAR-T5G5-L2GJ" "STAR-6TPV-7QH2" "STAR-THHD-TV3Y" "STAR-7ZFS-PK2L" "STAR-SRQN-43TB" "STAR-9TDG-D4H9" "STAR-BPH3-THJC" "STAR-HL3M-R5KC" "STAR-GBS5-LTVB" "STAR-CJ3Y-KZZ4" "STAR-5GRM-7HBY" "STAR-G2GX-Y2QJ" "STAR-YWY3-H4XX" "STAR-6VGM-PTKC" "STAR-T6MZ-QFHX" "STAR-T2K6-LXFW" "STAR-XN25-9CJJ" "STAR-47V3-4QGB" "STAR-YD4Z-TQZV" "STAR-XLN7-9XNJ" "STAR-N62T-2R39" "STAR-3S3D-9HXQ" "STAR-TRZF-NMCV" "STAR-TLLJ-SMG4" "STAR-MFT6-Q44H" "STAR-TZX2-TPWF")
|
||||
# Pick a random array element. Scale a floating point number for
|
||||
# a more random distribution than simply calling RANDOM
|
||||
random_code="${referral_codes[$(awk '{srand($2); print int(rand()*$1)}' <<< "${#referral_codes[@]} $RANDOM")]}"
|
||||
@ -1494,20 +1645,6 @@ fi
|
||||
# Set defaults
|
||||
live_or_ptu="$live_dir"
|
||||
|
||||
# Check if a newer verison of the script is available
|
||||
latest_version="$(get_latest_release "$repo")"
|
||||
|
||||
if [ "$latest_version" != "$current_version" ] &&
|
||||
[ "$current_version" = "$(printf "$current_version\n$latest_version" | sort -V | head -n1)" ]; then
|
||||
if [ "$use_zenity" -eq 1 ]; then
|
||||
releases_url_formatted="<a href='$releases_url'>$releases_url</a>"
|
||||
else
|
||||
releases_url_formatted="$releases_url"
|
||||
fi
|
||||
|
||||
message info "The latest version of the LUG Helper is $latest_version\nYou are using $current_version\n\nYou can download new releases here:\n$releases_url_formatted"
|
||||
fi
|
||||
|
||||
# If invoked with command line arguments, process them and exit
|
||||
if [ "$#" -gt 0 ]; then
|
||||
while [ "$#" -gt 0 ]
|
||||
@ -1518,6 +1655,7 @@ if [ "$#" -gt 0 ]; then
|
||||
printf "Star Citizen Linux Users Group Helper Script
|
||||
Usage: lug-helper <options>
|
||||
-p, --preflight-check Run system optimization checks
|
||||
-i, --install Install Star Citizen
|
||||
-m, --manage-runners Install or remove Lutris runners
|
||||
-k, --manage-dxvk Install or remove DXVK versions
|
||||
-u, --delete-user-folder Delete Star Citizen USER folder, preserving keybinds
|
||||
@ -1534,6 +1672,9 @@ Usage: lug-helper <options>
|
||||
--preflight-check | -p )
|
||||
cargs+=("preflight_check")
|
||||
;;
|
||||
--install | -i )
|
||||
cargs+=("install_game")
|
||||
;;
|
||||
--manage-runners | -m )
|
||||
cargs+=("runner_manage")
|
||||
;;
|
||||
@ -1602,6 +1743,22 @@ Usage: lug-helper <options>
|
||||
fi
|
||||
fi
|
||||
|
||||
# Format some URLs for Zenity
|
||||
if [ "$use_zenity" -eq 1 ]; then
|
||||
releases_url="<a href='$releases_url'>$releases_url</a>"
|
||||
lug_wiki="<a href='$lug_wiki'>$lug_wiki</a>"
|
||||
fi
|
||||
|
||||
# Check if a newer verison of the script is available
|
||||
latest_version="$(get_latest_release "$repo")"
|
||||
|
||||
# Sort the versions and check if the installed Helper is smaller
|
||||
if [ "$latest_version" != "$current_version" ] &&
|
||||
[ "$current_version" = "$(printf "$current_version\n$latest_version" | sort -V | head -n1)" ]; then
|
||||
|
||||
message info "The latest version of the LUG Helper is $latest_version\nYou are using $current_version\n\nYou can download new releases here:\n$releases_url"
|
||||
fi
|
||||
|
||||
# Loop the main menu until the user selects quit
|
||||
while true; do
|
||||
# Configure the menu
|
||||
@ -1611,16 +1768,18 @@ while true; do
|
||||
|
||||
# Configure the menu options
|
||||
preflight_msg="Preflight Check (System Optimization)"
|
||||
install_msg="Install Star Citizen"
|
||||
eac_msg="Deploy Easy Anti-Cheat Workaround"
|
||||
runners_msg="Manage Lutris Runners"
|
||||
dxvk_msg="Manage DXVK Versions"
|
||||
dxvk_msg="Manage Lutris DXVK Versions"
|
||||
maintenance_msg="Maintenance and Troubleshooting"
|
||||
randomizer_msg="Get a random Penguin's Star Citizen referral code"
|
||||
quit_msg="Quit"
|
||||
|
||||
# Set the options to be displayed in the menu
|
||||
menu_options=("$preflight_msg" "$runners_msg" "$dxvk_msg" "$maintenance_msg" "$randomizer_msg" "$quit_msg")
|
||||
menu_options=("$preflight_msg" "$install_msg" "$eac_msg" "$runners_msg" "$dxvk_msg" "$maintenance_msg" "$randomizer_msg" "$quit_msg")
|
||||
# Set the corresponding functions to be called for each of the options
|
||||
menu_actions=("preflight_check" "runner_manage" "dxvk_manage" "maintenance_menu" "referral_randomizer" "quit")
|
||||
menu_actions=("preflight_check" "install_game" "eac_workaround" "runner_manage" "dxvk_manage" "maintenance_menu" "referral_randomizer" "quit")
|
||||
|
||||
# Calculate the total height the menu should be
|
||||
menu_height="$(($menu_option_height * ${#menu_options[@]} + $menu_text_height))"
|
||||
|
91
lug-lutris-install.json
Normal file
91
lug-lutris-install.json
Normal file
@ -0,0 +1,91 @@
|
||||
{
|
||||
"count": 1,
|
||||
"next": null,
|
||||
"previous": null,
|
||||
"results": [
|
||||
{
|
||||
"id": 10872,
|
||||
"game_id": 17622,
|
||||
"game_slug": "star-citizen",
|
||||
"name": "Star Citizen",
|
||||
"year": 2016,
|
||||
"user": "ungarscool1",
|
||||
"runner": "wine",
|
||||
"slug": "starcitizen-lutris-install",
|
||||
"version": "LIVE/PTU",
|
||||
"description": "Welcome to the Star Citizen installer maintained by the Star Citizen LUG!\r\nBefore continuing, please see our Quick Start Guide:\r\nhttps://github.com/starcitizen-lug/information-howtos/wiki\r\n\r\nFor help with the installer or to just hang out, we invite Linux Star Citizen players to join us: https://robertsspaceindustries.com/orgs/LUG/",
|
||||
"notes": "Performance may be choppy the first couple minutes after visiting a new place or performing a new activity while shaders compile. Subsequent arrival should not be choppy.\r\n\r\nIf you receive a Runtime Error you can continue using Star Citizen by dragging the dialog box to the side, but in-game VoIP and FoIP will cease to function until Star Citizen is restarted. Drop in to the LUG group's chat and forums, we have custom runners to work around this problem.\r\n\r\nPlease make sure you have all Wine dependencies properly installed, or your game may crash during start-up. See our wiki linked above for more information and instructions.\r\n\r\nTo prevent crashes in areas with lots of geometry, the game needs a Linux resource limit named \"vm.max_map_count\" increased. If you are following our Quick Start Guide and using our LUG Helper, the Preflight Check will do this for you. To set it manually, execute:\r\n\r\nsudo sysctl -w vm.max_map_count=16777216\r\n\r\nConsult your distro's documentation on how to set this permanently, or ask a LUG member.\r\n\r\nSee you in the 'verse!",
|
||||
"created_at": "2018-11-15T17:43:07.367000Z",
|
||||
"updated_at": "2021-12-24T00:49:16.775712Z",
|
||||
"draft": false,
|
||||
"published": true,
|
||||
"published_by": 64834,
|
||||
"rating": "",
|
||||
"steamid": null,
|
||||
"gogid": null,
|
||||
"gogslug": "",
|
||||
"humbleid": "",
|
||||
"humblestoreid": "",
|
||||
"humblestoreid_real": "",
|
||||
"script": {
|
||||
"files": [
|
||||
{
|
||||
"client": "https://install.robertsspaceindustries.com/star-citizen/RSI-Setup-1.5.5.exe"
|
||||
}
|
||||
],
|
||||
"game": {
|
||||
"arch": "win64",
|
||||
"args": null,
|
||||
"exe": "drive_c/Program Files/Roberts Space Industries/RSI Launcher/RSI Launcher.exe",
|
||||
"prefix": "$GAMEDIR"
|
||||
},
|
||||
"installer": [
|
||||
{
|
||||
"task": {
|
||||
"arch": "win64",
|
||||
"description": "Creating Wine prefix",
|
||||
"name": "create_prefix",
|
||||
"prefix": "$GAMEDIR"
|
||||
}
|
||||
},
|
||||
{
|
||||
"task": {
|
||||
"app": "--force arial vcrun2019 win10",
|
||||
"arch": "win64",
|
||||
"description": "Installing dlls",
|
||||
"name": "winetricks",
|
||||
"prefix": "$GAMEDIR"
|
||||
}
|
||||
},
|
||||
{
|
||||
"task": {
|
||||
"arch": "win64",
|
||||
"args": "/S",
|
||||
"description": "Installing client",
|
||||
"executable": "client",
|
||||
"name": "wineexec",
|
||||
"prefix": "$GAMEDIR"
|
||||
}
|
||||
}
|
||||
],
|
||||
"system": {
|
||||
"env": {
|
||||
"DXVK_HUD": "0",
|
||||
"__GL_SHADER_DISK_CACHE": 1,
|
||||
"__GL_SHADER_DISK_CACHE_SIZE": "1073741824",
|
||||
"__GL_THREADED_OPTIMIZATIONS": "1"
|
||||
}
|
||||
},
|
||||
"wine": {
|
||||
"dxvk": true,
|
||||
"esync": true,
|
||||
"overrides": {
|
||||
"nvapi,nvapi64": "disabled",
|
||||
"libglesv2": "builtin"
|
||||
}
|
||||
}
|
||||
},
|
||||
"content": "files:\n- client: https://install.robertsspaceindustries.com/star-citizen/RSI-Setup-1.5.5.exe\ngame:\n arch: win64\n args: null\n exe: drive_c/Program Files/Roberts Space Industries/RSI Launcher/RSI Launcher.exe\n prefix: $GAMEDIR\ninstaller:\n- task:\n arch: win64\n description: Creating Wine prefix\n name: create_prefix\n prefix: $GAMEDIR\n- task:\n app: --force arial vcrun2019 win10\n arch: win64\n description: Installing dlls\n name: winetricks\n prefix: $GAMEDIR\n- task:\n arch: win64\n args: /S\n description: Installing client\n executable: client\n name: wineexec\n prefix: $GAMEDIR\nsystem:\n env:\n DXVK_HUD: '0'\n __GL_SHADER_DISK_CACHE: 1\n __GL_SHADER_DISK_CACHE_SIZE: '1073741824'\n __GL_THREADED_OPTIMIZATIONS: '1'\nwine:\n dxvk: true\n esync: true\n overrides:\n nvapi,nvapi64: disabled\n libglesv2: builtin\n"
|
||||
}
|
||||
]
|
||||
}
|
Reference in New Issue
Block a user