Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2018-04-04 23:27:48

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Przekierowanie zawartości pliku .xsession-errors do urządzenia FIFO

Próbuję sobie przekierować komunikaty z pliku ~/.xsession-errors do urządzenia FIFO. Chodzi o to, że raz, ten plik mi się rozrasta po wgraniu SDDM (chyba na lightdm był czyszczony co restart graficznej sesji), a dwa, chciałbym sobie te logi wrzucić na konsolę na pulpit, gdzie mam również wszystkie pozostałe logi, również przy zastosowaniu urządzeń FIFO.

W pliku /etc/X11/Xsession jest coś na wzór:

Kod:

ERRFILE=$HOME/.xsession-errors
...
exec >>"$ERRFILE" 2>&1

Próbowałem sobie dodać coś w stylu:

Kod:

ERRFILE=/dev/log-xsession-errors
exec >>"$ERRFILE" 2>&1

ale to wiesza mi start Openboxa (bez znaczenia czy dodam sobie te linijki w pliku /etc/X11/Xsession czy w autostarcie Openbox'a).

Jak sobie wrzuciłem oba te powyższe wpisy bezpośrednio na konsolę, to tylko ten pierwszy jest uruchamiany w tle, ten drugi zaś wisi w terminalu i dlatego sesja nie chce wystartować.

Próbowałem dodać sobie zatem & na końcu, czyli:

Kod:

ERRFILE=/dev/log-xsession-errors
exec >>"$ERRFILE" 2>&1 &

I w tym przypadku sesja startuje ale logów w urządzeniu brak. Da radę to jakoś ogarnąć czy nie bardzo? xD

Offline

 

#2  2018-04-05 03:56:08

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Przekierowanie zawartości pliku .xsession-errors do urządzenia FIFO

Dobra udało się ale nie wiem czy nie ma prostszej metody. xD

Generalnie, to chciałem sobie stworzyć urządzenie FIFO za pomocą tego mechanizmu systemd-tmpfiles, bo tak sobie to wcześniej ogarnąłem z rsyslog. Ale w tym przypadku to nie zadziała, bo to wieszanie terminala czy sesji jest uzależnione od odczytu tego urządzenia FIFO — jak jakiś inny proces, np. cat, odczyta to urządzenie, to wszystko już pójdzie z płatka ale problemem jest odpalenie czegokolwiek w skrypcie po wywołaniu [b]exec >>"$ERRFILE" 2>&1 [/b]. xD Dlatego te urządzenia FIFO trzeba stworzyć inaczej — przez mechanizm socket'ów (też tych z systemd). No i napisałem sobie dwa pliki:

Kod:

# cat /etc/systemd/system/log-xsession-errors.socket
[Unit]
Description=log-xsession-errors socket
DefaultDependencies=no
Before=sockets.target
PartOf=log-xsession-errors.service

[Socket]
ListenFIFO=/dev/log-xsession-errors
SocketMode=0600
SocketUser=morfik
SocketGroup=morfik
RemoveOnStop=true
PipeSize=1M

[Install]
WantedBy=sockets.target

oraz

Kod:

# cat /etc/systemd/system/log-xsession-errors.service
[Unit]
Description=log-xsession-errors service
DefaultDependencies=no

[Service]
ExecStart=/bin/true
RemainAfterExit=yes

[Install]
Also=log-xsession-errors.socket

W zasadzie ten plik .socket określa sobie urządzenie FIFO i tworzy je praktycznie na starcie systemu (szybciej chyba nawet niż ten mechanizm tworzenia plików tymczasowych). Uprawnienia są nadawane, więc jest tak jak powinno być. Z kolei ten .socket wymaga usługi do działania, to mu stworzyłem najprostszą jaką można, która zawsze zwraca TRUE i nic innego nie robi. xD A RemainAfterExit jest po to by ta usługa nie była wywoływana wiele razy. Chodzi generalnie o to, że jeśli wrzucę to poniższe

Kod:

ERRFILE=/dev/log-xsession-errors
exec >>"$ERRFILE" 2>&1

do skryptu Xsession albo do autostaru Openbox'a, to każda wiadomość przesłana na urządzenie FIFO będzie próbowała odpalić tę usługę, a że ona bardzo szybko się zakończy, to po chwili uderzy w limit uruchomień w konkretnej jednostce czasu. A tak to się ona uruchomi i system oznaczy ją jako działającą i nie będzie musiał odpalać jej ponownie.

Te powyższe dwie linijki dodałem sobie do /etc/X11/Xsession , bo chcę mieć wszystkie komunikaty sesji a nie tylko samego autostartu Openboxa. Trzeba też było wykomentować pewne rzeczy i całość wygląda to mniej więcej tak:

Kod:

...
#ERRFILE=$HOME/.xsession-errors
#
## attempt to create an error file; abort if we cannot
#if (umask 077 && touch "$ERRFILE") 2> /dev/null && [ -w "$ERRFILE" ] &&
#  [ ! -L "$ERRFILE" ]; then
#  chmod 600 "$ERRFILE"
#elif ERRFILE=$(tempfile 2> /dev/null); then
#  if ! ln -sf "$ERRFILE" "${TMPDIR:=/tmp}/xsession-$USER"; then
#    message "warning: unable to symlink \"$TMPDIR/xsession-$USER\" to" \
#             "\"$ERRFILE\"; look for session log/errors in" \
#             "\"$TMPDIR/xsession-$USER\"."
#  fi
#else
#  errormsg "unable to create X session log/error file; aborting."
#fi
#
#exec >>"$ERRFILE" 2>&1

export ERRFILE=/dev/log-xsession-errors
exec >>"$ERRFILE" 2>&1
...

No i moja konsola teraz ma dodatkowego tab'a a w nim komunikaty sesji Xserver'a, co wygląda mniej więcej tak:

[img]https://i.imgur.com/aRnSpWa.png[/img]

Jak ktoś ma inny pomysł jak ogarnąć te urządzenia FIFO i logi z sesji, to jestem ciekaw. xD

Ostatnio edytowany przez morfik (2018-04-06 14:34:00)

Offline

 

#3  2018-04-05 08:52:39

  urbinek - Użytkownik

urbinek
Użytkownik
Skąd: Sosnowiec
Zarejestrowany: 2009-10-01
Serwis

Re: Przekierowanie zawartości pliku .xsession-errors do urządzenia FIFO

Ja się poddałem z analizą ~/.xsession-errors :)

Zrobiłem link, który kończy się w ramdysku

Kod:

/home/urbinek/.xsession-errors -> /tmp/xsession-errors

Ostatnio edytowany przez urbinek (2018-04-05 09:58:53)


A w wolnym czasie, robię noże :)
[img]http://nginx.urbinek.eu/_photos/signature.png[/img]

Offline

 

#4  2018-04-05 11:34:47

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Przekierowanie zawartości pliku .xsession-errors do urządzenia FIFO

Ja tam lubię ten plik, sporo rzeczy można za jego sprawą poprawić, choć w ogóle tam nie zaglądałem. xD U mnie teraz też te logi są trzymane w RAM, choć może samo urządzenie FIFO ma niewielką kolejkę ale w terminalu mam kolo 10K linii historii, i koło 1 MiB chyba te logi max będą u mnie zajmować, no i są czyszczone z każdym restartem graficznej sesji.

Offline

 

#5  2018-04-05 19:28:42

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Przekierowanie zawartości pliku .xsession-errors do urządzenia FIFO

A jak zrobisz na chama linka np /dev/mojezajebistefifo do ~/.xsession_eroors to nie zapisuje błędów?


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#6  2018-04-05 22:13:52

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Przekierowanie zawartości pliku .xsession-errors do urządzenia FIFO

Nie działa. Nawet jak się cat'a zapuści na TTY na to urządzenie, to jak tylko się odpali sesję graficzną, to cat dostaje po łbie ze kodem wyjścia 130, no i oczywiście nie ma żadnych komunikatów. Jak się ponownie podepnie cat'em pod urządzenie, to i tak żadnych wiadomości nie ma. 

Co ciekawe, na Openbox te sokety działają i bez problemu mi tutaj wszystko się odpala ale KDE/Plasma5 z nimi się już nie chce odpalić, a przecie ten sam SDDM startuje X. xD

Ostatnio edytowany przez morfik (2018-04-05 22:20:19)

Offline

 

#7  2018-04-06 13:31:44

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Przekierowanie zawartości pliku .xsession-errors do urządzenia FIFO

Już wiem czemu KDE/Plasma5 ma problemy z wystartowaniem -- to urządzenie FIFO ma za mały bufor. Po prostu na Openbox jest sporo mniej wiadomości, które trzeba podczas startu systemu przesłać do urządzenia FIFO, podczas gdy na KDE/Plasma5 jest to  ~100 KiB (póki co), a wiesza się przy 92-93 KiB (~1600 linii). Na szczęście ten parametr też można skonfigurować.

Kod:

[Socket]
..
PipeSize=1M

I już startuje wszystko ładnie. xD

Pytanie tylko, jaki rozmiar ma kolejka FIFO, gdy nie konfiguruje się tego urządzenia przez systemd? No i też jak zwiększyć jej rozmiar? Bo pewnie to by rozwiązało problem. Choć jeszcze muszę popatrzeć jak to wygląda z gołymi urządzeniami FIFO i może da radę coś wymyśleć. xD

Offline

 

#8  2018-04-06 18:56:58

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Przekierowanie zawartości pliku .xsession-errors do urządzenia FIFO

Wygląda jednak na to, że tego się nie da zrobić w taki sposób jak chciałem, przynajmniej jeśli chodzi o sposób bez systemd. Generalnie to te urządzenia FIFO trzeba otworzyć przed ich zapisem, inaczej nie chcą działać. xD Systemd je otwiera sobie i później buforuje komunikaty aż jakiś inny proces je podbierze sobie.

EDIT:

Przy okazji się wyjaśniło jakim cudem mi ten rsyslog działa z FIFO bez problemu, bo jak patrzyłem pod TTY, czy jest otwierane urządzenie FIFO, gdy np. router chce mi wysłać z sieci wiadomości na kompa, i się okazało, że nie ale po za logowaniu się do systemu, to wiadomości na konsolę trafiają, no tylko podobnie jak ten mechanizm soketów w systemd, rsyslog też ma swój bufor i jak tylko się da "cat" na urządzenie FIFO, to rsyslog przesyła te wiadomości od razu, czyli tak samo działa jak systemd ale wymagane jest ręczne zainicjowanie odczytania urządzenia. xD
https://www.rsyslog.com/doc/rsconf1_mainmsgqueuesize.html

Ostatnio edytowany przez morfik (2018-04-06 19:17:36)

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)

[ Generated in 0.008 seconds, 11 queries executed ]

Informacje debugowania

Time (s) Query
0.00012 SET CHARSET latin2
0.00005 SET NAMES latin2
0.00096 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='18.226.200.93' WHERE u.id=1
0.00059 REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '18.226.200.93', 1732185357)
0.00044 SELECT * FROM punbb_online WHERE logged<1732185057
0.00046 SELECT topic_id FROM punbb_posts WHERE id=318952
0.00006 SELECT id FROM punbb_posts WHERE topic_id=30401 ORDER BY posted
0.00057 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=30401 AND t.moved_to IS NULL
0.00006 SELECT search_for, replace_with FROM punbb_censoring
0.00156 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=30401 ORDER BY p.id LIMIT 0,25
0.00113 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=30401
Total query time: 0.006 s