mirror of
https://git.savannah.gnu.org/git/guix.git
synced 2025-01-18 13:36:36 +01:00
TEMP Add "playgound" for runninc plasma on another virtual terminal.
Following the idea from +<https://guix.gnu.org/de/blog/2019/running-a-guix-xfce-desktop-on-centos-7>: Start an X11 server (provided by the host OS) on another virtual terminal and make this run the desktop.
This commit is contained in:
parent
50922b9ec2
commit
e92bf79bf2
8 changed files with 455 additions and 0 deletions
14
99-playground/.xinitrc
Executable file
14
99-playground/.xinitrc
Executable file
|
@ -0,0 +1,14 @@
|
|||
#!/bin/sh
|
||||
|
||||
exec >$HOME/xerrors 2>&1
|
||||
|
||||
# test: dies a simple X11 program start?
|
||||
#exec xvt -geometry +1+1 -display $DISPLAY
|
||||
|
||||
# start plasma under strace and collect trace files in /tmp
|
||||
/usr/bin/rm -rf /tmp/trace.*
|
||||
exec /usr/bin/strace -ff -o /tmp/trace.txt -e trace=file \
|
||||
-e trace=file \
|
||||
--no-abbrev -e abbrev=!execve -s 2000 \
|
||||
startplasma-x11
|
||||
#exec startplasma-x11
|
8
99-playground/.xserverrc
Executable file
8
99-playground/.xserverrc
Executable file
|
@ -0,0 +1,8 @@
|
|||
#!/bin/sh
|
||||
|
||||
VTNR=$XDG_VTNR
|
||||
((VTNR++)) # overwrite use next VT
|
||||
|
||||
# Use the X server provided by the foreign system (host OS)
|
||||
PATH=/usr/local/bin:/usr/bin
|
||||
exec /usr/bin/Xorg -novtswitch -nolisten tcp "$@" vt$VTNR
|
54
99-playground/00-README.txt
Normal file
54
99-playground/00-README.txt
Normal file
|
@ -0,0 +1,54 @@
|
|||
|
||||
This directory contains file to test the desktop following the idea from
|
||||
<https://guix.gnu.org/de/blog/2019/running-a-guix-xfce-desktop-on-centos-7/>.
|
||||
The basic idea: Start an X11 server (provided by the host OS) on another
|
||||
virtual terminal and make this run the desktop.
|
||||
|
||||
See comments in desktop-manifest.scm for which packages get installed and what
|
||||
combinations I already treid.
|
||||
|
||||
|
||||
|
||||
Brief howto
|
||||
=================
|
||||
|
||||
* Switch to a new virtual terminal (e.g Ctrl-Alt-F2) and login there
|
||||
(maybe this is not necessary, but I was not able to start a new X11 server
|
||||
from within my running X session)
|
||||
|
||||
* cd here
|
||||
* Adjust desktop-manifest.scm
|
||||
* Adjust .xinitrc
|
||||
|
||||
* Run ./00-setup.sh
|
||||
|
||||
This script will set this directory as your HOME, create a Guix profile
|
||||
containing the Plasma desktop and start the X11 server with the Plasma
|
||||
desktop on the next virtaul terminal.
|
||||
|
||||
* check results, refine packages, adjust desktop-manifest.scm redo :-)
|
||||
|
||||
* new X-server will get DISPLAY :1.
|
||||
To change this, change number at the end of 00-setup.sh and 01-setup.sh
|
||||
|
||||
|
||||
Files
|
||||
============
|
||||
|
||||
00-setup.sh - starts using a profile - might require tweaking
|
||||
01-setup.sh - starts using an environment - unfinished
|
||||
desktop-manifest.scm - packages to install.
|
||||
Also contains information about what I already tried.
|
||||
|
||||
.xserverrc - starts X server on next vt - called by xinit
|
||||
.xinitrc - start the X clients, esp. the desktop
|
||||
Use these scripts to be more flexible in adjusting environments
|
||||
|
||||
xorg.conf - unused in the Plase desktop test playground. *-setup.sh uses the
|
||||
host OS's xinit and the host OS's xorg.conf
|
||||
|
||||
unstrace.py - unfinished helper to strip irrelevant information from
|
||||
the strace logs
|
||||
|
||||
|
||||
|
52
99-playground/00-setup.sh
Executable file
52
99-playground/00-setup.sh
Executable file
|
@ -0,0 +1,52 @@
|
|||
#!/bin/bash
|
||||
|
||||
export HOME=$(dirname $(realpath "$0"))
|
||||
echo $HOME
|
||||
|
||||
cd $HOME
|
||||
../pre-inst-env guix package -p ~/.desktop-profile -m ~/desktop-manifest.scm
|
||||
if [ $? != 0 ] ; then
|
||||
exit
|
||||
fi
|
||||
|
||||
export GUIX_PROFILE=${HOME}/.desktop-profile
|
||||
#export XDG_CONFIG_DIRS="${GUIX_PROFILE}/etc/xdg"
|
||||
#export XDG_DATA_DIRS="${GUIX_PROFILE}/share"
|
||||
|
||||
# remove remainings from foreign distro
|
||||
export QT4DOCDIR=
|
||||
export QT5DOCDIR=
|
||||
export QTDIR5=
|
||||
export QTDIR=
|
||||
export QT_PLUGIN_PATH=
|
||||
export KDEINIT5_LIBRARY_PATH=
|
||||
unset QT4DOCDIR QT5DOCDIR QTDIR5 QTDIR QT_PLUGIN_PATH KDEINIT5_LIBRARY_PATH
|
||||
|
||||
PATH=
|
||||
KDEINIT5_LIBRARY_PATH=
|
||||
QT_PLUGIN_PATH=
|
||||
source "${GUIX_PROFILE}/etc/profile"
|
||||
|
||||
#export QT_LOGGING_RULES="*.debug=true"
|
||||
|
||||
#export XDG_RUNTIME_DIR=$HOME/.run
|
||||
#mkdir -p "$XDG_RUNTIME_DIR"
|
||||
#chmod 0700 "$XDG_RUNTIME_DIR"
|
||||
|
||||
echo PATH=$PATH
|
||||
echo XDG_DATA_DIRS=$XDG_DATA_DIRS
|
||||
echo XDG_CONFIG_DIRS=$XDG_CONFIG_DIRS
|
||||
echo QT_PLUGIN_PATH=$QT_PLUGIN_PATH
|
||||
echo KDEINIT5_LIBRARY_PATH=$KDEINIT5_LIBRARY_PATH
|
||||
echo QML2_IMPORT_PATH=$QML2_IMPORT_PATH
|
||||
|
||||
# DISPLAY must be *first* argument to xinit after `--`, otherwise
|
||||
# xinit will assume display :0
|
||||
# Use the foreign system's xinit
|
||||
# This will start the X server as defined in .xserverrc and
|
||||
# connect the clients defined in .xinitrc to it.
|
||||
# Use these scripts (instead of passing commands here) to be more flexible
|
||||
# in adjusting environments
|
||||
/usr/bin/xinit -- :1
|
||||
|
||||
#pkill -9 kwin_x11 baloo
|
38
99-playground/01-setup.sh
Executable file
38
99-playground/01-setup.sh
Executable file
|
@ -0,0 +1,38 @@
|
|||
#!/bin/bash
|
||||
|
||||
if [ "$1" != "--in-environment" ] ; then
|
||||
|
||||
export HOME=$(realpath $(dirname "$0"))
|
||||
|
||||
exec ../pre-inst-env guix environment -m ~/desktop-manifest.scm \
|
||||
--pure \
|
||||
-- sh $0 --in-environment "$@"
|
||||
exit
|
||||
fi
|
||||
|
||||
# in environment
|
||||
shift # remove --in-environment
|
||||
|
||||
#export QT_LOGGING_RULES="*.debug=true"
|
||||
|
||||
#export XDG_RUNTIME_DIR=$HOME/.run
|
||||
#mkdir -p "$XDG_RUNTIME_DIR"
|
||||
#chmod 0700 "$XDG_RUNTIME_DIR"
|
||||
|
||||
echo PATH=$PATH
|
||||
echo XDG_DATA_DIRS=$XDG_DATA_DIRS
|
||||
echo XDG_CONFIG_DIRS=$XDG_CONFIG_DIRS
|
||||
echo QT_PLUGIN_PATH=$QT_PLUGIN_PATH
|
||||
echo KDEINIT5_LIBRARY_PATH=$KDEINIT5_LIBRARY_PATH
|
||||
echo QML2_IMPORT_PATH=$QML2_IMPORT_PATH
|
||||
|
||||
# DISPLAY must be *first* argument to xinit after `--`, otherwise
|
||||
# xinit will assume display :0
|
||||
# Use the foreign system's xinit
|
||||
# This will start the X server as defined in .xserverrc and
|
||||
# connect the clients defined in .xinitrc to it.
|
||||
# Use these scripts (instead of passing commands here) to be more flexible
|
||||
# in adjusting environments
|
||||
/usr/bin/xinit -- :1
|
||||
|
||||
#pkill -9 kwin_x11 baloo
|
116
99-playground/desktop-manifest.scm
Normal file
116
99-playground/desktop-manifest.scm
Normal file
|
@ -0,0 +1,116 @@
|
|||
;; For comparism from
|
||||
;; https://guix.gnu.org/de/blog/2019/running-a-guix-xfce-desktop-on-centos-7/
|
||||
;;
|
||||
;; (specifications->manifest
|
||||
;; '("xfce" "xfce4-session" "xfconf" "xfce4-battery-plugin"
|
||||
;; "pulseaudio" "xfce4-volumed-pulse" "xfce4-notifyd"
|
||||
;; ;; Helpful graphical programs.
|
||||
;; "mousepad" "orage"
|
||||
;; ;; System configuration utilities.
|
||||
;; "xbacklight" "pavucontrol" "stow"
|
||||
;; ;; For HTTPS access.
|
||||
;; "nss-certs"
|
||||
;; ;; These utilities are provided by the host, but we want the Guix versions
|
||||
;; ;; because they are likely better integrated and up to date.
|
||||
;; "fontconfig" "bash-completion" "gnupg" "man-db" "git"))
|
||||
|
||||
|
||||
;; I tried several combinations of packages to get Plasma Desktop running.
|
||||
;; Asking at the KDE "distribution" mailinglist did not give an reasonable
|
||||
;; answer. If you have contact to the Plasma core team, maybe someone there
|
||||
;; can answer what is required to run the Plasma Desktop.
|
||||
;;
|
||||
;; In ../11-TODO-Plasma-Desktop-Service.txt you can find a collection of what
|
||||
;; "task-plasma-desktop" or "task-plasma-desktop-minimal" meta-packages install
|
||||
;; in some other distributions.
|
||||
;;
|
||||
;; Good Luck!
|
||||
|
||||
|
||||
(specifications->manifest
|
||||
'("plasma-desktop"
|
||||
"plasma-workspace" ;; propagate?
|
||||
"qtbase" ;; to not search Qt plugins in the host OS
|
||||
|
||||
;;-- theme/visual dependencies
|
||||
"breeze" ; default theme
|
||||
"breeze-icons" ;; required: default Icon theme - propagate?
|
||||
"kirigami" "oxygen"
|
||||
"qtquickcontrols2" ;; required by plasma-workspace and plasme-desktop
|
||||
"qqc2-desktop-style" "font-liberation"
|
||||
|
||||
;; adding qtquickcontrols2 results in:
|
||||
;;;KCrash: Attempting to start /gnu/store/lif5pqmd3rk2cda9293gl386mp32zhi7-plasma-workspace-5.18.5/bin/.plasmashell-real
|
||||
;;;KCrash: Application '.plasmashell-real' crashing...
|
||||
|
||||
;;-- shell/QML dependencies
|
||||
"kde-cli-tools" "kded" "kwin" "setxkbmap"
|
||||
"qtgraphicaleffects" ;; required by plasma-workspace
|
||||
|
||||
;; --- addefd by hartmut
|
||||
;; ksplashqml requires: qtsvg qtimageformats kimageformats
|
||||
"qtsvg" "qtimageformats" "kimageformats"
|
||||
|
||||
"plasma-workspace-wallpapers" ;; dpendency of workspace already?
|
||||
"plasma-integration" ;; - KDEPlasmaPlatformTheme.so - propagte with breeze?
|
||||
|
||||
"kinit" ;; propagate with plasma-workspace - or hardcode path?!
|
||||
"kglobalaccel"
|
||||
;; kapplymousetheme
|
||||
"libkscreen" ;; actually required?
|
||||
"kscreen" ;;- branch kde-plasma - actually required?
|
||||
"kservice" ;;- Tier 3 solution for working with .desktop files. - actually required?
|
||||
|
||||
;; ---------- up to here: mini-desktop -----------------------
|
||||
|
||||
;;
|
||||
"kactivities"
|
||||
"kactivitymanagerd" ;; - branch kde-plasma System service to manage user's activities
|
||||
"kdeplasma-addons" ;; - branch kde-plasma
|
||||
;; "khotkeys" ;; - branch kde-plasma - editor komponent??
|
||||
;; "kparts"
|
||||
"krunner"
|
||||
|
||||
"kitemviews" ;; irgendwas von da oben braucht das, ist baer nicht verbunden
|
||||
|
||||
;;"baloo" "milou" - file indexer and search plasmoid
|
||||
|
||||
;; ;; ------------------
|
||||
;; ;; This was an attempt to install *all* KDE framework and Plasma packages
|
||||
|
||||
;; "kcoreaddons" "ki18n" "karchive" "kconfig" "kdoctools"
|
||||
;; "kwidgetsaddons" "kwindowsystem"
|
||||
;; "polkit-qt"
|
||||
;; "kcodecs" "kauth" "kcrash" "kdbusaddons"
|
||||
;; "kguiaddons" "kconfigwidgets" "kitemviews" "kiconthemes" "kcompletion"
|
||||
;; "kservice" "sonnet"
|
||||
;; "attica" "breeze-icons" "kglobalaccel" "ktextwidgets" "knotifications"
|
||||
;; "kxmlgui"
|
||||
;; "kbookmarks" "kjobwidgets" "kwallet" "solid" "kio" "taglib" "kirigami"
|
||||
;; "kpackage" "kparts" "kinit"
|
||||
;; "kactivities" "kdeclarative" "kidletime" "kunitconversion"
|
||||
;; "ksyntaxhighlighting"
|
||||
;; ;;"plasma-wayland-protocols"
|
||||
;; "kdnssd" "kitemmodels" "ktexteditor" "kwayland" "threadweaver"
|
||||
;; "kded" "kdesignerplugin" "kemoticons" "kfilemetadata" "knewstuff" "kpty"
|
||||
;; "plasma-framework"
|
||||
;; "baloo" "kde-frameworkintegration" "kactivities-stats" "kcmutils" "kdesu"
|
||||
;; "kholidays"
|
||||
;; "kimageformats" "knotifyconfig" "kpeople" "kplotting" "krunner"
|
||||
;; "kxmlrpcclient" "prison"
|
||||
;; "purpose" "qqc2-desktop-style" "syndication" "kjs" "kdecoration"
|
||||
;; "breeze" "libksysguard"
|
||||
;; "kuserfeedback" "kscreenlocker"
|
||||
;; ;;"kwayland-integration" "kwayland-server"
|
||||
;; "libkscreen"
|
||||
;; "khelpcenter" "kjsembed"
|
||||
;; ;;"kquickcharts"
|
||||
;; "kactivitymanagerd" "kwin" "milou"
|
||||
;; ;;"kio-extras" <--- not yet packaged
|
||||
;; "qca"
|
||||
;; "pulseaudio-qt" "ksysguard" "powerdevil" "systemsettings"
|
||||
;; ;;"kaccounts-integration" " kaccounts-providers" "ksysguardqml" ; not yet packaged
|
||||
;; "bluedevil" "discover" "kdeplasma-addons"
|
||||
;; "khotkeys"
|
||||
;; ;;"kinfocenter" -- application
|
||||
))
|
119
99-playground/unstrace.py
Normal file
119
99-playground/unstrace.py
Normal file
|
@ -0,0 +1,119 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import re, os
|
||||
|
||||
def split_args(args):
|
||||
a = args.split('"', 1)[1]
|
||||
a = a.split('"')[0]
|
||||
return a
|
||||
|
||||
|
||||
cmd_map = {
|
||||
"statx": "stat",
|
||||
"lstat": "stat",
|
||||
"openat": "open",
|
||||
"access": "stat",
|
||||
}
|
||||
|
||||
seen = set()
|
||||
|
||||
def stage1(cmds):
|
||||
last_cmd, last_path, last_rc = None, None, None
|
||||
for cmd, path, rc in cmds:
|
||||
if (cmd, path, rc) in seen:
|
||||
continue
|
||||
seen.add((cmd, path, rc))
|
||||
if (last_cmd == "open" and last_rc == False and
|
||||
cmd == "stat" and rc == False and
|
||||
os.path.dirname(last_path) == path):
|
||||
# stat on dir after trying to access file
|
||||
last_path = path
|
||||
continue
|
||||
if rc == last_rc:
|
||||
# unchanged status
|
||||
if path == last_path:
|
||||
last_cmd, last_path, last_rc = cmd, path, rc
|
||||
elif path.startswith(path):
|
||||
last_path = path
|
||||
last_cmd, last_path, last_rc = cmd, path, rc
|
||||
else:
|
||||
last_cmd, last_path, last_rc = cmd, path, rc
|
||||
yield(cmd, path, rc)
|
||||
else:
|
||||
last_cmd, last_path, last_rc = cmd, path, rc
|
||||
yield(cmd, path, rc)
|
||||
|
||||
LIB_SEARCH = 1
|
||||
PLUGIN_SEARCH = 2
|
||||
|
||||
def stage2(cmds):
|
||||
last_cmd, last_path, last_rc = None, None, None
|
||||
state = None
|
||||
for cmd, path, rc in cmds:
|
||||
#breakpoint()
|
||||
if (state == LIB_SEARCH):
|
||||
if rc == True:
|
||||
# found
|
||||
searched_dirs = []
|
||||
yield cmd, path, rc
|
||||
continue
|
||||
elif os.path.basename(path) == last_path:
|
||||
# still seeking
|
||||
searched_dirs.append(os.path.dirname(path))
|
||||
continue
|
||||
else:
|
||||
#breakpoint()
|
||||
# next library
|
||||
for p in searched_dirs:
|
||||
yield cmd, last_path + " " + p, False
|
||||
searched_dirs = []
|
||||
|
||||
if (cmd == "open" and rc == False and
|
||||
re.search(r'\.so(\.[0-9]+)?', path)):
|
||||
# library, access failed here
|
||||
state = LIB_SEARCH
|
||||
searched_dirs = [os.path.dirname(path)]
|
||||
last_path = os.path.basename(path)
|
||||
else:
|
||||
yield cmd, path, rc
|
||||
|
||||
|
||||
def strip_store_names(cmds):
|
||||
import pathlib
|
||||
HOME = str(pathlib.Path.home())
|
||||
PWD = str(pathlib.Path.cwd())
|
||||
pwd_first = len(PWD) > len(HOME)
|
||||
for cmd, path, result in cmds:
|
||||
if path.startswith("/gnu/store/"):
|
||||
path = "/gnu/store/…" + path[43:]
|
||||
elif pwd_first and path.startswith(PWD):
|
||||
path = "$PWD" + path[len(PWD):]
|
||||
elif path.startswith(HOME):
|
||||
path = "~" + path[len(HOME):]
|
||||
elif path.startswith(PWD):
|
||||
path = "$PWD" + path[len(PWD):]
|
||||
yield cmd, path, result
|
||||
|
||||
|
||||
def main(filename):
|
||||
with open(filename) as fh:
|
||||
lines = fh.readlines()
|
||||
matches = (re.match(r"^(\w+)\(([^)]+)\) = (\S+).*", l)
|
||||
for l in lines)
|
||||
cmds = (m.groups() for m in matches if m)
|
||||
cmds = ((cmd_map.get(cmd, cmd), split_args(path), int(result) >= 0)
|
||||
for cmd, path, result in cmds
|
||||
if not "/share/locale/" in path)
|
||||
cmds = strip_store_names(cmds)
|
||||
cmds = stage1(cmds)
|
||||
cmds = stage2(cmds)
|
||||
for cmd, path, rc in cmds:
|
||||
print(cmd, path, "" if rc else "***")
|
||||
|
||||
|
||||
|
||||
import argparse
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("filename")
|
||||
args = parser.parse_args()
|
||||
main(args.filename)
|
54
99-playground/xorg.conf
Normal file
54
99-playground/xorg.conf
Normal file
|
@ -0,0 +1,54 @@
|
|||
#################
|
||||
#################
|
||||
################# This file is unused in the Plase desktop
|
||||
################# test playground.
|
||||
#################
|
||||
#################
|
||||
|
||||
|
||||
|
||||
# **********************************************************************
|
||||
# Refer to the xorg.conf man page for details about the format of
|
||||
# this file.
|
||||
# **********************************************************************
|
||||
|
||||
Section "ServerFlags"
|
||||
#DontZoom # disable <Ctrl><Alt><KP_+>/<KP_-> (resolution switching)
|
||||
#Option "DontZap" "False" # disable <Ctrl><Alt><BS> (server abort)
|
||||
AllowMouseOpenFail # allows the server to start up even if the mouse does not work
|
||||
EndSection
|
||||
|
||||
Section "Module"
|
||||
#Load "v4l" # Video for Linux
|
||||
EndSection
|
||||
|
||||
Section "Monitor"
|
||||
Identifier "monitor1"
|
||||
VendorName "Plug'n Play"
|
||||
|
||||
# TV fullscreen mode or DVD fullscreen output.
|
||||
# 768x576 @ 79 Hz, 50 kHz hsync
|
||||
ModeLine "768x576" 50.00 768 832 846 1000 576 590 595 630
|
||||
|
||||
# 768x576 @ 100 Hz, 61.6 kHz hsync
|
||||
ModeLine "768x576" 63.07 768 800 960 1024 576 578 590 616
|
||||
EndSection
|
||||
|
||||
Section "Device"
|
||||
Identifier "device1"
|
||||
VendorName "Intel Corporation"
|
||||
BoardName "Intel 810 and later"
|
||||
#Driver "intel"
|
||||
Option "DPMS"
|
||||
EndSection
|
||||
|
||||
Section "Screen"
|
||||
Identifier "screen1"
|
||||
Device "device1"
|
||||
Monitor "monitor1"
|
||||
EndSection
|
||||
|
||||
Section "ServerLayout"
|
||||
Identifier "layout1"
|
||||
Screen "screen1"
|
||||
EndSection
|
Loading…
Reference in a new issue