Portál AbcLinuxu, 28. října 2025 16:26
systemctl status bumblebeed
● bumblebeed.service - Bumblebee C Daemon
Loaded: loaded (/usr/lib/systemd/system/bumblebeed.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2020-07-22 10:33:32 CEST; 1 day 13h ago
Main PID: 656 (bumblebeed)
Tasks: 1 (limit: 18816)
Memory: 17.2M
CGroup: /system.slice/bumblebeed.service
└─656 /usr/bin/bumblebeed --use-syslog
Ta služba si spouští další proces "Xorg :8 -config...", takže výpis pak vypadá takto:
systemctl status bumblebeed
● bumblebeed.service - Bumblebee C Daemon
Loaded: loaded (/usr/lib/systemd/system/bumblebeed.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2020-07-22 10:33:32 CEST; 1 day 11h ago
Main PID: 656 (bumblebeed)
Tasks: 2 (limit: 18816)
Memory: 30.6M
CGroup: /system.slice/bumblebeed.service
├─ 656 /usr/bin/bumblebeed --use-syslog
└─52090 /usr/lib/Xorg :8 -config ...
Já bych potřeboval spustit svůj bash script ve chvíli kdy si služba bumblebeed spustí proces "Xorg :8 -config...". Existuje nějaká taková možnost v systemd? Vím, že existuje "Before", "After", ale to v tomto případě asi nepomůže.
Řešení dotazu:
Ten hlavní proces bumblebeed (nastartovaný systemd) zůstává pořád běžet?Ano, zůstává pořád běžet. Výpis služby vypadá takto:
systemctl cat bumblebeed # /usr/lib/systemd/system/bumblebeed.service [Unit] Description=Bumblebee C Daemon [Service] Type=simple ExecStart=/usr/bin/bumblebeed --use-syslog Restart=always RestartSec=60 [Install] WantedBy=multi-user.target
Potřebuji tudíž ihned po spuštění nové instance Xorg :8 spustit můj script, který na něm vypne klávesnci a myš.To vypadá jako rovnák na ohejbák. Nešlo by zařídit, aby se tam ta klávesnice a myš vůbec nepřipojila?
# If you connect a display to one of the outputs wired to the Nvidia card, you
# have to comment this whole file. Note that you can leave it commented even
# without currently attached monitor, at the cost of greater optirun startup
# time.
Section "InputClass"
Identifier "IgnoreDevices"
MatchDevicePath "/dev/input/event*|/dev/input/mouse*|/dev/input/js*|/dev/input/mice*"
Option "Ignore" "true"
EndSection
Jenomže, pak nefunguje klávesnice a myš na "Xorg :8" vůbec a nevím o tom, že by šla nějak zapnout bez resetu Xka. Já potřebuji přehazovat jednu klávesnici a jednu myš mezi oběma Xkama. Script na přepínání už mám hotový (řešil jsem v tom vedlejším vlákně). Jedině, že by existoval nějaký parametr při spuštění Xorg, něco jako "/usr/lib/Xorg :8 -disable input ...", ale jak jsem googlil, tak jsem nic takového nenašel. Všichni vypínají klávesnice, myši a touchpady pomocí xinput. Takže z toho mně vyplývá, že jediná varianta je:
- nejdřív musím zapnout "Xorg :8",
- potom pomocí xinput vypnout klávesnici a myš.
Myslel jsem, že jsem se spletl a ty znáš nějaké řešení.
Jde o to, že když vytvoříš ten conf soubor co je i v tom tvém odkazu, tak tím řekneš Xku, aby vůbec nenačetl vstupní zařízení. Takže výpis ukazuje toto:
DISPLAY=:8 xinput --list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
Tudíž tam není načtena žádná klávesnice ani myš a proto nemohu příkazem xinput --enable žádné zařízení zapnout.
startx ale přímo příkaz "/usr/lib/Xorg :8 ..." - viz níže v diskuzi.
DE na "Xorg :8" nespouštím. Spouštím tam jen windows managera (xfwm4) a daný program si spustím z "Xorg :0". Jako trochu jsem uvažoval, že na :8 spustím DE, ale:
za a) to teď nepotřebuji
za b) XFCE mi běží na "Xorg :0" a nejsem si jistý jestli je správné (bezpečné) spouštět XFCE ve druhé instanci na "Xorg :8" pod stejným uživatelem. Znamenalo by to, že obě instance budou používat stejné konfiguráky a nerad bych si XFCE rozhodil. Mohl bych použít jiný DE, ale zase mít 2 různé prostředí mně nepřijde moc přívětivé.
startx nebo xinit nebo si je spouští display manager. Samotný proces /usr/lib/Xorg je nenačítá.
xinitrc přidat něco jako
PROCS=$(ps -aux);
TEST=$(echo -n "$PROCS" | grep "Xorg :8");
if [ -n "$TEST" ]; then
transfer_input.sh
fi
ale je to taky docela hack.
$HOME/.xinitrc i do /etc/X11/xinit/xinitrc. Nenačítá se xinitrc náhodou jen když se Xko startuje příkazem startx? Bumblebee si dané Xko spouští napřímo, takto:
/usr/lib/Xorg :8 -config /etc/bumblebee/xorg.conf.nvidia \ -configdir /etc/bumblebee/xorg.conf.d -sharevts -nolisten tcp \ -noreset -verbose 3 -isolateDevice PCI:01:00:0 \ -modulepath /usr/lib/nvidia/xorg,/usr/lib/xorg/modules
To jsem psal o komentáře výše, že jsem "Zkoušel jsem dát do $HOME/.xinitrc i do /etc/X11/xinit/xinitrc."
ExecStartPost pustít skript, který počká, dokud druhý Xorg nenastartuje a pak překonfiguruje vstupní zařízení.
ps aux | grep "Xorg :8", tak to mi moc nepomůže, protože služba bumblebeed.service se spouští hned při startu PC takže to bych ten script, který bude ve smyčce kontrolovat mohl zrovna spustit po nabootování a vyšlo by to nastejno.
Asi to udělám tak, že vytvořím wraper "muj_optirun.sh" o kterém jsem psal navrchu téhle diskuze. Stejně potřebuji při prvním spuštění "Xorg :8" spustit i windows manager, tak to dám všechno do toho wraperu. Zdá se mi to asi nejelegantnější řešení pokud to pomocí systemd nejde.
<fuj>optirun taky dělá že bumblebeed votevře socket byse toho možná dalo využít :O :O
ss | grep bum u_str ESTAB 0 0 /var/run/bumblebee.socket
</fuj>
[Unit] ConditionPathExists=/etc/sysconfig/cloudformationale mělo by to ověřovat jen při startu služby a přidávat k tomu timery bych dosáhl stejného efektu jako kdyby to kontroloval bash script ve smyčce. Ale existuje Path unit , která interně využívá inotify. Tohle se mi nezdá být až tak fuj. Nebo je na inotify (Path_unit) něco špatného?
/var/run/bumblebee.socket nebo ps aux | grep "Xorg :8", tak to vyjde nastejno.
/tmp/.X11-unix/X8. Jo to už *.path (inotify) zachytí a funguje to. Pokud se na jméno tohoto souboru dá spolehnout, tak takhle by to šlo.
$ cat ~/.config/systemd/user/bumblebee.path
[Unit] Description=Monitors whether /tmp/.X11-unix/X8 file (socket) exists. [Path] PathExists=/tmp/.X11-unix/X8 Unit=bumblebee-disable-kbd-mouse.service [Install] WantedBy=multi-user.target
$ cat ~/.config/systemd/user/bumblebee-disable-keyb-mouse.service
[Unit] Description=Executes script when a file (/tmp/.X11-unix/X8) defined in the bumblebee.path file exists. [Service] Type=simple ExecStartPre=/bin/sleep 1 ExecStart=/path/to/script/disable-kbd-mouse-xorg-8.sh [Install] WantedBy=multi-user.target
$ systemctl --user enable bumblebee.path
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.