יום רביעי, ינואר 23, 2019

שינויים דרסטיים בשוק ה IM ב 2019

שנת 2019 התחילה קצת על רגל שמאל.

הפסקת שירותים -
אחד השירותיים הישנים והטובים ביותר שאני מכיר Google Talk ובגלגולו הנוכחי hangouts הולך לעולם שכולו טוב באוקטובור 2019 (זו אינה לשון נקייה לשיחרור בקוד פתוח והעברה לקרן אפאצ'י).

הבעייה המרכזית מבחינתי היא שגוגל טאלק (המקורית) היתה רשת תקשורת שנתנה לנו שירות טוב והיה חיבור טוב מול שאר ספקי ה XMPP. כך שלא היית צריך להיות לקוח של גוגל בשביל לתקשר עם משתמשי גוגל או אפילו להשתמש בלקוח של גוגל לרשת המסרים המיידית. אני השתמשתי במספר לקוחות XMPP ועד היום למעשה אני צרכן של השירות.

לפני תקופה מסויימת התחיל מעבר לפרוטוקול קנייני ולפי ידיעתי לא שוחרר קוד פתוח להתממשק למערכת כך שהצרכנים האחרים לקו בחסר (pidgin למשל לא יודע למחוק הודעות מהשרת של גוגל והיו לי כשלונות צרופים להעביר קבצים דרך הממשק).

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

גם לאחר המעבר יכלת להשתמש בתוכנה חופשית בשביל להתחבר למערכת, וייכלת לקבל איזה שהוא שירות פרטי ע"י שימוש בדברים כמו OTR. לשירות יש מגרעות אבל השירות טוב מספיק בשביל לעקוף ספקים אחרים בשבילי.

חוסר תקשורת בין שירותים שונים של אותה החברה

גוגל העבירה את חלק ממשתמשיה למערכות דואו והלו (ללא תלות בחשבנות ה XMPP שלהם). הבעיה היא חוסר התקשורת בין שיורתי ה XMPP/hangouts לבין שירותי הלו ודואו (ועכשיו גם של האנגאוטס צ'אט). התוצאה שהודעות שנשלחות לאנשים שהם ביכול זמינים לא מקבלות מענה. בעוד הצד הנגדי כלל לא מודע שהוא קיבל הודעה עד שהוא לא ייתחבר לממשק ג'מייל לראות זאת שם.

שירותים מבוססי מספר טלפון

זה אולי נראה חכם וטוב לעבור להתבסס בשירותים מבוסיסי מספר טלפון אבל מדובר פה על עוד קשירת שירותים שאנחנו לא תמיד מבינים את חוסר השימושיות העתידי בהם.

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

מקרה שקרה לי אישית היה בזמן הפעלת number portability בו לא היה ניתן לבצע הזדהות למערכת למשך מספר ימים.

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

פתח להתקפה נוספת, יש לנו קישור מאוד חזק בין מספר הטלפון לשירותי ממשל וכלכלה. אם המספר הזה נחטף (וכבר היו דברים מעולם) אנחנו מוצעים את עצמנו מנותקים מהאפשרות לקבל שירות או כספים המגיעים לנו. לעולם אין לקשר מספר טלפון או חשבון מייל לשירותים ממשלתיים / כלכליים לעבודה ולחשבונות מדיה חשופים.

התקנת מערכות צד שקט לתקשורת

בבריטניה (וככל הנראה עוד מדינות) יש דרישה הולכת וגוברת להכניס רוחות רפאים בשירותים. בעוד ללקוחות שנמצאים במדינות האלה ככל הנראה אין ממש בעייה לי אישית זה מפריע.

זו גם אחת הסיבות מדוע התחלתי לצחוק כשצוות שעוסק בחומר רגיש ביקש להעביר את השיחה לwhatsapp כי היא פרטית ומאובטחת במקום השימוש בציר שאנחנו השתמשנו בו. המציאות היא שאתה לא יכול לסמוך על שום לקוח תוכנה סגורה שלא מספק אפשרות שימוש בהצפנה חיצונית. כברירת מחדל כל מה שמועבר מעובד וקיימת האפשרות שהוא נאגר לשימוש עתידי (לא בהכרח שזה מתבצע בפועל).

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

זה טכנית בלתי אפשרי, ברגע שהמידע הגיע לכרטיס הרשת המידע הזה נשמר ב ram של המחשב, יכול לרדת לcacheים בלי שום שליטה של מנהל המידע. לאחר מכן יש מה שמכונה בעגה כמטה מידע (לוגים, נתוני שימוש)  אל מול המידע עצמו (תוכן השיחה גם אם הוא מוצפן). בדר"כ  קיימת אפשרות שמירה של לוגים (וספקי תקשורת מחוייבים לשמור חלק מהלוגים בחוק).

אם מדובר על ספקים שצריכים לבצע חיוב יהיו ייצרות רשומות מידע (פה זה יכול להיות הדאטא או המטה דאטה) על מנת לספק את השירות. ספק שירות שמספק שירות שעובר חיוב (הגבלת מהירות, כמות שימוש וכו') או שהוא משתמש במספר שרתים יהיה חייב לייצר את רשומות המידע על מנת  שיוכל לספק את השירות.

כבר נתקלתי באנשים שהיו אמונים על מערכות קריטיות שהעבירו את כל המשרד שלהם להשתמש בווצאפ, שזה כטסרופה כי במצב כזה כל התקשורת של המשרד שלך תועבר לגורם שלישי ברגע שדרישת הרוחות רפאים תעבור. 

יכול להיות שבאמת כל עובדי הרשויות הזרות והעובדים עם הרשויות הזרות וספקי השירות הם אנשים מדהימים שלא חוטאים לעולם, אבל איך שהוא אני מאמין שקיים סיכון שלפחות אחד מהעובדים יוכל לממש את הגישה הזאת לרעה.

אנחנו נמצאים כבר במצב שאנו תלויים לחלוטין בספקי שירות של מדינות זרות.  בחלק מהמדינות כמו סין ורוסיה המדינה מעודדת שימוש בספקים מקומיים בלבד ולא של מדינות זרות. זה אמנם נשמע לנו כמו גן נעול וקשה אבל במציאות של היום שבכל רגע נתון השירות בבריטניה יכולים להיות מנותק או השירות הטלפוני באירלנד יכול להיות מופסק ברגע (בגלל שינוי בחוק) וכל המידע שלנו השרות נמצא שם. תעשו ניסוי נסו לחסום את אמאזון ונראה אותכם מקבלים שירות כמו שצריך.

יותר טוב התקינו no-script ונסו לעבוד ללא JS חיצוניים לאתר בו אתם גולשים (כל כתובת שונה).


מצב שירותי הענן במדינות זרות מסכן את הצרכנים גם אם הפעולות שהם עושים חוקיות במגינה בה הם ביצעו. לדוגמה בקנדה ממליצים לאנשים לעבור להשתמש במזומן בשביל שבעתיד לא יפגעו מפעולה שהיא חוקית בקנדה אבל בלתי חוקית או מוסרית בארה"ב.

תזוזת אנשים לשירותים סגורים שלא נגישים לכולם.

נכון זה ה"קידמה" וזה ממש קולי להשתמש בסלאק וקבוצות סגורות אצל ספקי שירות (במקום להשתמש ב mailing list או ה irc הישן והטוב שפושט עובד. אבל המון אנשים שאני זוכר שהיו פעילים בקבוצות ו MLים פשוט נעלמו  או שהפסיקו לכתוב לחלוטין במקומות פומביים.

יכול להיות שיש דברים מדהימים או כנסים מדהימים  או אפילו פגישות אבל ברגע שזה מסופר רק בקבוצה סגורה (וכן קבוצת פייסבוק או ווצאפ היא קבוצה חסומה בדר"כ למי שאין את השירותים האלה או שלא יודעים מה צריך לחפש) אם יש לכם בלוג עדיף תוסיפו שם שורה מאשר רק בטוייטר שלכם או בקבוצת הווצאפ הסודית שלכם ככל גם אחרים יוכלו לדעת על זה.

יום שני, ינואר 14, 2019

מתן אפשרות ל SSLKEYLOGFILE עבור תוכנות שמשתמשות ב libnss3

ב libnss3 נוסף פיטצר שחוסם את האפשרות להשתמש במשתנה הסביבה SSLKEYLOGFILE.

על מנת להחזיר את האפשרות יש לבנות את החבילה מחדש עם הדגל NSS_ALLOW_SSLKEYLOGFILE=1.

בגלל שאני רציתי חיים קלים הורדתי את חבילת הדביאן דרך apt-get source וערכתי את קובץ הבנייה והchangelog.

בשביל שתהיה חבילה חדשה (שתדרס בעידכון הבא).

בצורת patch זה יראה כך:

From 059aaee993008fabee5fec9f6fe869b6aa04b635 Mon Sep 17 00:00:00 2001
From: user <user>
Date: Mon, 14 Jan 2019 19:22:25 +0200
Subject: [PATCH] allow SSLKEYLOGFILE

---
 debian/changelog | 6 ++++++
 debian/rules     | 1 +
 2 files changed, 7 insertions(+)

diff --git a/debian/changelog b/debian/changelog
index a0e1be1..7758b34 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+nss (2:3.41-2) unstable; urgency=medium
+
+  * NSS_ALLOW_SSLKEYLOGFILE=1.
+
+ -- User   Mon, 11 Jan 2019 14:13:39 +0900
+
 nss (2:3.41-1) unstable; urgency=medium
 
   * New upstream release.
diff --git a/debian/rules b/debian/rules
index 880a07e..3804c2f 100755
--- a/debian/rules
+++ b/debian/rules
@@ -108,6 +108,7 @@ override_dh_auto_build:
                MOZILLA_CLIENT=1 \
                NSPR_INCLUDE_DIR=/usr/include/nspr \
                NSPR_LIB_DIR=/usr/lib/$(DEB_HOST_MULTIARCH) \
+               NSS_ALLOW_SSLKEYLOGFILE=1\
                BUILD_OPT=1 \
                NS_USE_GCC=1 \
                OPTIMIZER="$(CFLAGS) $(CPPFLAGS)" \
-- 
2.20.1

את החבילה בונים מחדש ע"י debuild -i -us -uc -b
ומתקינים ע"י dpkg -i *.deb

משלוח התרעות של הארגון לפריחת הכלניות

השבוע שמחתי לשמוע שהארגון שמכריז על פריחת כלניות החליטו לחסום גישה לכל מה שהוא לא הגישה הרשמית (אתר או האפליקציה שלפחות בעבר נכתבה ע"י חברה זרה).

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

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

מערכות ה CB הן הגישה המועדפת בתקשורת סלולארית. וככל ניתן לראות איך בונים מערכות התרעה כאן וכאן , כאן כאן כמובן שיש כבר דוגמאות להתרעה בגישה דומה למה שניסו לבנות פה. סקרתי לפני מספר שנים את הגישות הפופלאריות למערכות התרעה ציבוריות וניתן לקרוא על זה כאן.

בעבר כבר סקרתי מספר פעמים את הנושא של CB ועל הכשלון בזמן תרגיל לאתר התרעות על פריחת כלניות (ואשרי המאמין שערוץ ה data שלו יעבוד טוב מספיק בזמן חירום).


כנראה היתה איזה בעייה קוסמית מדהימה, פריצה של האקר או באג שכנראה יתוקן בשעות הקרובות וזה בכלל אתר פיתוח ולא אתר רשמי מה שאני ראיתי.

הבעיות בהן אני נתקלתי הן - כמובן שיכול להיות אדם אחר שבשבילו אלו לא יהיו בעיות :

אפליקצית קניינית,בקוד סגור, שמקבלת גישה להרשאות GPS (לפי חלק מהדווחים) שלפחות בעבר הכילה סממנים של ייצור חיצוני.

שירותים של חברות זרות מותמעים בתוך האתר, וחושפים כל מי שמתחבר לאתר לבילוש ע"י חברות חיצוניות והתקפה כמי שמשתמש בשירות.

באתר מוטמעים משאבים ורכיבים שנמשכים משרתים של חברות זרות הכוללות את פייסבוק , גוגל, אינסטאגרם, user1st ועוד הרבה אחרים (גישה לאתר תספק לכם את כל הרשימה של השירותים הנדרשים). אם אתם רוצים מרצה שיסביר לכם איך מתחילים לחשוב על פרטיות ומניעת התקפות אני ממליץ בחום רב על drm.org.il או אפילו לחפש בעמותת המקור או לשלוח שאלה לlinux-il (אין לי קשר לאף אחד מהם אבל אני מאמין שהם מספיק טובים) אני לא הולך להסביר לכם איך בונים  מערכות שבנויות מראש מוגנות או למה זה רעיון גרוע להשתמש בשירותי מעקב באתר שמספק דבר כה בסיסי.
לפחות במקרה אחד שירותי ההתרעה הגיעו כביכול מכתובת שהיתה בשליטת חברה זרה בעבר. שירותי ההתרעה לא הוגשו ממערכות הענן הציבורי של המדינה או ממערכות שהוכרזו בצורה רשמית כי הן בשליטת המדינה.

המערכת (אתר) בנוייה בצורה שאיננה מסוגלת לעבוד כאשר אין JS מופעל, מערכות התרעה ציבוריות מפותחות בצורה שהם צריכות לעבוד במספר רב של מישורים.

המערכת לא ביצעה ניתוק לפי GeoIP, או מנעה גישה למי שאינו ניגש עם כתובת שמופרסמת בתוך המדינה (בדקתי בעבר כי ניתן לקבל גישה להתרעות בזמן התרעה ממדינה שאינה ידידיתית במיוחד). 

לא הוצגה אפשרות לבצע אימות צד לקוח ע"י חותמות לקוח (אם היו רוצים להגביל רק לאכלוסיה של אפליקציות מסויימות).
לא הוצג תיעוד ודרך לבצע pooling של הבקשות משרת התרעות מאבוטח לדוגמה ע"י XEP-0127.
לא הוצג תיעוד של ה API שאנשים צריכים להשתמש בו, כאשר הם מפתחים מערכת שצריכה להתממשק מול מערכת ההתרעות. כל אדם שיש לו אתר אמור להציג את ההתרעות האלה אצלו.

המערכת של המרכז לא העבירה התרעות מארגונים אחרים (לדוגמה מ ims.gov.il)
קיימת חוסר התאמה בין חותמת המשמות את TLS לבין השרתים שמספקים את השירות בפועל הרי הם יודעים למה כל כך חשוב שתהיה התאמה (ואנחנו יודעים איך מגדירים CDN משרתים מקומיים וחס שלום לא ממשהוא שיושב בחברה צד שלישית).

כי אם לא תקבלו את השגיאה הזאת ותחשבו שהאתר נפרץ (ולגמרי בצדק!)

wget https://www.oref.org.il/WarningMessages/Alert/alerts.json

--2019-01-14 18:20:03--  https://www.oref.org.il/WarningMessages/Alert/alerts.json
Resolving www.oref.org.il... 109.226.50.136, 109.226.50.139
Connecting to www.oref.org.il|109.226.50.136|:443... connected.
ERROR: cannot verify www.oref.org.il's certificate, issued by `/C=US/O=DigiCert Inc/CN=DigiCert SHA2 Secure Server CA':
  Self-signed certificate encountered.
ERROR: certificate common name `a248.e.akamai.net' doesn't match requested host name `www.oref.org.il'.
To connect to www.oref.org.il insecurely, use `--no-check-certificate'.
Unable to establish SSL connection.

את ההודעה תקבלו ב wget 1.11.4 של gnuwin אבל לא בגרסאות אחרות שהן פחות מחמירות.
את אותה הבדיקה אפשר לבצע ע"י ביצוע dig -x לכתובת אותה תקבלו מה CDN ולבצע השוואה,

ואם יש לכם מנהל רשת חשדן הוא בצדק צריך לנתק את האתר הזה (כי יש פה תקלה חמורה או התקפה חייה).

השירות מסופק מדומיין משני ציבורי (שפתוח לכל עמותה וארגון) ולא תחת הדומיין המשני שהיה אמור להיות (gov לדוגמה). יש משמעות לכל second-level domain.

היו כבר פריחת כלניות ללא הודעה מוסדרת, והיו פריחות שווא  -  זו כמובן היתה תקלה בערב שלא היתה הודעה על פריחה (למרות שהייתה התרעה קולית) או שהפריחה היתה מחוץ לטווח.

ולאחר שסיימתי את זה.

אני איש שורת הפקודה , והמערכות שאני בונה בדר"כ הם עד כמה שיותר פשוטות.
הנה דוגמה לגישה להתרעות ע"י wget :

wget --header="Referer: https://www.oref.org.il/" \
 --header="X-Requested-With: XMLHttpRequest" \
 --header="User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0"\
 --header="Accept: application/json, text/javascript, */*; q=0.01" \
 -qO- https://www.oref.org.il/WarningMessages/Alert/alerts.json?v=1


ב HTTP אנחנו משתמשים במה שמכונה כותרות (headers) אני פשוט הוספתי את הכותרות הבאות :
referer , X-Requsted-With, U-A, Accept.

אם רוצים לעבוד ממש לפי הספר צריך לבצע שתי בקשות , אחת בשביל לקבל את עוגיה בשם TS013a1194 והשנייה לשלוח את מה שהתקבל.
ובתוצאה נקבל :

BOM במקרה שיש דף ריק, אלוהים יודע למה אבל זה לא נורא.
בזמן התרעה נקבל מבנה json שבעבר נראה בערך כך :

{ 
"id" : "1542042267248",
"title" : "התרעות פיקוד העורף ",
"data" : [
    "מרכז הנגב 254",
    "עוטף עזה 225",
    "מרכז הנגב 255"
]
}
ה id הוא פשוט חותמת זמן מתי נשלחה (ניתן לחלק באלף ואז להשוות מול time_t רגיל).

לקח לי יותר זמן לכתוב את הפוסט הזה מאשר לזהות את התיקון הנדרש, אני בערך מנחש מדוע רצו לא לספר כמה התרעות יש בזמן אמת (לא ליצור פניקה לדוגמה).

טוב גיק או לא,אני לא יכול בלי לתת תשובה שעובדת ב systemd נכון ?כמובן שברגע ששוב יעשו תרגיל בלי לרשום זאת בצורה ברורה אנשים יקבלו התרעה על פריחה באזור או אם שוב ישנו את המבנה אז יהיה צריך לתקן את התסריט.

את התסריט אפשר להתקין על כל מערכת שמכילה bash , jq notify-send ו dbus. אפשר במקום להשתמש ב dbus להשתמש ב wall אבל אני לא אוהב את העיבוד ברירת המחדל ל wall.


קודם כל תסריט ביצוע , הטסריט מצפה שהתוכנות הבאות יהיו מותקנות : bash, jq, notify-send,dbus /usr/local/bin/windflower.sh 

#!/bin/bash

#This script will alert you when the windflower blossom around you
#Copyright (c) 2019 Boris Shtrasman
#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.

if [ $# -ne 1 ]; then
echo "$0 expect alert url"
echo "example:"
echo "$0 http://www.oref.org.il/WarningMessages/Alert/alerts.json";
exit 1
fi

# notify all connected users on each connected screen (full screen flash video have issues with OSD)
function notify_user()
{
     users=($(who | sed -r "s/([a-z]*)[ \t]*.*\(([^)]+)\).*/\1,\2/p" | sort|uniq))
     for i in "${users[@]}"
     do
        user=$(echo $i | cut -d',' -f1)
        screen=$(echo $i|cut -d',' -f2)
        id=$(id -u $user)
        echo $user-$screen-$id
        DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$id/bus
        sudo -u $user DISPLAY=$screen DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS  \
                /usr/bin/notify-send  "$@"
      done
} 
#Get a broken json file from our windflower blossom provider
result=$( wget --header="Referer: https://www.oref.org.il/" \
               --header="X-Requested-With: XMLHttpRequest"  \
               --header="User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0"\
               --header="Accept: application/json, text/javascript, */*; q=0.01" \
               -qO- https://www.oref.org.il/WarningMessages/Alert/alerts.json?v=1 $1)

if [ -e "$result" ]; then
        echo "empty"
        exit 0
fi

if [ ${#result} -lt 5 ]; then
        exit 0
fi

title=($echo $result|jq -s '.[].title')
area=$(echo $result|jq -s '.[].data')

if [ -n "$area" ]; then   
   notify_user -t 15000  "Windflower $title $date" "$area" 
fi

exit 0
נמשיך ל קובץ ה service:
cat /etc/systemd/system/windflower.service 
[Unit]
Description=Windflower bloosom

[Service]
Type=oneshot
ExecStart=/bin/bash /usr/local/bin/windflower.sh http://www.oref.org.il/WarningMessages/Alert/alerts.json

והטיימר אני הולך על חמש שניות אבל אפשר לבצע טיימר דינאמי יפה יותר מאשר זה.

בגדול נכון יהיה להשתמש ב Cache-Control שחוזר לנו מהשרת, אבל אני בחרתי ערך יפה יותר :

HTTP request sent, awaiting response... 
  HTTP/1.1 200 OK
  Content-Type: application/json
  Accept-Ranges: bytes
  ETag: W/"3ae4461aeacd41:0"
  Content-Length: 3
  Cache-Control: max-age=3
  Connection: keep-alive

הטיימר שלי נראה כך :
cat /etc/systemd/system/windflower.timer 
[Unit]
Description=Windflower bloosom
[Timer]
OnUnitActiveSec=5s
OnBootSec=100s
OnCalendar=*:*:0/5

[Install]
WantedBy=timers.target
ועכשיו נשאר רק לצפות בפריחה המדהימה.

יום ראשון, דצמבר 02, 2018

משהוא רע עובר בין qt לבין נבידיה

מזה כשנה עובר חתול שחור בין הדריבר של נבידיה לבין qt - האייקונים והטקסט לא בגודל המתאים לערכת הנושא.

הם נראים גדולים יותר והטקסט נראה מצוייר שונה מאשר בדריבר החופשי.

בשביל לתקן ב KDE אפשר לנסות בדרך הבאה:


את ה DPI אפשר לבחור לפי החישוב הבא :

√(אורך² x רוחב² )  

את החישוב צריך לעשות לפי אינצ' ולא סנטימטר (בגלל ש הDPI זה נקודות לאינץ ולא ליחידת מידה).

אצלי רק הבחירה בvendor default פתרה את הבעייה (בחירה ב enabled או disabled לא נתנה את הפתרון הרצוי ואלוהים יודע למה !).

יום שבת, דצמבר 01, 2018

חושבים לחדש את מלאי המחשבים הניידים בעסק ? תבדוק טוב טוב את מה שקורה היום

לפני תקופה מסויימת רשמתי פוסט שתיאר חלק מהדברים שנתקלים בהם בתחילת 2018 ,
שם תיארתי את הדברים הקטנים שלא תמיד שמים לב (והפעם לא מדובר על חוסר האחריות שנאמר רק טלפונית ולא בכתב ושחייבים לעשות העברת בעלות על מחשב נייד כמו שעושים העברת בעלות לרכב). גם בלוג הטכנולגיה linvirtstor נתן סקירה יפה בעולם המק לפני זמן מה.

לצערי פרט ל 17 אינצ" כמעט כל המחשבים הניידים ה"מקצועים" שראיתי בנויים בצורה שאתה צריך לסחוב הרבה מאוד מתאמים ( "דונגלים" ) וגאוני העיצוב אף עשו אותם בצורה כזאת שכאשר אתה מחבר התקן USB שמן אחד אתה לא יכול לחבר התקנים אחרים. יצא לי כבר לצחוק עם קולגה שעוד מעט יהיה יותר משתלם לסחוב PC עם מסך מובנה כדי לא להסתובב עם כל כך הרבה מתאמים.

ולצערי בפוסטים שלי  התעלמתי מנושא מסיים, וייתכן במאק המצב לא קיים כלל זה המעבר לממשק USB בשביל חיבור פריפריאלי שאפילו כולל תחנות עגינה.

שמתי לב לזה לראשונה איפה שהוא ב2016 כאשר כמעט כל מחשבי הדל הניידים (משפחת Precision במיוחד ) המליצו על תחנות עגינה מסוג USB ולמעשה הדגמים שהכילו התקן לתחנת עגינה הפכו לנישה בתור נישה. חלק מהמחשבים עדיין תמכו ב E-Dock אבל לאט לאט זה זכל פנימה.

היום כמעט בלתי אפשרי למצוא מחשב נייד מקצועי במחיר שיורד מ2500 דולר שהוא גם ניתן לאחזקה וגם בעל אפשרויות פריפריאליות כמו תחינת עגינה מובנת.

מהthinkpadים דרך הasuspro ועד הדל פריסיזון כולם עברו למשהוא ממסגרת הusb.

והתחנות האלה הן לא משהוא נסתר, הם קופסאות יפות אבל חיצוניות שתופסות נפח די רציני, רק תראו את הדבר המדהים שיש לדל להציע ותעשו השוואה מול תחנת עגינה ישנה.

באשר לתמיכה בלינוקס זה מגיע פר מחשב ופר שנה, חלק מהXPS הם מחשבים נוצצים, רק שהתמיכה ב thunderbolt בחלק ממחשבי ה XPS  הגיעה רק ב 2018 כמעט שנתיים לאחר שנמכרו מחשבים שתמכו ב thunderbolt. וגם אז צריך לעשות שידרוג פירמוור בשביל לקבל תמיכה בלינוקס.

אבל בגלל שעולם החומרה והתוכנה במלחמה מתמדת צריך להחליט מה אתה תפעיל, אם יש לך למשל מחשבי לנובו אתה לא יכול להתקין מערכת הפעלה אחרת ולצפות שה thunderbolt שלך יעבוד בצורה חלקה (כי זה יהרוג את המחשב שלך ) לא זה לא טעות אצל המדווחים, הפעלה של תמיכה ב thunderbolt עבור לינוקס יכולה לרצוח את המחשב שלך גם אם אותו הדגם נמכר עם "תמיכה באובונטו". ולא לא מדובר רק על מחשבים "מקצועיים" מדובר גם על מחשבי צרכנים כמו ה  T580 (שטווח המחירים שלו הוא טיפה יותר מ$600).

למעשה המצב של תמיכת ה thunderbolt 3 כל כך גרוע היום, שאני לא הייתי ממליץ לאיש לרכוש מחשבים ניידים שהם לא מגיעים עם לינוקס מהמפעל שצריכים להשתמש בזה. מחשבים שנמכרים עם לינוקס אמורים להיות לפחות להבדק שהם לא יירצחו בהפעלה ושהתמיכה (ביוס וקרנל) יאפשרו עבודה בהתקנים (גם אם לא חופשיים).

הקרנל עצמו תומך כמו גדול ב thunderbolt, הבעיה היא שהפירמוור שמגיע עם המחשבים הניידים לא מפרסם את ההתקן או אפילו את ה bus עצמו (בשום אופן , אבל בשום אופן אל תפעילו את התמיכה בלינוקס בביוס).

יום שבת, נובמבר 10, 2018

Workaround for ETPS/2 Elantech Touchpad

הTouchpad שלי החליט שהוא לא עובד בקרנל 4.18 .

פלט ה dmesg שלי מכיל את השגיאות הבאות  :

[   10.559725] iTCO_vendor_support: vendor-support=0
[   10.559763] elan_i2c 0-0015: 0-0015 supply vcc not found, using dummy regulator
[   10.578999] elan_i2c 0-0015: failed to get resolution: -71
[   10.579027] elan_i2c: probe of 0-0015 failed with error -71


ניסיתי לעלות עם הארגומנט למודל psmouse  :

cat /etc/modprobe.d/psmouse.conf 
options psmouse elantech_smbus=0 

ניסיתי גם לעלות עם i8042.reset quiet כארגומנט לgrub רק שזה גם לא עבד.

חפירה די ארוכה נתנה לי את התשובה המתאימה, להעביר את הפרוטוקול הנכון ל psmouse.

מה שpsmouse תומך זה :

enum psmouse_type {
 PSMOUSE_NONE,
 PSMOUSE_PS2,
 PSMOUSE_PS2PP,
 PSMOUSE_THINKPS,
 PSMOUSE_GENPS,
 PSMOUSE_IMPS,
 PSMOUSE_IMEX,
 PSMOUSE_SYNAPTICS,
 PSMOUSE_ALPS,
 PSMOUSE_LIFEBOOK,
 PSMOUSE_TRACKPOINT,
 PSMOUSE_TOUCHKIT_PS2,
 PSMOUSE_CORTRON,
 PSMOUSE_HGPK,
 PSMOUSE_ELANTECH,
 PSMOUSE_FSP,
 PSMOUSE_SYNAPTICS_RELATIVE,
 PSMOUSE_CYPRESS,
 PSMOUSE_FOCALTECH,
 PSMOUSE_VMMOUSE,
 PSMOUSE_BYD,
 PSMOUSE_SYNAPTICS_SMBUS,
 PSMOUSE_ELANTECH_SMBUS,
 PSMOUSE_AUTO  /* This one should always be last */
};
המימוש מכיל את האפשרויות (הטקסט מהדוייק שצריך לשלוח):

#ifdef CONFIG_MOUSE_PS2_ELANTECH
 {
  .type  = PSMOUSE_ELANTECH,
  .name  = "ETPS/2",
  .alias  = "elantech",
  .detect  = elantech_detect,
  .init  = elantech_init_ps2,
 },
#endif

ולפי זה שולחים את האפשרות שנבחרה לקובץ המתאים דרך ובא לציון גואל:


[Unit]
Description=Touchpad hack

[Service]
Type=oneshot
ExecStart=sh -c 'echo -n "elantech" > /sys/bus/serio/devices/serio1/protocol'

[Install]
WantedBy=multi-user.target