port to pika os 4
Some checks failed
PikaOS Package Build Only (Canary) (amd64-v3) / build (push) Failing after 9s
PikaOS Package Build Only (amd64-v3) / build (push) Failing after 1s
PikaOS Package Build & Release (Canary) (amd64-v3) / build (push) Failing after 9s
PikaOS Package Build & Release (amd64-v3) / build (push) Failing after 1s

This commit is contained in:
Ward from fusion-voyager-3 2024-07-29 01:34:55 +03:00
parent 9c34181f01
commit 90722c256d
63 changed files with 2054 additions and 133 deletions

1
.github/build-canary-v3 vendored Normal file
View File

@ -0,0 +1 @@
1

1
.github/build-nest-v3 vendored Normal file
View File

@ -0,0 +1 @@
1

1
.github/release-canary-v3 vendored Normal file
View File

@ -0,0 +1 @@
2

1
.github/release-nest-v3 vendored Normal file
View File

@ -0,0 +1 @@
1

37
.github/workflows/build-canaryv3.yml vendored Normal file
View File

@ -0,0 +1,37 @@
name: PikaOS Package Build Only (Canary) (amd64-v3)
on:
push:
branches:
- main
paths:
- '.github/build-canary-v3'
jobs:
build:
runs-on: ubuntu-latest
container:
image: ghcr.io/pikaos-linux/pikaos-builder:canaryv3
volumes:
- /proc:/proc
options: --privileged -it
steps:
- uses: actions/checkout@v3
- 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: Update APT Cache
run: apt-get update -y
- name: Set Build Config
run: cp -vf ./pika-build-config/amd64-v3.sh ./pika-build-config.sh
- name: Build Package
run: ./main.sh

37
.github/workflows/build-nestv3.yml vendored Normal file
View File

@ -0,0 +1,37 @@
name: PikaOS Package Build Only (amd64-v3)
on:
push:
branches:
- main
paths:
- '.github/build-nest-v3'
jobs:
build:
runs-on: ubuntu-latest
container:
image: ghcr.io/pikaos-linux/pikaos-builder:nestv3
volumes:
- /proc:/proc
options: --privileged -it
steps:
- uses: actions/checkout@v3
- 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: Update APT Cache
run: apt-get update -y
- name: Set Build Config
run: cp -vf ./pika-build-config/amd64-v3.sh ./pika-build-config.sh
- name: Build Package
run: ./main.sh

40
.github/workflows/release-canaryv3.yml vendored Normal file
View File

@ -0,0 +1,40 @@
name: PikaOS Package Build & Release (Canary) (amd64-v3)
on:
push:
branches:
- main
paths:
- '.github/release-canary-v3'
jobs:
build:
runs-on: ubuntu-latest
container:
image: ghcr.io/pikaos-linux/pikaos-builder:canaryv3
volumes:
- /proc:/proc
options: --privileged -it
steps:
- uses: actions/checkout@v3
- 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: Update APT Cache
run: apt-get update -y
- name: Set Build Config
run: cp -vf ./pika-build-config/amd64-v3.sh ./pika-build-config.sh
- name: Build Package
run: ./main.sh
- name: Release Package
run: ./release.sh

40
.github/workflows/release-nestv3.yml vendored Normal file
View File

@ -0,0 +1,40 @@
name: PikaOS Package Build & Release (amd64-v3)
on:
push:
branches:
- main
paths:
- '.github/release-nest-v3'
jobs:
build:
runs-on: ubuntu-latest
container:
image: ghcr.io/pikaos-linux/pikaos-builder:nestv3
volumes:
- /proc:/proc
options: --privileged -it
steps:
- uses: actions/checkout@v3
- 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: Update APT Cache
run: apt-get update -y
- name: Set Build Config
run: cp -vf ./pika-build-config/amd64-v3.sh ./pika-build-config.sh
- name: Build Package
run: ./main.sh
- name: Release Package
run: ./release.sh

24
LICENSE.md Normal file
View File

@ -0,0 +1,24 @@
MIT License (With DPKG packaging compatibility)
Copyright (c) 2024 PikaOS
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Notes:
The files covered by this license are any files and directories in the root of this repository (including but not limited to: `main.sh`, `release.sh`, and `.github`), with the exception of the `debian` directory and its contents if `debian/copyright` exists, and declares any files or directories as a different LICENSE/COPYRIGHT.

14
debian/changelog vendored
View File

@ -1,16 +1,4 @@
gamescope-session (0.3-100pika1) pikauwu; urgency=low
* Update to pikauwu
-- Ward Nakchbandi <hotrod.master@hotmail.com> Sat, 01 Oct 2022 14:50:00 +0200
gamescope-session (0.2-99pika11-lunar) lunar; urgency=low
* Fix resolutions
-- Ward Nakchbandi <hotrod.master@hotmail.com> Sat, 01 Oct 2022 14:50:00 +0200
gamescope-session (0.2-99pika4-lunar) lunar; urgency=low
gamescope-session (1:0.2.nobara-101pika1) pika; urgency=low
* Initial Creation

25
debian/control vendored
View File

@ -2,13 +2,32 @@ Source: gamescope-session
Section: games
Priority: optional
Maintainer: Ward Nakchbandi <hotrod.master@hotmail.com>
Build-Depends: debhelper-compat (= 13)
Build-Depends:
debhelper-compat (= 13),
Standards-Version: 4.6.1
Homepage: https://github.com/PikaOS-linux/gamescope-session
Homepage: https://github.com/nobara-project/steamdeck-edition-packages
Package: gamescope-session
Section: games
Architecture: all
Depends: ${misc:Depends}, gamescope, python3, vulkan-tools, mangoapp, ryzenadj, sdgyrodsu, steamdeck-jupiter-driver-btrfs | steamdeck-jupiter-driver
Depends: ${misc:Depends},
${shlibs:Depends},
gamescope,
edid-decode,
python3,
vulkan-tools,
steam-launcher | steam,
mangoapp,
ryzenadj,
pulseaudio-utils,
Recommends:
steamdeck-jupiter-driver-btrfs | steamdeck-jupiter-driver,
Suggests:
sdgyrodsu,
Provides:
gamescope-session-steam,
gamescope-session-plus,
powerbuttond,
steam-powerbuttond,
Description: Steam Big Picture Mode/Gamemode session based on gamescope

38
debian/copyright vendored
View File

@ -1,15 +1,35 @@
### Plus
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
Version 2, December 2004
The MIT License (MIT)
Copyright (C) 2020-2022 Jaoquín I. Aramendía <samsagax@gmail.com>
Copyright © 2020-2023 Joaquín Ignacio Aramendía
Everyone is permitted to copy and distribute verbatim or modified
copies of this license document, and changing it is allowed as long
as the name is changed.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
0. You just DO WHAT THE FUCK YOU WANT TO.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
### Steam
MIT License
Copyright (c) 2023 ChimeraOS
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -1,83 +0,0 @@
#!/usr/bin/bash
DEFAULT_RESOLUTION=$(xdpyinfo | awk '/dimensions/{print $2}')
# Steam Deck Default
SCREEN_WIDTH=1280
SCREEN_HEIGHT=800
# Sometimes gamescope's DRM-retrieved resolution values
# don't work well with what gamescope actually allows,
# and can result in a "verifying installation" hang.
# To fix that we have to make some adjustments for
# those values to ones gamescope accepts.
# 32:9
if [[ $DEFAULT_RESOLUTION == 5120x1440 ]]; then
SCREEN_WIDTH=5120
SCREEN_HEIGHT=1440
fi
if [[ $DEFAULT_RESOLUTION == 3840x1080 ]]; then
SCREEN_WIDTH=3840
SCREEN_HEIGHT=1080
fi
# 21:9
if [[ $DEFAULT_RESOLUTION == 3440x1440 ]]; then
SCREEN_WIDTH=3440
SCREEN_HEIGHT=1440
fi
if [[ $DEFAULT_RESOLUTION == 2160x1080 ]]; then
SCREEN_WIDTH=2160
SCREEN_HEIGHT=1080
fi
# 16:10
# gamescope is not friendly to 16:10 aspect ratio other than it's default 1280x800, so we have to do some conversion:
if [[ $DEFAULT_RESOLUTION == 3840x2400 ]]; then
SCREEN_WIDTH=3840
SCREEN_HEIGHT=2160
fi
# Oddly enough many 2560x1600 laptops dont support 2560x1440, so we have to drop them down to 1920x1080
if [[ $DEFAULT_RESOLUTION == 2560x1600 ]]; then
SCREEN_WIDTH=1920
SCREEN_HEIGHT=1080
fi
if [[ $DEFAULT_RESOLUTION == 1920x1200 ]]; then
SCREEN_WIDTH=1920
SCREEN_HEIGHT=1080
fi
# 16:9
if [[ $DEFAULT_RESOLUTION == 3840x2160 ]]; then
SCREEN_WIDTH=3840
SCREEN_HEIGHT=2160
fi
if [[ $DEFAULT_RESOLUTION == 2560x1440 ]]; then
SCREEN_WIDTH=2560
SCREEN_HEIGHT=1440
fi
if [[ $DEFAULT_RESOLUTION == 1920x1080 ]]; then
SCREEN_WIDTH=1920
SCREEN_HEIGHT=1080
fi
if [[ $DEFAULT_RESOLUTION == 1280x720 ]]; then
SCREEN_WIDTH=1280
SCREEN_HEIGHT=720
fi
#Quirk for framework laptop:
if [[ $DEFAULT_RESOLUTION == 2256x1504 ]]; then
SCREEN_WIDTH=2160
SCREEN_HEIGHT=1080
fi
CONFIG=$HOME/.config/environment.d/gamescope-session.conf
if [ ! -f $CONFIG ]; then
echo "Creating $CONFIG"
mkdir -p $HOME/.config/environment.d/
echo 'SCREEN_WIDTH='$SCREEN_WIDTH > $CONFIG
echo 'SCREEN_HEIGHT='$SCREEN_HEIGHT >> $CONFIG
fi

View File

@ -1,7 +0,0 @@
[Desktop Entry]
Encoding=UTF-8
Name=Steam Deck Mode (gamescope)
Comment=Steam Big Picture session
Exec=gamescope-session
Type=Application
DesktopNames=gamescope

1
debian/files vendored
View File

@ -1 +0,0 @@
gamescope-session_0.0.git.92.60c3f5f9-99pika2_source.buildinfo games optional

View File

@ -1 +1,2 @@
usr
etc

6
debian/rules vendored
View File

@ -1,10 +1,4 @@
#!/usr/bin/make -f
override_dh_install:
dh_install
rm -rfv debian/gamescope-session/usr/share/wayland-sessions/gamescope-session.desktop
cp -rfv debian/extras/zwayland-gamescope-session.desktop debian/gamescope-session/usr/share/wayland-sessions/
cp -rfv debian/extras/gamescope-resolution-configurator debian/gamescope-session/usr/bin/gamescope-resolution-configurator
%:
dh $@

View File

@ -1 +1 @@
3.0 (native)
3.0 (quilt)

View File

@ -0,0 +1 @@
# Place any custom commands or services that should be started here. Each command should be on a separate line:

View File

@ -0,0 +1 @@
/usr/bin/nobara-device-quirks "$@"

View File

@ -0,0 +1,282 @@
[Desktop Entry]
Name=Steam
Comment=Application for managing and playing games on Steam
Comment[pt_BR]=Aplicativo para jogar e gerenciar jogos no Steam
Comment[bg]=Приложение за ръководене и пускане на игри в Steam
Comment[cs]=Aplikace pro spravování a hraní her ve službě Steam
Comment[da]=Applikation til at håndtere og spille spil på Steam
Comment[nl]=Applicatie voor het beheer en het spelen van games op Steam
Comment[fi]=Steamin pelien hallintaan ja pelaamiseen tarkoitettu sovellus
Comment[fr]=Application de gestion et d'utilisation des jeux sur Steam
Comment[de]=Anwendung zum Verwalten und Spielen von Spielen auf Steam
Comment[el]=Εφαρμογή διαχείρισης παιχνιδιών στο Steam
Comment[hu]=Alkalmazás a Steames játékok futtatásához és kezeléséhez
Comment[it]=Applicazione per la gestione e l'esecuzione di giochi su Steam
Comment[ja]=Steam
Comment[ko]=Steam
Comment[no]=Program for å administrere og spille spill på Steam
Comment[pt_PT]=Aplicação para organizar e executar jogos no Steam
Comment[pl]=Aplikacja do zarządzania i uruchamiania gier na platformie Steam
Comment[ro]=Aplicație pentru administrarea și jucatul jocurilor pe Steam
Comment[ru]=Приложение для игр и управления играми в Steam
Comment[es]=Aplicación para administrar y ejecutar juegos en Steam
Comment[sv]=Ett program för att hantera samt spela spel på Steam
Comment[zh_CN]= Steam
Comment[zh_TW]= Steam
Comment[th]= Steam
Comment[tr]=Steam üzerinden oyun oynama ve düzenleme uygulaması
Comment[uk]=Програма для керування іграми та запуску ігор у Steam
Comment[vi]=ng dng đ qun lý và chơi trò chơi trên Steam
Exec=/usr/bin/steam -silent -steamdeck %U
Icon=steam
Terminal=false
Type=Application
Categories=Network;FileTransfer;Game;
MimeType=x-scheme-handler/steam;x-scheme-handler/steamlink;
Actions=Store;Community;Library;Servers;Screenshots;News;Settings;BigPicture;Friends;
PrefersNonDefaultGPU=false
X-KDE-RunOnDiscreteGpu=true
[Desktop Action Store]
Name=Store
Name[pt_BR]=Loja
Name[bg]=Магазин
Name[cs]=Obchod
Name[da]=Butik
Name[nl]=Winkel
Name[fi]=Kauppa
Name[fr]=Magasin
Name[de]=Shop
Name[el]=ΚΑΤΑΣΤΗΜΑ
Name[hu]=Áruház
Name[it]=Negozio
Name[ja]=
Name[ko]=
Name[no]=Butikk
Name[pt_PT]=Loja
Name[pl]=Sklep
Name[ro]=Magazin
Name[ru]=Магазин
Name[es]=Tienda
Name[sv]=Butik
Name[zh_CN]=
Name[zh_TW]=
Name[th]=
Name[tr]=Mağaza
Name[uk]=Крамниця
Name[vi]=Ca hàng
Exec=/usr/bin/steam %U
[Desktop Action Community]
Name=Community
Name[pt_BR]=Comunidade
Name[bg]=Общност
Name[cs]=Komunita
Name[da]=Fællesskab
Name[nl]=Community
Name[fi]=Yhteisö
Name[fr]=Communauté
Name[de]=Community
Name[el]=Κοινότητα
Name[hu]=Közösség
Name[it]=Comunità
Name[ja]=
Name[ko]=
Name[no]=Samfunn
Name[pt_PT]=Comunidade
Name[pl]=Społeczność
Name[ro]=Comunitate
Name[ru]=Сообщество
Name[es]=Comunidad
Name[sv]=Gemenskap
Name[zh_CN]=
Name[zh_TW]=
Name[th]=
Name[tr]=Topluluk
Name[uk]=Спільнота
Name[vi]=Cng đng
Exec=/usr/bin/steam %U
[Desktop Action Library]
Name=Library
Name[pt_BR]=Biblioteca
Name[bg]=Библиотека
Name[cs]=Knihovna
Name[da]=Bibliotek
Name[nl]=Bibliotheek
Name[fi]=Kokoelma
Name[fr]=Bibliothèque
Name[de]=Bibliothek
Name[el]=Συλλογή
Name[hu]=Könyvtár
Name[it]=Libreria
Name[ja]=
Name[ko]=
Name[no]=Bibliotek
Name[pt_PT]=Biblioteca
Name[pl]=Biblioteka
Name[ro]=Colecţie
Name[ru]=Библиотека
Name[es]=Biblioteca
Name[sv]=Bibliotek
Name[zh_CN]=
Name[zh_TW]=
Name[th]=
Name[tr]=Kütüphane
Name[uk]=Бібліотека
Name[vi]=Thư vin
Exec=/usr/bin/steam %U
[Desktop Action Servers]
Name=Servers
Name[pt_BR]=Servidores
Name[bg]=Сървъри
Name[cs]=Servery
Name[da]=Servere
Name[nl]=Servers
Name[fi]=Palvelimet
Name[fr]=Serveurs
Name[de]=Server
Name[el]=Διακομιστές
Name[hu]=Szerverek
Name[it]=Server
Name[ja]=
Name[ko]=
Name[no]=Tjenere
Name[pt_PT]=Servidores
Name[pl]=Serwery
Name[ro]=Servere
Name[ru]=Серверы
Name[es]=Servidores
Name[sv]=Servrar
Name[zh_CN]=
Name[zh_TW]=
Name[th]=
Name[tr]=Sunucular
Name[uk]=Сервери
Name[vi]=Máy ch
Exec=/usr/bin/steam %U
[Desktop Action Screenshots]
Name=Screenshots
Name[pt_BR]=Capturas de tela
Name[bg]=Снимки
Name[cs]=Snímky obrazovky
Name[da]=Skærmbilleder
Name[nl]=Screenshots
Name[fi]=Kuvankaappaukset
Name[fr]=Captures d'écran
Name[de]=Screenshots
Name[el]=Φωτογραφίες
Name[hu]=Képernyőmentések
Name[it]=Screenshot
Name[ja]=
Name[ko]=
Name[no]=Skjermbilder
Name[pt_PT]=Capturas de ecrã
Name[pl]=Zrzuty ekranu
Name[ro]=Capturi de ecran
Name[ru]=Скриншоты
Name[es]=Capturas
Name[sv]=Skärmdumpar
Name[zh_CN]=
Name[zh_TW]=
Name[th]=
Name[tr]=Ekran Görüntüleri
Name[uk]=Скріншоти
Name[vi]=nh chp
Exec=/usr/bin/steam %U
[Desktop Action News]
Name=News
Name[pt_BR]=Notícias
Name[bg]=Новини
Name[cs]=Zprávy
Name[da]=Nyheder
Name[nl]=Nieuws
Name[fi]=Uutiset
Name[fr]=Actualités
Name[de]=Neuigkeiten
Name[el]=Νέα
Name[hu]=Hírek
Name[it]=Notizie
Name[ja]=
Name[ko]=
Name[no]=Nyheter
Name[pt_PT]=Novidades
Name[pl]=Aktualności
Name[ro]=Știri
Name[ru]=Новости
Name[es]=Noticias
Name[sv]=Nyheter
Name[zh_CN]=
Name[zh_TW]=
Name[th]=
Name[tr]=Haberler
Name[uk]=Новини
Name[vi]=Tin tc
Exec=/usr/bin/steam %U
[Desktop Action Settings]
Name=Settings
Name[pt_BR]=Configurações
Name[bg]=Настройки
Name[cs]=Nastavení
Name[da]=Indstillinger
Name[nl]=Instellingen
Name[fi]=Asetukset
Name[fr]=Paramètres
Name[de]=Einstellungen
Name[el]=Ρυθμίσεις
Name[hu]=Beállítások
Name[it]=Impostazioni
Name[ja]=
Name[ko]=
Name[no]=Innstillinger
Name[pt_PT]=Definições
Name[pl]=Ustawienia
Name[ro]=Setări
Name[ru]=Настройки
Name[es]=Parámetros
Name[sv]=Inställningar
Name[zh_CN]=
Name[zh_TW]=
Name[th]=
Name[tr]=Ayarlar
Name[uk]=Налаштування
Name[vi]=Thiết lp
Exec=/usr/bin/steam %U
[Desktop Action BigPicture]
Name=Big Picture
Exec=/usr/bin/steam %U
[Desktop Action Friends]
Name=Friends
Name[pt_BR]=Amigos
Name[bg]=Приятели
Name[cs]=Přátelé
Name[da]=Venner
Name[nl]=Vrienden
Name[fi]=Kaverit
Name[fr]=Amis
Name[de]=Freunde
Name[el]=Φίλοι
Name[hu]=Barátok
Name[it]=Amici
Name[ja]=
Name[ko]=
Name[no]=Venner
Name[pt_PT]=Amigos
Name[pl]=Znajomi
Name[ro]=Prieteni
Name[ru]=Друзья
Name[es]=Amigos
Name[sv]=Vänner
Name[zh_CN]=
Name[zh_TW]=
Name[th]=
Name[tr]=Arkadaşlar
Name[uk]=Друзі
Name[vi]=Bn bè
Exec=/usr/bin/steam %U

View File

@ -0,0 +1,7 @@
[Desktop Entry]
Name=Return to Gaming Mode
Exec=steamos-desktop-return
Icon=steamdeck-gaming-return
Terminal=false
Type=Application
StartupNotify=false

View File

@ -0,0 +1,7 @@
[Desktop Entry]
Type=Application
Name=Steam Deck desktop rescaler
Exec=/usr/bin/deckscale
Comment=Scale the desktop for handheld devices
X-GNOME-Autostart-enabled=true
X-KDE-autostart-phase=0

View File

@ -0,0 +1,33 @@
#!/usr/bin/bash
# Refresh our desktop icons
cp /etc/skel/Desktop/* "$HOME"/Desktop/
chmod +x "$HOME"/Desktop/*
# We need to wait until the display is available before executing our changes
sleep 5
# In the kscreen-doctor commands eDP is used in USB live session but eDP-1 is used post-install, so we need to try both.
# In the edid-decode commands eDP-1 is used in both live session and post-install, so we don't need to change it.
# Steam deck screen
if [[ ! -z $(edid-decode /sys/class/drm/card1-eDP-1/edid | grep 'ANX7530 U') ]]; then
/usr/bin/kscreen-doctor output.eDP.rotation.right
/usr/bin/kscreen-doctor output.eDP.scale.1
/usr/bin/kscreen-doctor output.eDP-1.rotation.right
/usr/bin/kscreen-doctor output.eDP-1.scale.1
fi
# GPD Win 4 screen
if [[ ! -z $(edid-decode /sys/class/drm/card1-eDP-1/edid | grep 'G1618-04') ]]; then
/usr/bin/kscreen-doctor output.eDP.scale.1.5
/usr/bin/kscreen-doctor output.eDP-1.scale.1.5
fi
# Lenovo Legion Go screen
if [[ ! -z $(edid-decode /sys/class/drm/card1-eDP-1/edid | grep 'Go Display') ]]; then
/usr/bin/kscreen-doctor output.eDP.rotation.left
/usr/bin/kscreen-doctor output.eDP.scale.2
/usr/bin/kscreen-doctor output.eDP-1.rotation.left
/usr/bin/kscreen-doctor output.eDP-1.scale.2
fi

View File

@ -0,0 +1,62 @@
#!/bin/bash
# Search for all VGA-compatible devices
echo "Searching for VGA-compatible devices..."
gpu_info=$(lspci -vnn | grep VGA)
if [ -z "$gpu_info" ]; then
echo "No GPU devices found."
exit 1
fi
# Extract the device IDs from the output and store them in an array
gpu_ids=($(echo "$gpu_info" | grep -o "\[[0-9a-f]\{4\}:[0-9a-f]\{4\}\]" | tr -d '[]'))
# Print the available GPU device IDs
echo "Available GPU device IDs:"
for i in "${!gpu_ids[@]}"; do
gpu_vendor=""
if [[ ${gpu_ids[$i]} == 1002:* ]]; then
gpu_vendor="[AMD]"
elif [[ ${gpu_ids[$i]} == 8086:* ]]; then
gpu_vendor="[INTEL]"
elif [[ ${gpu_ids[$i]} == 10de:* ]]; then
gpu_vendor="[NVIDIA]"
fi
echo "$((i)). ${gpu_ids[$i]} ${gpu_vendor}"
done
# Prompt the user to select a device ID
while true; do
read -p "Enter the number of the GPU device to use: " selected_gpu_num
if ! [[ "$selected_gpu_num" =~ ^[0-9]+$ ]]; then
echo "Invalid entry: $selected_gpu_num is not a number."
continue
fi
if (( selected_gpu_num < 0 || selected_gpu_num >= ${#gpu_ids[@]} )); then
echo "Invalid entry: $selected_gpu_num is not a valid option."
continue
fi
selected_gpu_id=${gpu_ids[$selected_gpu_num]}
break
done
# Write the VULKAN_ADAPTER environment variable to a config file
env_file="$HOME/.config/environment.d/00-vulkan-device.conf"
if [[ ! -d $(dirname "$env_file") ]]; then
mkdir -p "$(dirname "$env_file")"
fi
if [[ -f "$env_file" ]]; then
if grep -q "^VULKAN_ADAPTER=" "$env_file"; then
sed -i "s/^VULKAN_ADAPTER=.*/VULKAN_ADAPTER=$selected_gpu_id/" "$env_file"
else
echo "VULKAN_ADAPTER=$selected_gpu_id" >> "$env_file"
fi
else
echo "VULKAN_ADAPTER=$selected_gpu_id" >> "$env_file"
fi
echo "VULKAN_ADAPTER set to $selected_gpu_id and written to $env_file."
echo "Reboot or restart your display manager for the changes to take effect. If you are using a desktop with an iGPU and dGPU you might need to switch your display adapter from the GPU to the motherboard or vice versa."
echo "You might also need to enable iGPU multi-monitor support in your bios or any option enabling both the iGPU and dedicate GPU at the same time."

View File

@ -0,0 +1,57 @@
#!/bin/sh
declare -r CLIENT=$1
# Run these as user only
if [[ $EUID != 0 ]]; then
# 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-plus from starting correctly
systemctl --user unset-environment DISPLAY XAUTHORITY
# Mount any remaining large partitions that are not handled by Valve's sdcard-automount:
/usr/libexec/nobara-automount
# If this shell script is killed then stop gamescope-session-plus
trap "systemctl --user stop gamescope-session-plus@${CLIENT}.service" HUP INT TERM
# Start gamescope-session-plus and wait
systemctl --user --wait start gamescope-session-plus@${CLIENT}.service &
wait
# Unset XDG_DESKTOP_PORTAL_DIR environment to allow desktop portals to work
# again.
systemctl --user unset-environment XDG_DESKTOP_PORTAL_DIR
fi
# Become root so we can restart desktop managers
if [[ $EUID != 0 ]]; then
exec pkexec "$(realpath $0)"
exit 1
fi
# GNOME/GDM
if [[ ! -z $(systemctl status gdm | grep running) ]]; then
# gdm needs reload + TimedLogin instead of full restart
# full restart will fail
systemctl reload gdm
fi
# KDE/SDDM
if [[ ! -z $(systemctl status sddm | grep running) ]]; then
systemctl restart sddm
fi
# LightDM (For Chimera)
if [[ ! -z $(systemctl status lightdm | grep running) ]]; then
systemctl restart lightdm
fi

View File

@ -0,0 +1,32 @@
#!/bin/env python3
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()

View File

@ -0,0 +1,17 @@
#!/bin/bash
# Check if running in a nested desktop
if [[ "$PATH" =~ nested_plasma ]]; then
# If running in a nested desktop, close the session immediately and exit
qdbus qdbus org.kde.Shutdown /Shutdown org.kde.Shutdown.logout
exit
fi
# If not running in a nested desktop, continue with normal script execution
/usr/bin/steamrestart
/usr/libexec/os-session-select gamescope
if [[ ! -z $(systemctl status gdm | grep running) ]]; then
exec gnome-session-quit --no-prompt
fi
if [[ ! -z $(systemctl status sddm | grep running) ]]; then
exec qdbus org.kde.Shutdown /Shutdown org.kde.Shutdown.logout
fi

View File

@ -0,0 +1,12 @@
#!/usr/bin/bash
# Hook for custom OS branch script
STEAMOS_BRANCH_SCRIPT="/usr/libexec/os-branch-select"
if [ -f $STEAMOS_BRANCH_SCRIPT ] ; then
# Call branch script from the OS
${STEAMOS_BRANCH_SCRIPT} $@
else
# Simply call shutdown on the client
echo "No branches available"
fi

View File

@ -0,0 +1,16 @@
#!/usr/bin/bash
# Hook for custom OS script
# This sets the default session before we restart the
# desktop manager in order to auto-login to that session.
GAMESCOPE_SESSION_SCRIPT="/usr/libexec/os-session-select"
if [ -f $GAMESCOPE_SESSION_SCRIPT ] ; then
# Call session script from the OS
${GAMESCOPE_SESSION_SCRIPT} $@
fi
# shutdown steam
steam -shutdown
# make sure all wine processes are DEAD dead.
kill -9 $(ps -ef | grep -E -i '(wine|processid|\.exe)' | awk '{print $2}')
systemctl --user stop gamescope-session-plus@steam.service

View File

@ -0,0 +1,38 @@
#! /bin/bash
# The Steam client is known to call this script with the following parameter combinations:
# steamos-update --supports-duplicate-detection -- should do nothing
# steamos-update --enable-duplicate-detection check -- should check for update
# steamos-update check -- should check for update
# steamos-update --enable-duplicate-detection -- should perform an update
# steamos-update -- should perform an update
while [[ $# -gt 0 ]]; do
case $1 in
check)
CHECK=1
shift
;;
--supports-duplicate-detection)
EXIT=1
shift
;;
*)
shift
;;
esac
done
if command -v frzr-deploy > /dev/null; then
if [ -n "$CHECK" ]; then
frzr-deploy --check
elif [ -n "$EXIT" ]; then
exit 0
else
frzr-deploy --steam-progress
fi
else
exit 7 # tells Steam client there is no update to perform
fi

View File

@ -0,0 +1,17 @@
# Startup systemd unit for Gamescope session plus 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 Plus
BindsTo=graphical-session.target
Before=graphical-session.target
Wants=graphical-session-pre.target
After=graphical-session-pre.target
[Service]
ExecStart=/usr/share/gamescope-session-plus/gamescope-session-plus %i
# 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-plus.log
StandardError=append:%t/gamescope-session-plus.log

View File

@ -0,0 +1,57 @@
#!/usr/bin/bash
# Script returns true if a card requiring sdl workaround is detected
# Regexes for GPUs requiring the SDL backend workaround
# Can be used in regexes as $POLARIS_RE|$VEGA_RE etc for readability
# Needed output for a regex can gathered from "switcherooctl list"
POLARIS_RE="Ellesmere|Lexa PRO|Polaris \d{2} XL|RX 470/480/570/570X/580/580X/590|540/540X/550/550X|RX 540X/550/550X"
# Used to combine all regex into 1 var ex: FINALE_RE="$POLARIS_RE|$VEGA_RE"
FINAL_RE="$POLARIS_RE"
# Get the users homedirs so we can check for export-gpu configs
HOMES=$(grep "/home" /etc/passwd | awk -F ":" '{ print $6 }')
# Find all GPUs using lspci
VGA_CONTROLLERS=$(lspci -nn | grep -P "(VGA compatible|3D) controller")
# Check inside users home if gamescope is configured to use a specific GPU
# This at least does not break gamescope on systems where users have re-enabled the sddm login screen
while IFS= read -r USERDIR
do
# If a vulkan device config is present
if [ -f "$USERDIR/.config/environment.d/00-vulkan-device.conf" ]; then
# Check if a vulkan device is configured
VULKAN_GPU=$(grep -P "^VULKAN_ADAPTER=" "$USERDIR/.config/environment.d/00-vulkan-device.conf" | sed 's/VULKAN_ADAPTER=//')
# Write info to journal
echo "INFO: VULKAN_ADAPTER is set to $VULKAN_GPU by env config." | systemd-cat -t gamescope-sdl-workaround -p info
# If a vulkan device is configured
if [ -n "$VULKAN_GPU" ]; then
# Replace list of VGA controllers with just this device
VGA_CONTROLLERS=$(lspci -nn -d "$VULKAN_GPU")
fi
fi
done <<< "$HOMES"
# Process the VGA controllers list to see if we match any cards that need the sdl workaround
while IFS= read -r GPU
do
# If we match with a card that requires sdl workaround
if [[ "$GPU" =~ ($FINAL_RE) ]]; then
# Write info to journal
echo "INFO: $GPU detected" | systemd-cat -t gamescope-sdl-workaround -p info
echo "INFO: SDL backend workaround will be applied." | systemd-cat -t gamescope-sdl-workaround -p info
# This gpu requires sdl workaround, exit 0 (true)
exit 0
fi
done <<< "$VGA_CONTROLLERS"
# Write info to journalctl
echo "INFO: SDL backend workaround not required for this system" | systemd-cat -t gamescope-sdl-workaround -p info
echo 'INFO: If SDL backend workaround IS required for your card. Provide your "lspci -nn | grep -P '"'"'(VGA compatible|3D) controller'"'"'" to the developers.' | systemd-cat -t gamescope-sdl-workaround -p info
# This GPU does not require sdl workaround, exit 1 (false)
exit 1

View File

@ -0,0 +1,31 @@
#!/bin/bash
if [[ $EUID != 0 ]]; then
exec pkexec "$(realpath $0)" "$USER"
exit 1
else
file="/etc/gamescope-session-plus/run-commands"
# Use sed to remove lines starting with # and empty lines
sed -e 's/[[:space:]]*#.*// ; /^[[:space:]]*$/d' "$file" |
while read -r line; do
# Execute each line as a command
eval "$line" "$@"
done
# Directory containing the .conf files
directory="/etc/gamescope-session-plus/run-commands.d/"
# Loop over each .conf file in the directory
for file in "$directory"*.conf; do
# Check if the file exists
if [ -f "$file" ]; then
# Source the file to execute its contents
source "$file" "$@"
else
echo "File $file does not exist."
fi
done
fi

View File

@ -0,0 +1,179 @@
#!/usr/bin/bash
set -e
die() { echo >&2 "!! $*"; exit 1; }
echo $@ >> /tmp/args
export DESKTOP_WAYLAND=true
SENTINEL_FILE="steamos-session-select"
session="${1:-gamescope}"
if ${DESKTOP_WAYLAND}; then
session_type="wayland"
else
session_type="x11"
fi
session_launcher=""
create_sentinel=""
if [[ "$2" == "--sentinel-created" ]]; then
SENTINEL_CREATED=1
if ${DESKTOP_WAYLAND}; then
session_type="wayland"
else
session_type="x11"
fi
fi
# Update config sentinel
if [[ -z $SENTINEL_CREATED ]]; then
[[ $EUID == 0 ]] && die "Running $0 as root is not allowed"
[[ -n ${HOME+x} ]] || die "No \$HOME variable"
config_dir="${XDG_CONF_DIR:-"$HOME/.config"}"
session_type=$(
cd "$HOME"
mkdir -p "$config_dir"
cd "$config_dir"
if [[ -f "steamos-session-type" ]]; then
cp steamos-session-type "$SENTINEL_FILE"
else
if ${DESKTOP_WAYLAND}; then
echo "wayland" > "$SENTINEL_FILE"
else
echo "x11" > "$SENTINEL_FILE"
fi
fi
cat "$SENTINEL_FILE"
)
# clear steam game desktop shortcut clutter
DATA_HOME=${XDG_DATA_HOME:-$HOME/.local/share}
grep -r --files-with-matches "Exec=steam steam://rungameid/" "${DATA_HOME}"/applications/ | tr '\n' '\0' | xargs -0 -I {} rm {} || true
# If we were executed as a session user and then re-execute as root below, we don't want to set root's sentinel too
export SENTINEL_CREATED=1
fi
# We use "plasma" as "desktop" to hook up to SteamOS's scripts
case "$session" in
plasma-wayland-persistent)
if [[ ! -z $(systemctl status gdm | grep running) ]]; then
session_launcher="gnome-wayland"
elif [[ ! -z $(systemctl status sddm | grep running) ]]; then
session_launcher="plasma"
fi
;;
plasma-x11-persistent)
if [[ ! -z $(systemctl status gdm | grep running) ]]; then
session_launcher="gnome-xorg"
elif [[ ! -z $(systemctl status sddm | grep running) ]]; then
session_launcher="plasmax11"
fi
;;
desktop|plasma)
if ${DESKTOP_WAYLAND}; then
if [[ ! -z $(systemctl status gdm | grep running) ]]; then
session_launcher="gnome-wayland"
elif [[ ! -z $(systemctl status sddm | grep running) ]]; then
session_launcher="plasma"
fi
else
if [[ ! -z $(systemctl status gdm | grep running) ]]; then
session_launcher="gnome-xorg"
elif [[ ! -z $(systemctl status sddm | grep running) ]]; then
session_launcher="plasmax11"
fi
fi
create_sentinel=1
;;
gamescope)
session_launcher="gamescope-session-steam"
create_sentinel=1
;;
*)
echo >&2 "!! Unrecognized session '$session'"
exit 1
;;
esac
echo "Updated user selected session to $session_launcher"
if [[ ! -z $4 ]]; then
GDMUSER="$4"
fi
# Become root
if [[ $EUID != 0 ]]; then
exec pkexec "$(realpath $0)" "$session" --sentinel-created "$session_type" "$USER"
exit 1
fi
# GNOME/GDM
if [[ ! -z $(systemctl status gdm | grep running) ]]; then
# set new default session
if ${DESKTOP_WAYLAND}; then
if [[ -f /var/lib/AccountsService/users/"$GDMUSER" ]]; then
sed -i "s|Session=.*|Session=$session_launcher|g" /var/lib/AccountsService/users/"$GDMUSER"
else
echo "[User]" > /var/lib/AccountsService/users/"$GDMUSER"
echo "Session=$session_launcher" >> /var/lib/AccountsService/users/"$GDMUSER"
fi
else
if [[ -f /var/lib/AccountsService/users/"$GDMUSER" ]]; then
sed -i "s|XSession=.*|XSession=$session_launcher|g" /var/lib/AccountsService/users/"$GDMUSER"
else
echo "[User]" > /var/lib/AccountsService/users/"$GDMUSER"
echo "XSession=$session_launcher" >> /var/lib/AccountsService/users/"$GDMUSER"
fi
fi
# enable auto-login
# We need timedlogin here
# autologin without timer fails after manual logout
if [[ -f /etc/gdm/custom.conf ]]; then
sed -i "s|TimedLoginEnable=.*|TimedLoginEnable=true|g" /etc/gdm/custom.conf
sed -i "s|TimedLoginDelay=.*|TimedLoginDelay=1|g" /etc/gdm/custom.conf
sed -i "s|TimedLogin=.*|TimedLogin=$GDMUSER|g" /etc/gdm/custom.conf
if [[ -z $(cat /etc/gdm/custom.conf | grep TimedLogin) ]]; then
sed -i "/\[daemon\]/a\TimedLoginEnable=true" /etc/gdm/custom.conf
sed -i "/TimedLoginEnable=true/a\TimedLoginDelay=1" /etc/gdm/custom.conf
sed -i "/TimedLoginDelay=1/a\TimedLogin=$GDMUSER" /etc/gdm/custom.conf
fi
fi
fi
# KDE/SDDM
if [[ ! -z $(systemctl status sddm | grep running) ]]; then
if [[ -f /etc/sddm.conf ]]; then
# set new default session
sed -i "s|Session=.*|Session=$session_launcher.desktop|g" /etc/sddm.conf
# Relogin is REQUIRED for SDDM to not just boot us to the login screen without relogging
# GDM has similar problem needing timedlogin instead of autologin
sed -i "s|Relogin=.*|Relogin=true|g" /etc/sddm.conf
if [[ -z $(cat /etc/sddm.conf | grep Relogin) ]]; then
sed -i '/\[Autologin\]/a\Relogin=true' /etc/sddm.conf
fi
fi
# check second location just in case
if [[ -f /etc/sddm.conf.d/kde_settings.conf ]]; then
# set new default session
sed -i "s|Session=.*|Session=$session_launcher.desktop|g" /etc/sddm.conf.d/kde_settings.conf
# Relogin is REQUIRED for SDDM to not just boot us to the login screen without relogging
# GDM has similar problem needing timedlogin instead of autologin
sed -i "s|Relogin=.*|Relogin=true|g" /etc/sddm.conf.d/kde_settings.conf
if [[ -z $(cat /etc/sddm.conf.d/kde_settings.conf | grep Relogin) ]]; then
sed -i '/\[Autologin\]/a\Relogin=true' /etc/sddm.conf.d/kde_settings.conf
fi
fi
fi
# LightDM (For Chimera)
if [[ ! -z $(systemctl status lightdm | grep running) ]]; then
sed -i "s|autologin-session=.*|autologin-session=$session_launcher.desktop|g" /etc/lightdm/lightdm.conf.d/10-chimeraos-session.conf
fi

View File

@ -0,0 +1,12 @@
#!/bin/bash
# Get the SYS_ID
SYS_ID="$(cat /sys/devices/virtual/dmi/id/product_name)"
# Check SYS_IDs that have multiple revisions with insignificant hardware changes
if [[ "$SYS_ID" =~ ROG[[:space:]]Ally[[:space:]]RC71L.+ ]]; then
# Trunctate ROG Ally SYS_ID
echo "ROG Ally RC71L"
else
# Probably a sensible SYS_ID so we echo it
echo "$SYS_ID"
fi

View File

@ -0,0 +1,8 @@
#!/usr/bin/bash
# Returns true for Valve handhelds
SYS_ID="$(cat /sys/devices/virtual/dmi/id/product_name)"
if [[ ":Jupiter:Galileo:" =~ ":$SYS_ID:" ]]; then
exit 0
fi
exit 1

View File

@ -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

View File

@ -0,0 +1,5 @@
[Desktop Entry]
Type=Application
Name=Steam HTTP Handler
NoDisplay=true
Exec=steam-http-loader %u

View File

@ -0,0 +1,188 @@
# This file will be sourced by gamescope-session script if not
# overridden in ~/.config/environment.d
if [ -x /usr/libexec/hwsupport/sysid ]; then
# If present, use script to clean up hardware with insignificant product name changes, such as the ROG Ally.
SYS_ID="$(/usr/libexec/hwsupport/sysid)"
else
SYS_ID="$(cat /sys/devices/virtual/dmi/id/product_name)"
fi
CPU_VENDOR="$(lscpu | grep "Vendor ID" | cut -d : -f 2 | xargs)"
# OXP 60Hz 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:ONEXPLAYER 2 PRO ARP23H:ONEXPLAYER 2 PRO ARP23P:ONEXPLAYER 2 PRO ARP23P EVA-01"
AOK_LIST="AOKZOE A1 AR07:AOKZOE A1 Pro"
if [[ ":$OXP_LIST:" =~ ":$SYS_ID:" ]] || [[ ":$AOK_LIST:" =~ ":$SYS_ID:" ]]; then
DRM_MODE=fixed
PANEL_TYPE=external
ORIENTATION=left
# Set refresh rate range and enable refresh rate switching
export STEAM_DISPLAY_REFRESH_LIMITS=40,60
fi
# OXP 120Hz Devices
OXP_120_LIST="ONEXPLAYER F1"
if [[ ":$OXP_120_LIST:" =~ ":$SYS_ID:" ]]; then
PANEL_TYPE=external
ORIENTATION=left
# Set refresh rate range and enable refresh rate switching
export STEAM_DISPLAY_REFRESH_LIMITS=40,120
fi
# AYANEO AIR, SLIDE, and FLIP Keyboard Devices
AIR_LIST="AIR:AIR Pro:AIR Plus:SLIDE:FLIP KB:"
if [[ ":$AIR_LIST:" =~ ":$SYS_ID:" ]]; then
PANEL_TYPE=external
ORIENTATION=left
fi
# AYANEO FLIP Dual Screen
if [[ ":FLIP DS:" =~ ":$SYS_ID:" ]]; then
PANEL_TYPE=external
ORIENTATION=left
OUTPUT_CONNECTOR='*,eDP-1,eDP-2' # prefer the top screen
fi
# AYN Loki Devices
AYN_LIST="Loki Max:Loki Zero:Loki MiniPro"
if [[ ":$AYN_LIST:" =~ ":$SYS_ID:" ]]; then
DRM_MODE=fixed
ORIENTATION=left
CUSTOM_REFRESH_RATES=40,50,60
# Set refresh rate range and enable refresh rate switching
export STEAM_DISPLAY_REFRESH_LIMITS=40,60
fi
# GDP Win devices
GDP_LIST="G1619-01:G1621-02:MicroPC:WIN2"
if [[ ":$GDP_LIST:" =~ ":$SYS_ID:" ]]; then
OUTPUT_CONNECTOR='*,DSI-1'
DRM_MODE=fixed
ORIENTATION=right
TOUCH_GESTURES=1
fi
# GPD Win 3 specifc quirk to prevent crashing
# The GPD Win 3 does not support hardware rotation for 270/90 modes. We need to implement shader rotations to get this working correctly.
# 0/180 rotations should work.
if [[ ":G1618-03:" =~ ":$SYS_ID:" ]]; then
OUTPUT_CONNECTOR='*,DSI-1'
DRM_MODE=fixed
ORIENTATION=right
TOUCH_GESTURES=1
fi
#GPD Win 4 supports 40-60hz refresh rate changing
if [[ ":G1618-04:" =~ ":$SYS_ID:" ]]; then
TOUCH_GESTURES=1
export STEAM_DISPLAY_REFRESH_LIMITS=40,60
fi
# GPD Win mini
if [[ ":G1617-01:" =~ ":$SYS_ID:" ]]; then
TOUCH_GESTURES=1
ORIENTATION=""
if ( xrandr --prop 2>$1 | grep -e "1080x1920 " > /dev/null ) ; then
ORIENTATION=right
fi
fi
# Steam Deck (Common)
if [[ ":Jupiter:Galileo:" =~ ":$SYS_ID:" ]]; then
DRM_MODE=fixed
DONT_BYPASS_RESOLUTION=1
# Enables the adaptive brightness toggle
export STEAM_ENABLE_DYNAMIC_BACKLIGHT=1
# Allows the fan controller service to be toggled from gamemode
export STEAM_ENABLE_FAN_CONTROL=1
# Sets CPU topology for Steam Deck hardware
export WINE_CPU_TOPOLOGY=8:0,1,2,3,4,5,6,7
# Prevent default power button behavior
systemd-inhibit --what=handle-suspend-key:handle-power-key:handle-hibernate-key --who=gamescope-session --why="gamescope-session handles power button events" sleep infinity &
inhibitor_pid="$!"
# Start SteamOS's power button handler daemon, this passes power button events to Steam.
if command -v /usr/bin/powerbuttond > /dev/null; then
(while true; do
/usr/bin/powerbuttond
done) &
elif [ -f /usr/lib/hwsupport/power-button-handler.py ]; then
(while true; do
python3 /usr/lib/hwsupport/power-button-handler.py
done) &
fi
else
# On hardware that isn't a Steam Deck, fix Steam touch interaction.
DISABLE_TOUCH_CLICK=1
fi
# Steam Deck (LCD)
if [[ ":Jupiter:" =~ ":$SYS_ID:" ]]; then
export STEAM_DISPLAY_REFRESH_LIMITS=40,60
if [ -f "/usr/share/plymouth/themes/steamos/steamos-jupiter.png" ]; then
export STEAM_UPDATEUI_PNG_BACKGROUND=/usr/share/plymouth/themes/steamos/steamos-jupiter.png
fi
fi
# Steam Deck (OLED)
if [[ ":Galileo:" =~ ":$SYS_ID:" ]]; then
MURA_PATH=$(galileo-mura-setup)
if [ $? -eq 0 ]; then
MURA="$MURA_PATH"
fi
export STEAM_DISPLAY_REFRESH_LIMITS=45,90
export STEAM_GAMESCOPE_FORCE_HDR_DEFAULT=1
export STEAM_GAMESCOPE_FORCE_OUTPUT_TO_HDR10PQ_DEFAULT=1
export STEAM_ENABLE_STATUS_LED_BRIGHTNESS=1
if [ -f "/usr/share/plymouth/themes/steamos/steamos-galileo.png" ]; then
export STEAM_UPDATEUI_PNG_BACKGROUND=/usr/share/plymouth/themes/steamos/steamos-galileo.png
fi
fi
# ROG Ally
if [[ ":ROG Ally RC71L:" =~ ":$SYS_ID:" ]]; then
PANEL_TYPE=external
ADAPTIVE_SYNC=1
# Set refresh rate range and enable refresh rate switching
export STEAM_DISPLAY_REFRESH_LIMITS=40,120
fi
# Lenovo Legion Go
if [[ ":83E1:" =~ ":$SYS_ID:" ]]; then
ORIENTATION=left
ADAPTIVE_SYNC=1
CUSTOM_REFRESH_RATES=60,144
# Set refresh rate range and enable refresh rate switching
export STEAM_DISPLAY_REFRESH_LIMITS=60,144
fi
# Aya Neo 2 & 2S
if [[ ":AYANEO 2:AYANEO 2S:" =~ ":$SYS_ID:" ]]; then
# enable lower resolution for better out of the box performance
SCREEN_WIDTH=1920
SCREEN_HEIGHT=1200
INTERNAL_WIDTH=1280
INTERNAL_HEIGHT=800
fi
# Minisforum V3 Tablet
if [[ ":V3:" =~ ":$SYS_ID:" ]]; then
TOUCH_GESTURES=1
fi
# GPUs that require the SDL backend
if [ -x /usr/libexec/gamescope-sdl-workaround ] && /usr/libexec/gamescope-sdl-workaround; then
BACKEND=sdl
fi

View File

@ -0,0 +1,393 @@
#!/bin/bash
declare -r CLIENT=$1
declare -r CLIENT_CONFIG_DIR_USR=/usr/share/gamescope-session-plus/sessions.d
declare -r CLIENT_CONFIG_DIR_ETC=/etc/gamescope-session-plus/sessions.d
declare -r CLIENT_CONFIG_DIR_LOCAL="${XDG_CONFIG_HOME:-$HOME/.config}/gamescope-session-plus/sessions.d"
# Reset power-profiles-daemon/TuneD to balanced if the current profile is power save, this allows desktop control without greatly harming gaming performance.
if command -v tuned-adm > /dev/null; then
if grep -qz "powersave" <<< "$(tuned-adm active)"; then
tuned-adm profile balanced
fi
elif command -v powerprofilesctl > /dev/null; then
if grep -qz "power-saver" <<< "$(powerprofilesctl get)"; then
powerprofilesctl set balanced
fi
fi
# default empty session recovery function
short_session_recover() {
:
}
# default empty function to run after gamescope is started
post_gamescope_start() {
:
}
gamescope_has_option() {
if (gamescope --help 2>&1 | grep -e "$1" > /dev/null); then
return 0
fi
return 1
}
# Fix intel color corruption
# might come with some performance degradation but is better than a corrupted
# color image
export INTEL_DEBUG=norbc
export mesa_glthread=true
# Force Qt applications to run under xwayland
export QT_QPA_PLATFORM=xcb
# Some environment variables by default (taken from Deck session)
export SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS=0
# Enable Mangoapp
export MANGOHUD_CONFIGFILE=$(mktemp /tmp/mangohud.XXXXXXXX)
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"
export GAMESCOPE_PATCHED_EDID_FILE="${XDG_CONFIG_HOME:-$HOME/.config}/gamescope/edid.bin"
# 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\""
# Make path to Gamescope edid patched file.
mkdir -p "$(dirname "$GAMESCOPE_PATCHED_EDID_FILE")"
touch "$GAMESCOPE_PATCHED_EDID_FILE"
#echo "Making Gamescope patched edid at \"$GAMESCOPE_PATCHED_EDID_FILE\""
# 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
# Don't wait for buffers to idle on the client side before sending them to gamescope
export vk_xwayland_wait_ready=false
# To play nice with the short term callback-based limiter for now
export GAMESCOPE_LIMITER_FILE=$(mktemp /tmp/gamescope-limiter.XXXXXXXX)
# Temporary crutch until dummy plane interactions / etc are figured out
export GAMESCOPE_DISABLE_ASYNC_FLIPS=1
# Make Qt apps use the styling and behaviour of the desktop session
# This fixes some missing icons and unreadable text with Qt desktop apps in gamescope
if [[ ${BASE_IMAGE_NAME} == 'silverblue' ]]; then
export QT_QPA_PLATFORM_THEME=gtk2
else
export QT_QPA_PLATFORM_THEME=kde
fi
ulimit -n 524288
# Source device quirks if exists
if [ -f /usr/share/gamescope-session-plus/device-quirks ]; then
. /usr/share/gamescope-session-plus/device-quirks
fi
# Source client app specific configuration files
set -a
for i in ${CLIENT_CONFIG_DIR_USR}/${CLIENT} ${CLIENT_CONFIG_DIR_ETC}/${CLIENT} ${CLIENT_CONFIG_DIR_LOCAL}/${CLIENT}; do
[[ -f "${i}" ]] && . "${i}"
done
set +a
# Source user configuration from ~/.config/environment.d
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
if [ -z "$GAMESCOPECMD" ]; then
# Set default values
: "${OUTPUT_CONNECTOR:=*,eDP-1}"
: "${XWAYLAND_COUNT:=2}"
: "${TOUCH_MODE:=4}"
: "${HIDE_CURSOR_DELAY_MS:=3000}"
: "${FADE_OUT_DURATION_MS:=200}"
CURSOR=""
if [ -f "$CURSOR_FILE" ]; then
# Use specified cursor if file exists
CURSOR="--cursor ${CURSOR_FILE}"
fi
RESOLUTION=""
if [ -n "$SCREEN_WIDTH" ] && [ -n "$SCREEN_HEIGHT" ]; then
RESOLUTION="-W $SCREEN_WIDTH -H $SCREEN_HEIGHT"
fi
INTERNAL_RESOLUTION=""
if [ -n "$INTERNAL_WIDTH" ] && [ -n "$INTERNAL_HEIGHT" ] ; then
INTERNAL_RESOLUTION="-w $INTERNAL_WIDTH -h $INTERNAL_HEIGHT"
fi
DRM_MODE_OPTION=""
if [ -n "$DRM_MODE" ] ; then
DRM_MODE_OPTION="--generate-drm-mode $DRM_MODE"
fi
ORIENTATION_OPTION=""
if [ -n "$ORIENTATION" ] ; then
ORIENTATION_OPTION="--force-orientation $ORIENTATION"
fi
ADAPTIVE_SYNC_OPTION=""
if [ -n "$ADAPTIVE_SYNC" ]; then
ADAPTIVE_SYNC_OPTION="--adaptive-sync"
fi
FORCE_COMPOSITION_OPTION=""
if [ -n "$FORCE_COMPOSITION" ]; then
FORCE_COMPOSITION_OPTION="--force-composition"
fi
PANEL_TYPE_OPTION=""
if [ -n "$PANEL_TYPE" ] && gamescope_has_option "--force-panel-type"; then
PANEL_TYPE_OPTION="--force-panel-type $PANEL_TYPE"
fi
BYPASS_STEAM_RESOLUTION_OPTION=""
if [ ! -n "$DONT_BYPASS_RESOLUTION" ] && gamescope_has_option "--bypass-steam-resolution"; then
BYPASS_STEAM_RESOLUTION_OPTION="--bypass-steam-resolution"
fi
CUSTOM_REFRESH_RATES_OPTION=""
if [ -n "$CUSTOM_REFRESH_RATES" ] && gamescope_has_option "--custom-refresh-rates"; then
CUSTOM_REFRESH_RATES_OPTION="--custom-refresh-rates $CUSTOM_REFRESH_RATES"
fi
BACKEND_OPTION=""
# Check if an older GPU that needs the SDL workaround is in use.
if [ -n "$BACKEND" ] && gamescope_has_option "--backend"; then
BACKEND_OPTION="--backend $BACKEND"
fi
DISABLE_TOUCH_CLICK_OPTION=""
if [ -n "$DISABLE_TOUCH_CLICK" ] && gamescope_has_option "--disable-touch-click"; then
DISABLE_TOUCH_CLICK_OPTION="--disable-touch-click"
fi
MURA_OPTION=""
if [ -n "$MURA" ] && gamescope_has_option "--mura-map"; then
MURA_OPTION="--mura-map $MURA"
fi
TOUCH_GESTURES_OPTION=""
if [ -n "$TOUCH_GESTURES" ] && gamescope_has_option "--touch-gestures"; then
TOUCH_GESTURES_OPTION="--touch-gestures"
fi
GAMESCOPECMD="/usr/bin/gamescope \
$CURSOR \
$RESOLUTION \
$INTERNAL_RESOLUTION \
$DRM_MODE_OPTION \
$ORIENTATION_OPTION \
$ADAPTIVE_SYNC_OPTION \
$FORCE_COMPOSITION_OPTION \
$PANEL_TYPE_OPTION \
$BYPASS_STEAM_RESOLUTION_OPTION \
$CUSTOM_REFRESH_RATES_OPTION \
$BACKEND_OPTION \
$DISABLE_TOUCH_CLICK_OPTION \
$MURA_OPTION \
$TOUCH_GESTURES_OPTION \
--prefer-output $OUTPUT_CONNECTOR \
--xwayland-count $XWAYLAND_COUNT \
--default-touch-mode $TOUCH_MODE \
--hide-cursor-delay $HIDE_CURSOR_DELAY_MS \
--fade-out-duration $FADE_OUT_DURATION_MS \
--steam"
fi
# Add socket and stats read
GAMESCOPECMD+=" -R $socket -T $stats"
# Add custom vulkan adapter if specified
if [ -n "$VULKAN_ADAPTER" ]; then
GAMESCOPECMD+=" --prefer-vk-device $VULKAN_ADAPTER"
fi
# Attempt to fallback to a desktop session if something goes wrong too many times
short_session_tracker_file="/tmp/chimeraos-short-session-tracker"
short_session_duration=60
short_session_count_before_reset=3
SECONDS=0
short_session_count=$(wc <"$short_session_tracker_file" -l)
if [[ "$short_session_count" -ge "$short_session_count_before_reset" ]]; then
echo >&2 "gamescope-session-plus: detected broken ${CLIENT} or gamescope failure, will try to reset the session"
short_session_recover
# rearm
rm "$short_session_tracker_file"
exit 1
fi
# Log rotate the last session
if [ -f "${HOME}"/.${CLIENT}-stdout.log ]; then
cp "${HOME}"/.${CLIENT}-stdout.log "${HOME}"/.${CLIENT}-stdout.log.old
fi
if [ -f "${HOME}"/.gamescope-stdout.log ]; then
cp "${HOME}"/.gamescope-stdout.log "${HOME}"/.gamescope-stdout.log.old
fi
if [ -f "${HOME}"/.gamescope-cmd.log ]; then
cp "${HOME}"/.gamescope-cmd.log "${HOME}"/.gamescope-cmd.log.old
fi
# Start gamescope compositor, log it's output and background it
echo $GAMESCOPECMD >"${HOME}"/.gamescope-cmd.log
$GAMESCOPECMD >"${HOME}"/.gamescope-stdout.log 2>&1 &
gamescope_pid="$!"
if read -r -t 15 response_x_display response_wl_display <> "$socket"; then
export DISPLAY="$response_x_display"
export GAMESCOPE_WAYLAND_DISPLAY="$response_wl_display"
# We're done!
else
echo "gamescope failed" >>"$short_session_tracker_file"
kill -9 "$gamescope_pid"
wait
exit 1
# Systemd or Session manager will have to restart session
fi
# Run session defined hook
post_gamescope_start
# 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
(while true; do
mangoapp >"${HOME}"/.mangoapp-stdout.log 2>&1
done) &
fi
# Start discover-overlay if discord is installed
if command -v discover-overlay > /dev/null && grep -q "com.discordapp.Discord" <<< $(/usr/bin/flatpak list --app --columns=application); then
env DISPLAY=:0 discover-overlay 2>&1 &
fi
# If the Sunshine service is enabled, restart it
if systemctl is-enabled --user sunshine.service; then
systemctl restart --user sunshine.service 2>&1 &
fi
# For compatibility with older user configuration overrides
if [ -n "$STEAMCMD" ]; then
CLIENTCMD=$STEAMCMD
fi
# Start client application
$CLIENTCMD >"${HOME}/.${CLIENT}-stdout.log" 2>&1
if [[ "$SECONDS" -lt "$short_session_duration" ]]; then
echo "${CLIENT} failed" >>"$short_session_tracker_file"
else
rm "$short_session_tracker_file"
fi
# 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 powerof sentinels here
if [[ -e "$REBOOT_SENTINEL" ]]; then
rm -f "$REBOOT_SENTINEL"
# rearm short session tracker
rm "$short_session_tracker_file"
reboot
fi
if [[ -e "$SHUTDOWN_SENTINEL" ]]; then
rm -f "$SHUTDOWN_SENTINEL"
# rearm short session tracker
rm "$short_session_tracker_file"
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-plus: 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-plus: gamescope timed out while exiting, killing"
elif [[ $ret != 127 && $job != "$sleep_pid" ]]; then
echo >&2 "gamescope-session-plus: unexpected background pid $job at teardown: "
# spew some debug about it
ps -p "$job" >&2
fi
kill -9 "$job"
done

View File

@ -0,0 +1,139 @@
#! /bin/bash
function short_session_recover {
mkdir -p ~/.local/share/Steam
# remove some caches and stateful things known to cause Steam to fail to start if corrupt
rm -rf --one-file-system ~/.local/share/Steam/config/widevine
# extract the steam bootstrap to potentially fix the issue the next boot
if [[ -f "/usr/share/gamescope-session-plus/bootstraplinux_ubuntu12_32.tar.xz" ]]; then
tar xf /usr/share/gamescope-session-plus/bootstraplinux_ubuntu12_32.tar.xz -C ~/.local/share/Steam
fi
# change session to desktop as fallback
steamos-session-select desktop
}
function post_gamescope_start {
# Run steam-tweaks if exists
if command -v steam-tweaks > /dev/null; then
steam-tweaks > "${HOME}"/.steam-tweaks.log
fi
}
# Show VRR controls in Steam
export STEAM_GAMESCOPE_VRR_SUPPORTED=1
# When set to 1, a toggle will show up in the steamui to control whether dynamic refresh rate is applied to the steamui
export STEAM_GAMESCOPE_DYNAMIC_REFRESH_IN_STEAM_SUPPORTED=0
# Enable Mangoapp
export STEAM_MANGOAPP_PRESETS_SUPPORTED=1
export STEAM_USE_MANGOAPP=1
export STEAM_USE_DYNAMIC_VRS=1
# Set up first time bootstrap status
export STEAM_BOOTSTRAP_CONFIG="${XDG_CONFIG_HOME:-$HOME/.config}/gamescope/bootstrap.cfg"
# Make path to Steam bootstrap config file.
mkdir -p "$(dirname "$STEAM_BOOTSTRAP_CONFIG")"
touch "$STEAM_BOOTSTRAP_CONFIG"
# 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
export STEAM_GAMESCOPE_HDR_SUPPORTED=1
# Workaround for steam getting killed immediatly during reboot
export STEAMOS_STEAM_REBOOT_SENTINEL="/tmp/steamos-reboot-sentinel"
export REBOOT_SENTINEL=$STEAMOS_STEAM_REBOOT_SENTINEL # for common gamescope-session-plus
# Workaround for steam getting killed immediatly during shutdown
# Same idea as reboot sentinel above
export STEAMOS_STEAM_SHUTDOWN_SENTINEL="/tmp/steamos-shutdown-sentinel"
export SHUTDOWN_SENTINEL=$STEAMOS_STEAM_SHUTDOWN_SENTINEL # for common gamescope-session-plus
# 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 NIS support
export STEAM_GAMESCOPE_NIS_SUPPORTED=1
# Let steam know it can unmount drives without superuser privileges
export STEAM_ALLOW_DRIVE_UNMOUNT=1
# Allow formatting external drives
export STEAM_ALLOW_DRIVE_ADOPT=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
# Color management support
export STEAM_GAMESCOPE_COLOR_MANAGED=1
export STEAM_GAMESCOPE_VIRTUAL_WHITE=1
# HDMI-CEC support
export STEAM_ENABLE_CEC=0
# Set input method modules for Qt/GTK that will show the Steam keyboard
export QT_IM_MODULE=steam
export GTK_IM_MODULE=Steam
# Use SteamOS background if exists
if [ -f "/usr/share/steamos/steamos.png" ] ; then
export STEAM_UPDATEUI_PNG_BACKGROUND=/usr/share/steamos/steamos.png
fi
export CURSOR_FILE="${HOME}/.local/share/Steam/tenfoot/resource/images/cursors/arrow.png"
export XCURSOR_THEME=steam
export XCURSOR_SCALE=256
export CLIENTCMD="steam -gamepadui -steamos3 -steampal -steamdeck"
# Workaround for Steam login issue while Steam client change propagates out of Beta
touch "${HOME}"/.steam/root/config/SteamAppData.vdf || true
if [[ -f "/usr/share/gamescope-session-plus/bootstraplinux_ubuntu12_32.tar.xz" ]] && ! grep -q "set_bootstrap=1" "$STEAM_BOOTSTRAP_CONFIG"; then
mkdir -p ~/.local/share/Steam
tar xf /usr/share/gamescope-session-plus/bootstraplinux_ubuntu12_32.tar.xz -C ~/.local/share/Steam
echo "set_bootstrap=1" >> "$STEAM_BOOTSTRAP_CONFIG"
fi
# 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_notif_daemon-stdout.log ]; then
cp "${HOME}"/.steam_notif_daemon-stdout.log "${HOME}"/.steam_notif_daemon-stdout.log.old
fi
# If we have steam_notif_daemon binary start it
if command -v steam_notif_daemon > /dev/null; then
steam_notif_daemon > "${HOME}"/.steam_notif_daemon-stdout.log 2>&1 &
fi
# Run steam-tweaks if exists
if command -v steam-tweaks > /dev/null; then
steam-tweaks > "${HOME}"/.steam-tweaks.log
fi

View File

@ -0,0 +1,13 @@
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg id="svg2" height="64" style="" viewBox="0 0 64 64" width="64" xmlns="http://www.w3.org/2000/svg" sodipodi:docname="start.svg" inkscape:version="1.2-dev (d2dd25d878, 2022-02-01, custom)" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg">
<style type="text/css" id="current-color-scheme">
.ColorScheme-Text {
color:#ffffff;
}
</style>
<g id="start-here-kde">
<rect style="fill:#808080;fill-rule:evenodd;opacity:0.000001" id="rect1101" width="64" height="64" x="0" y="0" />
<path id="path42220" d="m 32 4 v 10 a 18 18 0 0 1 18 18 a 18 18 0 0 1 -18 18 v 10 a 28 28 0 0 0 28 -28 a 28 28 0 0 0 -28 -28 z" style="fill:currentColor;fill-rule:evenodd" class="ColorScheme-Text" />
<circle id="path43518" cx="32" cy="32" r="14" style="fill:#1a9fff;fill-rule:evenodd" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1020 B

View File

@ -0,0 +1 @@
distributor-logo-steamdeck.svg

View File

@ -0,0 +1,13 @@
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg id="svg2" height="64" style="" viewBox="0 0 64 64" width="64" xmlns="http://www.w3.org/2000/svg" sodipodi:docname="start.svg" inkscape:version="1.2-dev (d2dd25d878, 2022-02-01, custom)" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg">
<style type="text/css" id="current-color-scheme">
.ColorScheme-Text {
color:#ffffff;
}
</style>
<g id="start-here-kde">
<rect style="fill:#808080;fill-rule:evenodd;opacity:0.000001" id="rect1101" width="64" height="64" x="0" y="0" />
<path id="path42220" d="m 32 4 v 10 a 18 18 0 0 1 18 18 a 18 18 0 0 1 -18 18 v 10 a 28 28 0 0 0 28 -28 a 28 28 0 0 0 -28 -28 z" style="fill:currentColor;fill-rule:evenodd" class="ColorScheme-Text" />
<circle id="path43518" cx="32" cy="32" r="14" style="fill:#1a9fff;fill-rule:evenodd" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1020 B

View File

@ -0,0 +1 @@
distributor-logo-steamdeck.svg

View File

@ -0,0 +1,13 @@
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg id="svg2" height="64" style="" viewBox="0 0 64 64" width="64" xmlns="http://www.w3.org/2000/svg" sodipodi:docname="start.svg" inkscape:version="1.2-dev (d2dd25d878, 2022-02-01, custom)" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg">
<style type="text/css" id="current-color-scheme">
.ColorScheme-Text {
color:#ffffff;
}
</style>
<g id="start-here-kde">
<rect style="fill:#808080;fill-rule:evenodd;opacity:0.000001" id="rect1101" width="64" height="64" x="0" y="0" />
<path id="path42220" d="m 32 4 v 10 a 18 18 0 0 1 18 18 a 18 18 0 0 1 -18 18 v 10 a 28 28 0 0 0 28 -28 a 28 28 0 0 0 -28 -28 z" style="fill:currentColor;fill-rule:evenodd" class="ColorScheme-Text" />
<circle id="path43518" cx="32" cy="32" r="14" style="fill:#1a9fff;fill-rule:evenodd" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1020 B

View File

@ -0,0 +1 @@
distributor-logo-steamdeck.svg

View File

@ -0,0 +1,13 @@
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg id="svg2" height="64" style="" viewBox="0 0 64 64" width="64" xmlns="http://www.w3.org/2000/svg" sodipodi:docname="start.svg" inkscape:version="1.2-dev (d2dd25d878, 2022-02-01, custom)" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg">
<style type="text/css" id="current-color-scheme">
.ColorScheme-Text {
color:#ffffff;
}
</style>
<g id="start-here-kde">
<rect style="fill:#808080;fill-rule:evenodd;opacity:0.000001" id="rect1101" width="64" height="64" x="0" y="0" />
<path id="path42220" d="m 32 4 v 10 a 18 18 0 0 1 18 18 a 18 18 0 0 1 -18 18 v 10 a 28 28 0 0 0 28 -28 a 28 28 0 0 0 -28 -28 z" style="fill:currentColor;fill-rule:evenodd" class="ColorScheme-Text" />
<circle id="path43518" cx="32" cy="32" r="14" style="fill:#1a9fff;fill-rule:evenodd" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1020 B

View File

@ -0,0 +1 @@
distributor-logo-steamdeck.svg

View File

@ -0,0 +1,13 @@
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg id="svg2" height="64" style="" viewBox="0 0 64 64" width="64" xmlns="http://www.w3.org/2000/svg" sodipodi:docname="start.svg" inkscape:version="1.2-dev (d2dd25d878, 2022-02-01, custom)" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg">
<style type="text/css" id="current-color-scheme">
.ColorScheme-Text {
color:#ffffff;
}
</style>
<g id="start-here-kde">
<rect style="fill:#808080;fill-rule:evenodd;opacity:0.000001" id="rect1101" width="64" height="64" x="0" y="0" />
<path id="path42220" d="m 32 4 v 10 a 18 18 0 0 1 18 18 a 18 18 0 0 1 -18 18 v 10 a 28 28 0 0 0 28 -28 a 28 28 0 0 0 -28 -28 z" style="fill:currentColor;fill-rule:evenodd" class="ColorScheme-Text" />
<circle id="path43518" cx="32" cy="32" r="14" style="fill:#1a9fff;fill-rule:evenodd" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1020 B

View File

@ -0,0 +1 @@
distributor-logo-steamdeck.svg

View File

@ -0,0 +1,7 @@
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg id="svg2" height="64" style="" viewBox="0 0 64 64" width="64" xmlns="http://www.w3.org/2000/svg" sodipodi:docname="deck_icon.svg" inkscape:version="1.2-dev (d2dd25d878, 2022-02-01, custom)" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg">
<path id="path42220" d="m 32 4 v 10 a 18 18 0 0 1 18 18 a 18 18 0 0 1 -18 18 v 10 a 28 28 0 0 0 28 -28 a 28 28 0 0 0 -28 -28 z" style="fill:#fff;fill-rule:evenodd"/>
<circle id="path43518" cx="32" cy="32" r="14" style="fill:#1a9fff;fill-rule:evenodd"/>
<path id="path52048" d="m 32 22 a 2 2 0 0 0 -1.4140625 .5859375 l -8 8 a 2.0002 2.0002 0 0 0 0 2.828125 l 8 8 a 2 2 0 0 0 2.828125 0 a 2 2 0 0 0 0 -2.828125 l -4.5859375 -4.5859375 h 11.171875 a 2 2 0 0 0 2 -2 a 2 2 0 0 0 -2 -2 h -11.171875 l 4.5859375 -4.5859375 a 2 2 0 0 0 0 -2.828125 a 2 2 0 0 0 -1.4140625 -.5859375 z" style="fill:#fff;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0"/>
<g id="path89696" style=""/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,13 @@
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg id="svg2" height="64" style="" viewBox="0 0 64 64" width="64" xmlns="http://www.w3.org/2000/svg" sodipodi:docname="start.svg" inkscape:version="1.2-dev (d2dd25d878, 2022-02-01, custom)" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg">
<style type="text/css" id="current-color-scheme">
.ColorScheme-Text {
color:#ffffff;
}
</style>
<g id="start-here-kde">
<rect style="fill:#808080;fill-rule:evenodd;opacity:0.000001" id="rect1101" width="64" height="64" x="0" y="0" />
<path id="path42220" d="m 32 4 v 10 a 18 18 0 0 1 18 18 a 18 18 0 0 1 -18 18 v 10 a 28 28 0 0 0 28 -28 a 28 28 0 0 0 -28 -28 z" style="fill:currentColor;fill-rule:evenodd" class="ColorScheme-Text" />
<circle id="path43518" cx="32" cy="32" r="14" style="fill:#1a9fff;fill-rule:evenodd" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1020 B

View File

@ -0,0 +1 @@
distributor-logo-steamdeck.svg

View File

@ -0,0 +1,20 @@
<?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>Gamescope 3rd party commands</vendor>
<vendor_url>https://github.com/nobara-project/</vendor_url>
<action id="org.gs-thirdparty-services.policykit.steamos.pkexec.run-gs-thirdparty-services-start">
<description>Helper to start handheld daemon</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/libexec/gs-thirdparty-services</annotate>
</action>
</policyconfig>

View File

@ -0,0 +1,30 @@
<?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>Nobara Project</vendor>
<vendor_url>http://nobaraproject.org</vendor_url>
<action id="org.nobaraproject.policykit.steamos.pkexec.run-session-select">
<description>Helper to switch sessions</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/libexec/os-session-select</annotate>
</action>
<action id="org.nobaraproject.policykit.steamos.pkexec.run-dm-restart">
<description>Helper to restart desktop managers after default session is changed in configs</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/gamescope-session-plus</annotate>
</action>
</policyconfig>

View File

@ -0,0 +1,43 @@
<?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>Nobara Project</vendor>
<vendor_url>http://www.nobaraproject.org</vendor_url>
<action id="org.nobaraproject.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.nobaraproject.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>
<action id="org.nobaraproject.policykit.steamos.pkexec.run-steamos-select-branch">
<description>Select branch script for frzr in GamepadUI</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-select-branch</annotate>
</action>
</policyconfig>

View File

@ -0,0 +1,7 @@
[Desktop Entry]
Encoding=UTF-8
Name=Steam Deck Mode
Comment=Steam Deck Mode
Exec=gamescope-session-plus steam
Type=Application
DesktopNames=gamescope

13
main.sh
View File

@ -1,14 +1,21 @@
DEBIAN_FRONTEND=noninteractive
#! /bin/bash
set -e
VERSION="0.2.nobara"
source ./pika-build-config.sh
echo "$PIKA_BUILD_ARCH" > pika-build-arch
# Clone Upstream
git clone https://github.com/PikaOS-linux/gamescope-session
cp -rvf ./debian ./gamescope-session
cd ./gamescope-session
# Get build deps
apt-get build-dep ./ -y
# Build package
LOGNAME=root dh_make --createorig -y -l -p gamescope-session_"$VERSION" || echo "dh-make: Ignoring Last Error"
dpkg-buildpackage --no-sign
# Move the debs to output

10
pika-build-config/amd64-v3.sh Executable file
View File

@ -0,0 +1,10 @@
#! /bin/bash
export PIKA_BUILD_ARCH="amd64-v3"
export DEBIAN_FRONTEND="noninteractive"
export DEB_BUILD_MAINT_OPTIONS="optimize=+lto -march=x86-64-v3 -O3 -flto -fuse-linker-plugin -falign-functions=32"
export DEB_CFLAGS_MAINT_APPEND="-march=x86-64-v3 -O3 -flto -fuse-linker-plugin -falign-functions=32"
export DEB_CPPFLAGS_MAINT_APPEND="-march=x86-64-v3 -O3 -flto -fuse-linker-plugin -falign-functions=32"
export DEB_CXXFLAGS_MAINT_APPEND="-march=x86-64-v3 -O3 -flto -fuse-linker-plugin -falign-functions=32"
export DEB_LDFLAGS_MAINT_APPEND="-march=x86-64-v3 -O3 -flto -fuse-linker-plugin -falign-functions=32"
export DEB_BUILD_OPTIONS="nocheck notest terse"
export DPKG_GENSYMBOLS_CHECK_LEVEL=0

5
pika-build-config/i386.sh Executable file
View File

@ -0,0 +1,5 @@
#! /bin/bash
export PIKA_BUILD_ARCH="i386"
export DEBIAN_FRONTEND="noninteractive"
export DEB_BUILD_OPTIONS="nocheck notest terse"
export DPKG_GENSYMBOLS_CHECK_LEVEL=0

View File

@ -1,8 +1,2 @@
# send debs to server
rsync -azP --include './' --include '*.deb' --exclude '*' ./output/ ferreo@direct.pika-os.com:/srv/www/incoming/
# add debs to repo
ssh ferreo@direct.pika-os.com 'aptly repo add -force-replace -remove-files pikauwu-main /srv/www/incoming/'
# publish the repo
ssh ferreo@direct.pika-os.com 'aptly publish update -batch -skip-contents -force-overwrite pikauwu filesystem:pikarepo:'
rsync -azP --include './' --include '*.deb' --exclude '*' ./output/ ferreo@direct.pika-os.com:/srv/www/cockatiel-incoming/