מציג פוסטים ממוינים לפי מידת הרלוונטיות לשאילתה GDK_BACKEND. מיין לפי תאריך הצג את כל הפוסטים
מציג פוסטים ממוינים לפי מידת הרלוונטיות לשאילתה GDK_BACKEND. מיין לפי תאריך הצג את כל הפוסטים

יום שבת, דצמבר 02, 2023

wayland rant , X forwarding and workaround for ERROR: ../src/keyboard.c: 400: Failed to look up keyboard symbol: hebrew_shin

כן למרות שאני מאוד לא אוהב את המעבר למערכת המסורבלת בשם wayland,  שחסר בה יותר מדי פיטצ'רים או יכולת עבודה כמו שהייתה לנו עם X ואני מדבר פה על x11 או xorg ולא השם החדש של טוויטר.
 
גם אני מנסה לעבוד איתה כי אין לי ברירה אחרת.
 
אני גם מבין מצויין שהסיבות העיקריות  של מעבר לwayland מ X ישאירו אותנו ללא חופש וללא ביטחון. אחת הסיבות העיקריות לעבור מxorg לwayland היא ההבטחה למימוש אמצעי אבטחה טובים יותר , תמורת המחיר הקטן של החופש להמשיך להשתמש באפשרויות הקיימות, שלא ממושו או שלא ימומשו בכלים חיצונים, "כי לא צריך" כי מישהוא אחר כבר ישכתב את הקוד ועוד כל מני תירוצים.
 
ובדיוק כמו שרצחו את המימוש שהיה ל XDCMP שאיפשר לנו להתחבר בחלק  ממנהלי הלוגין, לאט לאט אבל בטוח, יהרגו לנו את האפשרות להעביר חלונות וקול דרך הרשת או להקליט חלונות כמו שצריך, ובגדול לעשות את כל הדברים המובנים מעליו בשלושים השנה האחרונות , תמורות האפשרות להשתמש במערכת חדשה, שהיא בפיתוח כרגע בשונה מX שאין שם כמעט שום פיטצ'רים חדשים שנכנסים למערכת.

אז הנה יש לי צורך די פשוט , לשתף תוכן ולהתחבר אליו מרחוק, נו , אתם מכירים את זה בטוח , מה שהיינו פשוט עושים או עם ssh -X או  במקרה הגרוע ביותר להפעיל vnc ולצפות בתוכן.

נניח עבור chatty  בשביל להעביר את התוכן ע"ג רשת אני צריך להפעיל :

GDK_BACKEND=x11 chatty
המנוע  במקרה הזה או GDK , אבל אם משתמשים במשהוא צריך לחפש איך להבטיח שזה יעבוד.
יש לנו SDL בדרך ? יופי הפרטמר הוא SDL_VIDEODRIVER=x11,  סביבות אחרות ? לכו תחשפו מה יעבוד הפתרון שמצאתי היה פשוט לעבור מ wayland בחזרה ל xorg במספר תוכנות.
 
וכמובן לדעת לבחור תמיד במנוע הנכון עבור על תוכנה, נכון שכיף לנו להשתמש ב wayland ?נכון ? זה פתרון מדהים שדברים פשוט יעבדו.
 
בגדול בשביל להעביר מידע בין wayland ל wayland , המציאו את הכלי הנחמד שנקרא waypipe, שהוא עשה קולות של עובד עד שעשה לי ארטיפקטים הזויים כשהייתי צריך להעביר תוכן של  תוכנה המציגה את מבנה תנועת גופים תלת מימדי (אם אני מבין נכון במקרה ההוא הרינדור היה על גבי השרת בעוד רק הפיקסל באפר עבר אל הלקוח). כאשר זה היה X מול X , זה עבד בצורה סבירה.

אבל מה קורה אם למשל אני רוצה להשתמש בפריסת טקסט שהיא לא אנגלית אמריקאית, נו מה שפשוט עובד ב X ? ניקח את אחת מאפליקציות ה VNC המיועדות ל wayland ונקבל את היופי הבא:
ERROR: ../src/keyboard.c: 400: Failed to look up keyboard symbol: hebrew_shin
ERROR: ../src/keyboard.c: 400: Failed to look up keyboard symbol: hebrew_shin
ERROR: ../src/keyboard.c: 400: Failed to look up keyboard symbol: hebrew_lamed
ERROR: ../src/keyboard.c: 400: Failed to look up keyboard symbol: hebrew_waw
ERROR: ../src/keyboard.c: 400: Failed to look up keyboard symbol: hebrew_lamed
ERROR: ../src/keyboard.c: 400: Failed to look up keyboard symbol: hebrew_waw
ERROR: ../src/keyboard.c: 400: Failed to look up keyboard symbol: hebrew_finalmem
ERROR: ../src/keyboard.c: 400: Failed to look up keyboard symbol: hebrew_finalmem
ERROR: ../src/keyboard.c: 400: Failed to look up keyboard symbol: hebrew_ayin
ERROR: ../src/keyboard.c: 400: Failed to look up keyboard symbol: hebrew_ayin
ERROR: ../src/keyboard.c: 400: Failed to look up keyboard symbol: hebrew_waw
ERROR: ../src/keyboard.c: 400: Failed to look up keyboard symbol: hebrew_lamed
ERROR: ../src/keyboard.c: 400: Failed to look up keyboard symbol: hebrew_waw
ERROR: ../src/keyboard.c: 400: Failed to look up keyboard symbol: hebrew_lamed
ERROR: ../src/keyboard.c: 400: Failed to look up keyboard symbol: hebrew_finalmem
ERROR: ../src/keyboard.c: 400: Failed to look up keyboard symbol: hebrew_finalmem

אני חייב להודות שזה די נחמד לראות שגיאות כאלו, כי לפחות אנחנו יודעים שיש לנו בcharacter encoding, הדרך לפתור את זה היא להשתמש ב localectl list-x11-keymap-layouts בשביל לקבל את רשימת הקידודים הקיימת במערכת, שם לבחור את מה שהכי מתאים לנו ולהפעיל את wayvnc עם הקידוד הנבחר. לפחות אנחנו עדיין משתמשים בדברם המוכרים לנו מסביבת X בשביל לזהות את התוכן הנדרש.

במקרה שלי זה היה
 wayvnc localhost 5901 -k il
ופתרנו את הבעיה של אי ההתאמה של קידוד המקלדת. 

יום שישי, יוני 30, 2023

GDBus.Error:org.freedesktop.ModemManager1.Error.Core.Unauthorized: PolicyKit authorization failed: not authorized

תודות ל policykit הנהדר, כברירת מחדל אם תנסו לבצע פעולות מרוחוקות על ציוד embdeded תקבלו את התושבה המדהימה הזאת.
 
אני הולך לפגוע פה באבטחה, ולאשר לבצע פעולות ע"ג ssh למשתמש מרוחק ,ניתן לבצע זאת ברמת משתמש בודד או קבוצה שלמה שהתחבר מרחוק.
 
זה מדיע לפתור בעיית הרשאות כמו: 
chatty-mm-chat[ 4908]:   DEBUG: mm_chat_send_message_cb():328: Error sending message: GDBus.Error:org.freedesktop.ModemManager1.Error.Core.Unauthorized: PolicyKit authorization failed: not authorized for 'org.freedesktop.ModemManager1.Messaging'
את השגיאה הזאת תקבלו אם תנסו להפעיל את chatty ע"ג ssh -X.

אחד הפתרונות לזה הוא לייצר קובץ הגדרות ל policy kit שיאפשר למשתמש שהתחבר לבצע את הפעולות גם מרחוק :
  cat /var/lib/polkit-1/localauthority/50-local.d/51-org.ssh-chatty-messaging.pkla 
[Remote SSH chatty]
Identity=unix-user:mobian
Action=org.freedesktop.ModemManager1.Messaging
ResultAny=yes
ResultInactive=yes
ResultActive=yes
לאחר שעורכים את הקובץ צריך להפעיל מחדש את השד של פוליסיקיט.

עכשיו ניתן להפעיל את chatty דרך ssh -X ע"י דרך הרשת:
  ssh -X mobian@mobian "GDK_BACKEND=x11 chatty"
11:36:14.6958   chatty-application[ 6386]: WARNING: Experimental features enabled
11:36:16.1449            GStreamer[ 6386]:CRITICAL: gst_element_message_full_with_details: assertion 'GST_IS_ELEMENT (element)' failed
11:36:16.1459            GStreamer[ 6386]:CRITICAL: gst_element_message_full_with_details: assertion 'GST_IS_ELEMENT (element)' failed
Oops, secure memory pool already initialized
11:36:21.2403                 GLib[ 6386]:CRITICAL: g_str_has_prefix: assertion 'str != NULL' failed
11:36:22.0671                 GLib[ 6386]:CRITICAL: g_str_has_prefix: assertion 'str != NULL' failed
11:36:22.6730                 GLib[ 6386]:CRITICAL: g_str_has_prefix: assertion 'str != NULL' failed
11:36:22.8483                 GLib[ 6386]:CRITICAL: g_str_has_prefix: assertion 'str != NULL' failed
11:36:23.0277                 GLib[ 6386]:CRITICAL: g_str_has_prefix: assertion 'str != NULL' failed
11:36:23.1551                 GLib[ 6386]:CRITICAL: g_str_has_prefix: assertion 'str != NULL' failed
11:36:23.1787                 GLib[ 6386]:CRITICAL: g_str_has_prefix: assertion 'str != NULL' failed
11:36:23.3065                 GLib[ 6386]:CRITICAL: g_str_has_prefix: assertion 'str != NULL' failed
11:36:23.4609                 GLib[ 6386]:CRITICAL: g_str_has_prefix: assertion 'str != NULL' failed
11:36:23.6109                 GLib[ 6386]:CRITICAL: g_str_has_prefix: assertion 'str != NULL' failed
11:36:23.7654                 GLib[ 6386]:CRITICAL: g_str_has_prefix: assertion 'str != NULL' failed
11:36:23.8896                 GLib[ 6386]:CRITICAL: g_str_has_prefix: assertion 'str != NULL' failed

  
ועכשיו ניתן לשלוח ולקבל סמסים דרך ssh דרך האורן  שלכם שנמצא בצד השני של העולם.

באותה הצורה ניתן גם לאפשר גישה כללית למודם עבור modemmanager בשביל לפתור התראות על org.freedesktop.ModemManager1.Device.Control ע"י יצרה של קובץ:
  cat /var/lib/polkit-1/localauthority/50-local.d/50-org.ssh-remote-device-control.pkla 
[Remote SSH device control]
Identity=unix-user:mobian
Action=org.freedesktop.ModemManager1.Device.Control
ResultAny=yes
ResultInactive=yes
ResultActive=yes