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
1
.github/build-canary-v3
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
1
|
1
.github/build-nest-v3
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
1
|
1
.github/release-canary-v3
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
2
|
1
.github/release-nest-v3
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
1
|
37
.github/workflows/build-canaryv3.yml
vendored
Normal 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
@ -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
@ -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
@ -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
@ -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
@ -1,16 +1,4 @@
|
|||||||
gamescope-session (0.3-100pika1) pikauwu; urgency=low
|
gamescope-session (1:0.2.nobara-101pika1) pika; 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
|
|
||||||
|
|
||||||
* Initial Creation
|
* Initial Creation
|
||||||
|
|
||||||
|
25
debian/control
vendored
@ -2,13 +2,32 @@ Source: gamescope-session
|
|||||||
Section: games
|
Section: games
|
||||||
Priority: optional
|
Priority: optional
|
||||||
Maintainer: Ward Nakchbandi <hotrod.master@hotmail.com>
|
Maintainer: Ward Nakchbandi <hotrod.master@hotmail.com>
|
||||||
Build-Depends: debhelper-compat (= 13)
|
Build-Depends:
|
||||||
|
debhelper-compat (= 13),
|
||||||
Standards-Version: 4.6.1
|
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
|
Package: gamescope-session
|
||||||
Section: games
|
Section: games
|
||||||
Architecture: all
|
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
|
Description: Steam Big Picture Mode/Gamemode session based on gamescope
|
||||||
|
|
||||||
|
38
debian/copyright
vendored
@ -1,15 +1,35 @@
|
|||||||
|
### Plus
|
||||||
|
|
||||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
The MIT License (MIT)
|
||||||
Version 2, December 2004
|
|
||||||
|
|
||||||
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
|
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:
|
||||||
copies of this license document, and changing it is allowed as long
|
|
||||||
as the name is changed.
|
|
||||||
|
|
||||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
|
||||||
|
|
||||||
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.
|
||||||
|
83
debian/extras/gamescope-resolution-configurator
vendored
@ -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
|
|
@ -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
@ -1 +0,0 @@
|
|||||||
gamescope-session_0.0.git.92.60c3f5f9-99pika2_source.buildinfo games optional
|
|
1
debian/gamescope-session.install
vendored
@ -1 +1,2 @@
|
|||||||
usr
|
usr
|
||||||
|
etc
|
||||||
|
6
debian/rules
vendored
@ -1,10 +1,4 @@
|
|||||||
#!/usr/bin/make -f
|
#!/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 $@
|
dh $@
|
||||||
|
2
debian/source/format
vendored
@ -1 +1 @@
|
|||||||
3.0 (native)
|
3.0 (quilt)
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
# Place any custom commands or services that should be started here. Each command should be on a separate line:
|
@ -0,0 +1 @@
|
|||||||
|
/usr/bin/nobara-device-quirks "$@"
|
282
gamescope-session/etc/skel/.config/autostart/steam.desktop
Executable 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 dụng để quản 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]=Cửa 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]=Cộng đồ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ư viện
|
||||||
|
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 chụp
|
||||||
|
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 tức
|
||||||
|
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 lập
|
||||||
|
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]=Bạn bè
|
||||||
|
Exec=/usr/bin/steam %U
|
7
gamescope-session/etc/skel/Desktop/Return.desktop
Executable 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
|
7
gamescope-session/etc/xdg/autostart/deckscale.desktop
Executable 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
|
33
gamescope-session/usr/bin/deckscale
Executable 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
|
62
gamescope-session/usr/bin/export-gpu
Executable 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."
|
||||||
|
|
57
gamescope-session/usr/bin/gamescope-session-plus
Executable 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
|
32
gamescope-session/usr/bin/steam-http-loader
Executable 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()
|
17
gamescope-session/usr/bin/steamos-desktop-return
Executable 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
|
12
gamescope-session/usr/bin/steamos-select-branch
Executable 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
|
||||||
|
|
16
gamescope-session/usr/bin/steamos-session-select
Executable 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
|
38
gamescope-session/usr/bin/steamos-update
Executable 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
|
@ -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
|
57
gamescope-session/usr/libexec/gamescope-sdl-workaround
Executable 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
|
31
gamescope-session/usr/libexec/gs-thirdparty-services
Executable 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
|
179
gamescope-session/usr/libexec/os-session-select
Executable 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
|
12
gamescope-session/usr/libexec/sysid
Executable 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
|
8
gamescope-session/usr/libexec/valve-hardware
Executable 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
|
@ -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
|
188
gamescope-session/usr/share/gamescope-session-plus/device-quirks
Normal 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
|
393
gamescope-session/usr/share/gamescope-session-plus/gamescope-session-plus
Executable 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
|
@ -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
|
@ -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 |
@ -0,0 +1 @@
|
|||||||
|
distributor-logo-steamdeck.svg
|
@ -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 |
@ -0,0 +1 @@
|
|||||||
|
distributor-logo-steamdeck.svg
|
@ -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 |
@ -0,0 +1 @@
|
|||||||
|
distributor-logo-steamdeck.svg
|
@ -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 |
@ -0,0 +1 @@
|
|||||||
|
distributor-logo-steamdeck.svg
|
@ -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 |
@ -0,0 +1 @@
|
|||||||
|
distributor-logo-steamdeck.svg
|
@ -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 |
@ -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 |
@ -0,0 +1 @@
|
|||||||
|
distributor-logo-steamdeck.svg
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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
@ -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
|
# Clone Upstream
|
||||||
git clone https://github.com/PikaOS-linux/gamescope-session
|
|
||||||
cp -rvf ./debian ./gamescope-session
|
|
||||||
cd ./gamescope-session
|
cd ./gamescope-session
|
||||||
|
|
||||||
# Get build deps
|
# Get build deps
|
||||||
apt-get build-dep ./ -y
|
apt-get build-dep ./ -y
|
||||||
|
|
||||||
# Build package
|
# Build package
|
||||||
|
LOGNAME=root dh_make --createorig -y -l -p gamescope-session_"$VERSION" || echo "dh-make: Ignoring Last Error"
|
||||||
dpkg-buildpackage --no-sign
|
dpkg-buildpackage --no-sign
|
||||||
|
|
||||||
# Move the debs to output
|
# Move the debs to output
|
||||||
|
10
pika-build-config/amd64-v3.sh
Executable 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
@ -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
|
@ -1,8 +1,2 @@
|
|||||||
# send debs to server
|
# send debs to server
|
||||||
rsync -azP --include './' --include '*.deb' --exclude '*' ./output/ ferreo@direct.pika-os.com:/srv/www/incoming/
|
rsync -azP --include './' --include '*.deb' --exclude '*' ./output/ ferreo@direct.pika-os.com:/srv/www/cockatiel-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:'
|
|
||||||
|