add gamescope
This commit is contained in:
parent
ad86e17628
commit
a2a6b53407
40
.github/workflows/release.yml
vendored
Normal file
40
.github/workflows/release.yml
vendored
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
name: PikaOS Package Release
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: self-hosted
|
||||||
|
container:
|
||||||
|
image: ubuntu:22.10
|
||||||
|
volumes:
|
||||||
|
- /proc:/proc
|
||||||
|
options: --privileged -it
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Install needed packages
|
||||||
|
run: apt update && apt install software-properties-common sudo git bc gpg gpg-agent bison build-essential ccache cpio fakeroot flex git kmod libelf-dev libncurses5-dev libssl-dev lz4 qtbase5-dev rsync schedtool wget zstd tar reprepro dpkg-sig devscripts dh-make -y
|
||||||
|
|
||||||
|
- name: Import GPG key
|
||||||
|
id: import_gpg
|
||||||
|
uses: crazy-max/ghaction-import-gpg@v5
|
||||||
|
with:
|
||||||
|
gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }}
|
||||||
|
passphrase: ${{ secrets.PASSPHRASE }}
|
||||||
|
|
||||||
|
- name: Install SSH key
|
||||||
|
uses: shimataro/ssh-key-action@v2
|
||||||
|
with:
|
||||||
|
key: ${{ secrets.SSH_KEY }}
|
||||||
|
name: id_rsa
|
||||||
|
known_hosts: ${{ secrets.KNOWN_HOSTS }}
|
||||||
|
if_key_exists: replace
|
||||||
|
|
||||||
|
- name: Build Package
|
||||||
|
run: ./main.sh
|
||||||
|
|
||||||
|
- name: Release Package
|
||||||
|
run: ./release.sh
|
@ -1,4 +1,4 @@
|
|||||||
gamescope-session (0.0.git.92.60c3f5f9-99pika2) kinetic; urgency=low
|
gamescope-session (0.0.git.92.60c3f5f9-99pika3) kinetic; urgency=low
|
||||||
|
|
||||||
* Fix return to desktop
|
* Fix return to desktop
|
||||||
|
|
||||||
|
24
gamescope-session/usr/bin/gamescope-session
Executable file
24
gamescope-session/usr/bin/gamescope-session
Executable file
@ -0,0 +1,24 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Script to start the session used by Valve with minor tweaks for ChimeraOS.
|
||||||
|
|
||||||
|
# Window managers sets this to wayland but apps using Gamescope must use x11
|
||||||
|
export XDG_SESSION_TYPE=x11
|
||||||
|
|
||||||
|
# Update the enviroment with DESKTOP_SESSION and all XDG variables
|
||||||
|
dbus-update-activation-environment --systemd DESKTOP_SESSION `env | grep ^XDG_ | cut -d = -f 1`
|
||||||
|
|
||||||
|
# This makes it so that xdg-desktop-portal doesn't find any portal implementations and doesn't start them and makes
|
||||||
|
# them crash/exit because the dbus env has no DISPLAY. In turn this causes dbus calls to the portal which don't rely
|
||||||
|
# on implementations to hang (such as SDL talking to the real time portal)
|
||||||
|
systemctl --user set-environment XDG_DESKTOP_PORTAL_DIR=""
|
||||||
|
|
||||||
|
# Remove these as they prevent gamescope-session from starting correctly
|
||||||
|
systemctl --user unset-environment DISPLAY XAUTHORITY
|
||||||
|
|
||||||
|
# If this shell script is killed then stop gamescope-session
|
||||||
|
trap 'systemctl --user stop gamescope-session.service' HUP INT TERM
|
||||||
|
|
||||||
|
# Start gamescope-session and wait
|
||||||
|
systemctl --user --wait start gamescope-session.service &
|
||||||
|
wait
|
3
gamescope-session/usr/bin/jupiter-biosupdate
Executable file
3
gamescope-session/usr/bin/jupiter-biosupdate
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
exit 0;
|
32
gamescope-session/usr/bin/steam-http-loader
Executable file
32
gamescope-session/usr/bin/steam-http-loader
Executable file
@ -0,0 +1,32 @@
|
|||||||
|
#!/bin/env python
|
||||||
|
import urllib.parse
|
||||||
|
import os.path
|
||||||
|
import argparse
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
def run(action, arg):
|
||||||
|
final_url = "steam://{0}/{1}".format(action, arg)
|
||||||
|
subprocess.run(["steam", final_url])
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser(description='Launch a link in the steam browser.')
|
||||||
|
parser.add_argument('uri')
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
uri = args.uri
|
||||||
|
|
||||||
|
url = urllib.parse.urlparse(uri, "file")
|
||||||
|
|
||||||
|
# convert mailto://A@b.com to steam://mailto/A@b.com
|
||||||
|
if (url.scheme == 'mailto'):
|
||||||
|
run('mailto', url.netloc)
|
||||||
|
return
|
||||||
|
|
||||||
|
# open any other URL, converting paths to full file URIs
|
||||||
|
if (url.scheme == 'file' and not os.path.isabs(url.path)):
|
||||||
|
absolute_path = os.path.abspath(url.path)
|
||||||
|
url = url._replace(path=absolute_path)
|
||||||
|
run('openurl_external', url.geturl())
|
||||||
|
return
|
||||||
|
|
||||||
|
main()
|
11
gamescope-session/usr/bin/steamos-polkit-helpers/jupiter-biosupdate
Executable file
11
gamescope-session/usr/bin/steamos-polkit-helpers/jupiter-biosupdate
Executable file
@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
if [[ $EUID -ne 0 ]];
|
||||||
|
then
|
||||||
|
exec pkexec --disable-internal-agent "$0" "$@"
|
||||||
|
fi
|
||||||
|
|
||||||
|
exec /usr/bin/jupiter-biosupdate "$@"
|
||||||
|
|
11
gamescope-session/usr/bin/steamos-polkit-helpers/steamos-update
Executable file
11
gamescope-session/usr/bin/steamos-polkit-helpers/steamos-update
Executable file
@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
if [[ $EUID -ne 0 ]];
|
||||||
|
then
|
||||||
|
exec pkexec --disable-internal-agent "$0" "$@"
|
||||||
|
fi
|
||||||
|
|
||||||
|
exec /usr/bin/steamos-update "$@"
|
||||||
|
|
11
gamescope-session/usr/bin/steamos-update
Executable file
11
gamescope-session/usr/bin/steamos-update
Executable file
@ -0,0 +1,11 @@
|
|||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
if command -v frzr-deploy > /dev/null; then
|
||||||
|
if [ "$1" == "check" ]; then
|
||||||
|
frzr-deploy --check
|
||||||
|
else
|
||||||
|
frzr-deploy --steam-progress
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
exit 7
|
||||||
|
fi
|
@ -0,0 +1,17 @@
|
|||||||
|
# Startup systemd unit for Gamescope session meant to be started by a script.
|
||||||
|
# Logs will go to journal and logged into /run/user/$USER
|
||||||
|
# This is the way Valve does it, we add our own file structure and scripts
|
||||||
|
[Unit]
|
||||||
|
Description=Gamescope Session
|
||||||
|
BindsTo=graphical-session.target
|
||||||
|
Before=graphical-session.target
|
||||||
|
Wants=graphical-session-pre.target
|
||||||
|
After=graphical-session-pre.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/usr/share/gamescope-session/gamescope-session-script
|
||||||
|
# This is a temporary workaround for the some proton apps becoming
|
||||||
|
# confused by the AF_UNIX socket they get for the stdout when the
|
||||||
|
# service outputs to the journal. (e.g. Vampire Survivors).
|
||||||
|
StandardOutput=append:%t/gamescope-session.log
|
||||||
|
StandardError=append:%t/gamescope-session.log
|
@ -0,0 +1,7 @@
|
|||||||
|
[Default Applications]
|
||||||
|
x-scheme-handler/http=steam_http_loader.desktop
|
||||||
|
x-scheme-handler/https=steam_http_loader.desktop
|
||||||
|
x-scheme-handler/mailto=steam_http_loader.desktop
|
||||||
|
application/pdf=steam_http_loader.desktop
|
||||||
|
application/x-extension-html=steam_http_loader.desktop
|
||||||
|
text/html=steam_http_loader.desktop
|
@ -0,0 +1,5 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Type=Application
|
||||||
|
Name=Steam HTTP Handler
|
||||||
|
NoDisplay=true
|
||||||
|
Exec=steam-http-loader %u
|
40
gamescope-session/usr/share/gamescope-session/device-quirks
Normal file
40
gamescope-session/usr/share/gamescope-session/device-quirks
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
# This file would be sourced by gamescope-session script (meant for
|
||||||
|
# ChimeraOS devices).
|
||||||
|
|
||||||
|
SYS_ID="$(cat /sys/devices/virtual/dmi/id/product_name)"
|
||||||
|
|
||||||
|
# OXP Devices
|
||||||
|
OXP_LIST="ONE XPLAYER:ONEXPLAYER 1 T08:ONEXPLAYER 1S A08:ONEXPLAYER 1S T08:ONEXPLAYER mini A07:ONEXPLAYER mini GA72:ONEXPLAYER mini GT72:ONEXPLAYER Mini Pro:ONEXPLAYER GUNDAM GA72:ONEXPLAYER 2 ARP23"
|
||||||
|
AOK_LIST="AOKZOE A1 AR07"
|
||||||
|
if [[ ":$OXP_LIST:" =~ ":$SYS_ID:" ]] || [[ ":$AOK_LIST:" =~ ":$SYS_ID:" ]]; then
|
||||||
|
# Dependent on a special --force-orientation option in gamescope
|
||||||
|
if ( gamescope --help 2>&1 | grep -e "--force-orientation" > /dev/null ) ; then
|
||||||
|
export GAMESCOPECMD="/usr/bin/gamescope \
|
||||||
|
-e \
|
||||||
|
--generate-drm-mode fixed \
|
||||||
|
--xwayland-count 2 \
|
||||||
|
-O *,eDP-1 \
|
||||||
|
--default-touch-mode 4 \
|
||||||
|
--hide-cursor-delay 3000 \
|
||||||
|
--fade-out-duration 200 \
|
||||||
|
--force-orientation left "
|
||||||
|
fi
|
||||||
|
# Set refresh rate range and enable refresh rate switching
|
||||||
|
export STEAM_DISPLAY_REFRESH_LIMITS=40,60
|
||||||
|
fi
|
||||||
|
|
||||||
|
# AYANEO AIR Devices
|
||||||
|
AIR_LIST="AIR:AIR Pro"
|
||||||
|
if [[ ":$AIR_LIST:" =~ ":$SYS_ID:" ]]; then
|
||||||
|
# Dependent on a special --force-orientation option in gamescope
|
||||||
|
if ( gamescope --help 2>&1 | grep -e "--force-orientation" > /dev/null ) ; then
|
||||||
|
export GAMESCOPECMD="/usr/bin/gamescope \
|
||||||
|
-e \
|
||||||
|
--xwayland-count 2 \
|
||||||
|
-O *,eDP-1 \
|
||||||
|
--default-touch-mode 4 \
|
||||||
|
--hide-cursor-delay 3000 \
|
||||||
|
--fade-out-duration 200 \
|
||||||
|
--force-orientation left "
|
||||||
|
fi
|
||||||
|
fi
|
266
gamescope-session/usr/share/gamescope-session/gamescope-session-script
Executable file
266
gamescope-session/usr/share/gamescope-session/gamescope-session-script
Executable file
@ -0,0 +1,266 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Some environment variables by default (taken from Deck session)
|
||||||
|
export SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS=0
|
||||||
|
|
||||||
|
# Enable Mangoapp
|
||||||
|
export STEAM_USE_MANGOAPP=1
|
||||||
|
export MANGOHUD_CONFIGFILE=$(mktemp /tmp/mangohud.XXXXXXXX)
|
||||||
|
|
||||||
|
export STEAM_USE_DYNAMIC_VRS=1
|
||||||
|
export RADV_FORCE_VRS_CONFIG_FILE=$(mktemp /tmp/radv_vrs.XXXXXXXX)
|
||||||
|
|
||||||
|
# Plop GAMESCOPE_MODE_SAVE_FILE into $XDG_CONFIG_HOME (defaults to ~/.config).
|
||||||
|
export GAMESCOPE_MODE_SAVE_FILE="${XDG_CONFIG_HOME:-$HOME/.config}/gamescope/modes.cfg"
|
||||||
|
|
||||||
|
# Make path to gamescope mode save file.
|
||||||
|
mkdir -p "$(dirname "$GAMESCOPE_MODE_SAVE_FILE")"
|
||||||
|
touch "$GAMESCOPE_MODE_SAVE_FILE"
|
||||||
|
#echo "Making Gamescope Mode Save file at \"$GAMESCOPE_MODE_SAVE_FILE\""
|
||||||
|
|
||||||
|
# Support for gamescope tearing with GAMESCOPE_ALLOW_TEARING atom
|
||||||
|
export STEAM_GAMESCOPE_HAS_TEARING_SUPPORT=1
|
||||||
|
|
||||||
|
# Enable tearing controls in steam
|
||||||
|
export STEAM_GAMESCOPE_TEARING_SUPPORTED=1
|
||||||
|
|
||||||
|
# There is no way to set a color space for an NV12
|
||||||
|
# buffer in Wayland. And the color management protocol that is
|
||||||
|
# meant to let this happen is missing the color range...
|
||||||
|
# So just workaround this with an ENV var that Remote Play Together
|
||||||
|
# and Gamescope will use for now.
|
||||||
|
export GAMESCOPE_NV12_COLORSPACE=k_EStreamColorspace_BT601
|
||||||
|
|
||||||
|
# Initially write no_display to our config file
|
||||||
|
# so we don't get mangoapp showing up before Steam initializes
|
||||||
|
# on OOBE and stuff.
|
||||||
|
mkdir -p "$(dirname "$MANGOHUD_CONFIGFILE")"
|
||||||
|
echo "no_display" > "$MANGOHUD_CONFIGFILE"
|
||||||
|
|
||||||
|
# Prepare our initial VRS config file
|
||||||
|
# for dynamic VRS in Mesa.
|
||||||
|
mkdir -p "$(dirname "$RADV_FORCE_VRS_CONFIG_FILE")"
|
||||||
|
echo "1x1" > "$RADV_FORCE_VRS_CONFIG_FILE"
|
||||||
|
|
||||||
|
# To expose vram info from radv
|
||||||
|
export WINEDLLOVERRIDES=dxgi=n
|
||||||
|
|
||||||
|
# Workaround for steam getting killed immediatly during reboot
|
||||||
|
export STEAMOS_STEAM_REBOOT_SENTINEL="/tmp/steamos-reboot-sentinel"
|
||||||
|
|
||||||
|
# Workaround for steam getting killed immediatly during shutdown
|
||||||
|
# Same idea as reboot sentinel above
|
||||||
|
export STEAMOS_STEAM_SHUTDOWN_SENTINEL="/tmp/steamos-shutdown-sentinel"
|
||||||
|
|
||||||
|
# Enable volume key management via steam for this session
|
||||||
|
export STEAM_ENABLE_VOLUME_HANDLER=1
|
||||||
|
|
||||||
|
# Have SteamRT's xdg-open send http:// and https:// URLs to Steam
|
||||||
|
export SRT_URLOPEN_PREFER_STEAM=1
|
||||||
|
|
||||||
|
# Disable automatic audio device switching in steam, now handled by wireplumber
|
||||||
|
export STEAM_DISABLE_AUDIO_DEVICE_SWITCHING=1
|
||||||
|
|
||||||
|
# Enable support for xwayland isolation per-game in Steam
|
||||||
|
export STEAM_MULTIPLE_XWAYLANDS=1
|
||||||
|
|
||||||
|
# We have the Mesa integration for the fifo-based dynamic fps-limiter
|
||||||
|
export STEAM_GAMESCOPE_DYNAMIC_FPSLIMITER=1
|
||||||
|
|
||||||
|
# We have gamma/degamma exponent support
|
||||||
|
export STEAM_GAMESCOPE_COLOR_TOYS=1
|
||||||
|
|
||||||
|
# We have NIS support
|
||||||
|
export STEAM_GAMESCOPE_NIS_SUPPORTED=1
|
||||||
|
|
||||||
|
# Don't wait for buffers to idle on the client side before sending them to gamescope
|
||||||
|
export vk_xwayland_wait_ready=false
|
||||||
|
|
||||||
|
# Let steam know it can unmount drives without superuser privileges
|
||||||
|
export STEAM_ALLOW_DRIVE_UNMOUNT=1
|
||||||
|
|
||||||
|
# We no longer need to set GAMESCOPE_EXTERNAL_OVERLAY from steam, mangoapp now does it itself
|
||||||
|
export STEAM_DISABLE_MANGOAPP_ATOM_WORKAROUND=1
|
||||||
|
|
||||||
|
# Enable horizontal mangoapp bar
|
||||||
|
export STEAM_MANGOAPP_HORIZONTAL_SUPPORTED=1
|
||||||
|
|
||||||
|
# Scaling support
|
||||||
|
export STEAM_GAMESCOPE_FANCY_SCALING_SUPPORT=1
|
||||||
|
|
||||||
|
# Set input method modules for Qt/GTK that will show the Steam keyboard
|
||||||
|
export QT_IM_MODULE=steam
|
||||||
|
export GTK_IM_MODULE=Steam
|
||||||
|
|
||||||
|
# To play nice with the short term callback-based limiter for now
|
||||||
|
export GAMESCOPE_LIMITER_FILE=$(mktemp /tmp/gamescope-limiter.XXXXXXXX)
|
||||||
|
|
||||||
|
# Use SteamOS background if exists
|
||||||
|
if [ -f "/usr/share/steamos/steamos.png" ] ; then
|
||||||
|
export STEAM_UPDATEUI_PNG_BACKGROUND=/usr/share/steamos/steamos.png
|
||||||
|
fi
|
||||||
|
|
||||||
|
ulimit -n 524288
|
||||||
|
|
||||||
|
# Source device quirks if exists
|
||||||
|
if [ -f /usr/share/gamescope-session/device-quirks ]; then
|
||||||
|
. /usr/share/gamescope-session/device-quirks
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Source environment from ~/.config/environment.d with user overrides
|
||||||
|
set -a
|
||||||
|
for i in "${HOME}"/.config/environment.d/*.conf ;
|
||||||
|
do
|
||||||
|
[[ -f "${i}" ]] && . "${i}"
|
||||||
|
done
|
||||||
|
set +a
|
||||||
|
|
||||||
|
# Setup socket for gamescope
|
||||||
|
# Create run directory file for startup and stats sockets
|
||||||
|
tmpdir="$([[ -n ${XDG_RUNTIME_DIR+x} ]] && mktemp -p "$XDG_RUNTIME_DIR" -d -t gamescope.XXXXXXX)"
|
||||||
|
socket="${tmpdir:+$tmpdir/startup.socket}"
|
||||||
|
stats="${tmpdir:+$tmpdir/stats.pipe}"
|
||||||
|
# Fail early if we don't have a proper runtime directory setup
|
||||||
|
if [[ -z $tmpdir || -z ${XDG_RUNTIME_DIR+x} ]]; then
|
||||||
|
echo >&2 "!! Failed to find run directory in which to create stats session sockets (is \$XDG_RUNTIME_DIR set?)"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
export GAMESCOPE_STATS="$stats"
|
||||||
|
mkfifo -- "$stats"
|
||||||
|
mkfifo -- "$socket"
|
||||||
|
|
||||||
|
# Attempt to claim global session if we're the first one running (e.g. /run/1000/gamescope)
|
||||||
|
linkname="gamescope-stats"
|
||||||
|
# shellcheck disable=SC2031 # (broken warning)
|
||||||
|
sessionlink="${XDG_RUNTIME_DIR:+$XDG_RUNTIME_DIR/}${linkname}" # Account for XDG_RUNTIME_DIR="" (notfragileatall)
|
||||||
|
lockfile="$sessionlink".lck
|
||||||
|
exec 9>"$lockfile" # Keep as an fd such that the lock lasts as long as the session if it is taken
|
||||||
|
if flock -n 9 && rm -f "$sessionlink" && ln -sf "$tmpdir" "$sessionlink"; then
|
||||||
|
# Took the lock. Don't blow up if those commands fail, though.
|
||||||
|
echo >&2 "Claimed global gamescope stats session at \"$sessionlink\""
|
||||||
|
else
|
||||||
|
echo >&2 "!! Failed to claim global gamescope stats session"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Use cursor if file exist
|
||||||
|
if [ -z "$CURSOR_FILE" ] ; then
|
||||||
|
CURSOR_FILE="${HOME}/.local/share/Steam/tenfoot/resource/images/cursors/arrow_right.png"
|
||||||
|
fi
|
||||||
|
CURSOR=""
|
||||||
|
if [ -f "$CURSOR_FILE" ] ; then
|
||||||
|
CURSOR="--cursor ${CURSOR_FILE}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Define session if not overriden
|
||||||
|
if [ -z "$STEAMCMD" ] ; then
|
||||||
|
STEAMCMD="steam -gamepadui -steamos3 -steampal -steamdeck"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$GAMESCOPECMD" ] ; then
|
||||||
|
RESOLUTION=""
|
||||||
|
if [ -n "$SCREEN_WIDTH" ] && [ -n "$SCREEN_HEIGHT" ] ; then
|
||||||
|
RESOLUTION="-W $SCREEN_WIDTH -H $SCREEN_HEIGHT"
|
||||||
|
fi
|
||||||
|
GAMESCOPECMD="/usr/bin/gamescope \
|
||||||
|
$CURSOR \
|
||||||
|
-e \
|
||||||
|
$RESOLUTION \
|
||||||
|
--xwayland-count 2 \
|
||||||
|
-O *,eDP-1 \
|
||||||
|
--default-touch-mode 4 \
|
||||||
|
--hide-cursor-delay 3000 \
|
||||||
|
--fade-out-duration 200 \
|
||||||
|
-R $socket -T $stats"
|
||||||
|
else
|
||||||
|
# Add socket and stats read
|
||||||
|
GAMESCOPECMD+=" -R $socket -T $stats"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Workaround for Steam login issue while Steam client change propagates out of Beta
|
||||||
|
touch "${HOME}"/.steam/root/config/SteamAppData.vdf || true
|
||||||
|
|
||||||
|
# Log rotate the last session
|
||||||
|
if [ -f "${HOME}"/.steam-tweaks.log ]; then
|
||||||
|
cp "${HOME}"/.steam-tweaks.log "${HOME}"/.steam-tweaks.log.old
|
||||||
|
fi
|
||||||
|
if [ -f "${HOME}"/.steam-stdout.log ]; then
|
||||||
|
cp "${HOME}"/.steam-stdout.log "${HOME}"/.steam-stdout.log.old
|
||||||
|
fi
|
||||||
|
if [ -f "${HOME}"/.gamescope-stdout.log ]; then
|
||||||
|
cp "${HOME}"/.gamescope-stdout.log "${HOME}"/.gamescope-stdout.log.old
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Start gamescope compositor, log it's output and background it
|
||||||
|
$GAMESCOPECMD > "${HOME}"/.gamescope-stdout.log 2>&1 &
|
||||||
|
gamescope_pid="$!"
|
||||||
|
|
||||||
|
if read -r -t 3 response_x_display response_wl_display <> "$socket"; then
|
||||||
|
export DISPLAY="$response_x_display"
|
||||||
|
export GAMESCOPE_WAYLAND_DISPLAY="$response_wl_display"
|
||||||
|
# We're done!
|
||||||
|
else
|
||||||
|
kill -9 "$gamescope_pid"
|
||||||
|
wait
|
||||||
|
exit 0
|
||||||
|
# Systemd or Session manager will have to restart session
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Run steam-tweaks if exists
|
||||||
|
if command -v steam-tweaks > /dev/null; then
|
||||||
|
steam-tweaks > "${HOME}"/.steam-tweaks.log
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Input method support if present
|
||||||
|
if command -v /usr/bin/ibus-daemon > /dev/null; then
|
||||||
|
/usr/bin/ibus-daemon -d -r --panel=disable --emoji-extension=disable
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If we have mangoapp binary start it
|
||||||
|
if command -v mangoapp > /dev/null; then
|
||||||
|
mangoapp > "${HOME}"/.mangoapp-stdout.log 2>&1 &
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Start Steam client
|
||||||
|
$STEAMCMD > "${HOME}"/.steam-stdout.log 2>&1
|
||||||
|
|
||||||
|
# When the client exits, kill gamescope nicely
|
||||||
|
kill $gamescope_pid
|
||||||
|
|
||||||
|
# Start a background sleep for five seconds because we don't trust it
|
||||||
|
sleep 5 &
|
||||||
|
sleep_pid="$!"
|
||||||
|
|
||||||
|
# Catch reboot and poweroof sentinels here
|
||||||
|
if [[ -e "$STEAMOS_STEAM_REBOOT_SENTINEL" ]]; then
|
||||||
|
rm -f "$STEAMOS_STEAM_REBOOT_SENTINEL"
|
||||||
|
reboot
|
||||||
|
fi
|
||||||
|
if [[ -e "$STEAMOS_STEAM_SHUTDOWN_SENTINEL" ]]; then
|
||||||
|
rm -f "$STEAMOS_STEAM_SHUTDOWN_SENTINEL"
|
||||||
|
poweroff
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Wait for gamescope or the sleep to finish for timeout purposes
|
||||||
|
ret=0
|
||||||
|
wait -n $gamescope_pid $sleep_pid || ret=$?
|
||||||
|
|
||||||
|
# If we get a SIGTERM/etc while waiting this happens. Proceed to kill -9 everything but complain
|
||||||
|
if [[ $ret = 127 ]]; then
|
||||||
|
echo >&2 "gamescope-session: Interrupted while waiting on teardown, force-killing remaining tasks"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Kill all remaining jobs and warn if unexpected things are in there (should be just sleep_pid, unless gamescope failed
|
||||||
|
# to exit in time or we hit the interrupt case above)
|
||||||
|
for job in $(jobs -p); do
|
||||||
|
# Warn about unexpected things
|
||||||
|
if [[ $ret != 127 && $job = "$gamescope_pid" ]]; then
|
||||||
|
echo >&2 "gamescope-session: gamescope timed out while exiting, killing"
|
||||||
|
elif [[ $ret != 127 && $job != "$sleep_pid" ]]; then
|
||||||
|
echo >&2 "gamescope-session: unexpected background pid $job at teardown: "
|
||||||
|
# spew some debug about it
|
||||||
|
ps -p "$job" >&2
|
||||||
|
fi
|
||||||
|
kill -9 "$job"
|
||||||
|
done
|
||||||
|
|
@ -0,0 +1,32 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE policyconfig PUBLIC
|
||||||
|
"-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
|
||||||
|
"http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
|
||||||
|
<policyconfig>
|
||||||
|
|
||||||
|
<vendor>ChimeraOS Chimera</vendor>
|
||||||
|
<vendor_url>http://chimeraos.org</vendor_url>
|
||||||
|
|
||||||
|
<action id="org.chimeraos.policykit.steamos.pkexec.run-steamos-update">
|
||||||
|
<description>Main update script from Steam client</description>
|
||||||
|
<icon_name>package-x-generic</icon_name>
|
||||||
|
<defaults>
|
||||||
|
<allow_any>yes</allow_any>
|
||||||
|
<allow_inactive>yes</allow_inactive>
|
||||||
|
<allow_active>yes</allow_active>
|
||||||
|
</defaults>
|
||||||
|
<annotate key="org.freedesktop.policykit.exec.path">/usr/bin/steamos-polkit-helpers/steamos-update</annotate>
|
||||||
|
</action>
|
||||||
|
|
||||||
|
<action id="org.chimeraos.policykit.steamos.pkexec.run-jupiter-biosupdate">
|
||||||
|
<description>Dummy script for jupiter-biosupdate on Steam client</description>
|
||||||
|
<icon_name>package-x-generic</icon_name>
|
||||||
|
<defaults>
|
||||||
|
<allow_any>yes</allow_any>
|
||||||
|
<allow_inactive>yes</allow_inactive>
|
||||||
|
<allow_active>yes</allow_active>
|
||||||
|
</defaults>
|
||||||
|
<annotate key="org.freedesktop.policykit.exec.path">/usr/bin/steamos-polkit-helpers/jupiter-biosupdate</annotate>
|
||||||
|
</action>
|
||||||
|
|
||||||
|
</policyconfig>
|
@ -0,0 +1,7 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Encoding=UTF-8
|
||||||
|
Name=ChimeraOS (gamescope)
|
||||||
|
Comment=Steam Big Picture session
|
||||||
|
Exec=gamescope-session
|
||||||
|
Type=Application
|
||||||
|
DesktopNames=gamescope
|
22
main.sh
Executable file
22
main.sh
Executable file
@ -0,0 +1,22 @@
|
|||||||
|
DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
|
# Add dependent repositories
|
||||||
|
wget -q -O - https://ppa.pika-os.com/key.gpg | sudo apt-key add -
|
||||||
|
add-apt-repository https://ppa.pika-os.com
|
||||||
|
add-apt-repository ppa:pikaos/pika
|
||||||
|
add-apt-repository ppa:kubuntu-ppa/backports
|
||||||
|
|
||||||
|
# Clone Upstream
|
||||||
|
cd ./gamescope-session
|
||||||
|
|
||||||
|
# Get build deps
|
||||||
|
ln -fs /usr/share/zoneinfo/America/New_York /etc/localtime
|
||||||
|
apt-get build-dep ./ -y
|
||||||
|
|
||||||
|
# Build package
|
||||||
|
dpkg-buildpackage
|
||||||
|
|
||||||
|
# Move the debs to output
|
||||||
|
cd ../
|
||||||
|
mkdir -p ./output
|
||||||
|
mv ./*.deb ./output/
|
@ -1 +0,0 @@
|
|||||||
#https://github.com/KyleGospo/gamescope-session
|
|
11
release.sh
Executable file
11
release.sh
Executable file
@ -0,0 +1,11 @@
|
|||||||
|
# Sign the packages
|
||||||
|
dpkg-sig --sign builder ./output/*.deb
|
||||||
|
|
||||||
|
# Pull down existing ppa repo db files etc
|
||||||
|
rsync -azP --exclude '*.deb' ferreo@direct.pika-os.com:/srv/www/pikappa/ ./output/repo
|
||||||
|
|
||||||
|
# Add the new package to the repo
|
||||||
|
reprepro -V --basedir ./output/repo/ includedeb kinetic ./output/*.deb
|
||||||
|
|
||||||
|
# Push the updated ppa repo to the server
|
||||||
|
rsync -azP ./output/repo/ ferreo@direct.pika-os.com:/srv/www/pikappa/
|
Loading…
Reference in New Issue
Block a user