יום שישי, יולי 10, 2020

Marvell 4G modem 1286:4e31 (PR-LTE01w)


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

הציוד ממותג עבור חברת Provision ISR , והוא מודם/ראוטר LTE.
דגם המכשיר שברשותי הוא PR-LTE01w.

כאשר מחברים את המכשיר ללינוקס, הוא מדווח שהוא של של מרוול (Marvell) ולא של Provision-ISR.

שמחתי מאוד לקבל לידי ציוד שמעולם לא עבדתי איתו ,זה לא קורה הרבה שאתה מקבל ציוד מחברה שמעולם לא עבדת איתה (רק מאוחר יותר גיליתי שזה של מרוול),

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

העיצוב :

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

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

לא מצאתי שום כפתור שעושה reset למכשיר במצב ששכחתי סיסמה למשל.
באתר של provision-isr לא מצאתי שום איזכור למודם הזה (יכול להיות שהוא שם , אני רק לא מצאתי אותו).

תוכנה:

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

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


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

[Fri Jul 10 07:29:59 2020] usb 1-2: New USB device found, idVendor=1286, idProduct=812a, bcdDevice= 0.00
[Fri Jul 10 07:29:59 2020] usb 1-2: New USB device strings: Mfr=3, Product=2, SerialNumber=0
[Fri Jul 10 07:29:59 2020] usb 1-2: Product: WUKONG
[Fri Jul 10 07:29:59 2020] usb 1-2: Manufacturer: MARVELL

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

[Fri Jul 10 07:30:10 2020] usb 1-2: New USB device found, idVendor=1286, idProduct=4e31, bcdDevice= 1.00
[Fri Jul 10 07:30:10 2020] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[Fri Jul 10 07:30:10 2020] usb 1-2: Product: Mobile Composite Device Bus
[Fri Jul 10 07:30:10 2020] usb 1-2: Manufacturer: Marvell
[Fri Jul 10 07:30:10 2020] usb 1-2: SerialNumber: 00000000000000000000000
[Fri Jul 10 07:30:10 2020] usbcore: registered new interface driver cdc_ether
[Fri Jul 10 07:30:10 2020] usb-storage 1-2:1.5: USB Mass Storage device detected

ומתווסף רכיב cdrom כמו בכל המודמים


[Fri Jul 10 07:30:15 2020] scsi 3:0:0:0: CD-ROM            MARVELL  Mobile CMCC CD   1.25 PQ: 0 ANSI: 0
[Fri Jul 10 07:30:15 2020] scsi 3:0:0:0: Attached scsi generic sg1 type 5

להפתעתי הגמורה המודם דורש שימוש ב RNDIS

[Fri Jul 10 07:30:15 2020] rndis_host 1-2:1.0 eth0: register 'rndis_host' at usb-0000:00:14.0-2, RNDIS device, AA:BB:CC:DD:EE:FF
[Fri Jul 10 07:30:15 2020] usbcore: registered new interface driver rndis_host
[Fri Jul 10 07:30:15 2020] usbcore: registered new interface driver uas
[Fri Jul 10 07:30:15 2020] rndis_host 1-2:1.0 enxaabbccddeeff: renamed from eth0
[Fri Jul 10 07:30:15 2020] sr 3:0:0:0: [sr0] scsi3-mmc drive: 0x/0x caddy
[Fri Jul 10 07:30:15 2020] cdrom: Uniform CD-ROM driver Revision: 3.20
[Fri Jul 10 07:30:15 2020] sr 3:0:0:0: Attached scsi CD-ROM sr0

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

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

[ 1409.942098] Buffer I/O error on dev sr0, logical block 0, async page read
[ 1409.942107] blk_update_request: I/O error, dev sr0, sector 4 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 1409.942109] Buffer I/O error on dev sr0, logical block 1, async page read
[ 1409.942125] blk_update_request: I/O error, dev sr0, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 1409.942127] Buffer I/O error on dev sr0, logical block 0, async page read
[ 1409.942134] blk_update_request: I/O error, dev sr0, sector 4 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 1409.942135] Buffer I/O error on dev sr0, logical block 1, async page read
[ 1409.942148] blk_update_request: I/O error, dev sr0, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 1409.942149] Buffer I/O error on dev sr0, logical block 0, async page read
[ 1409.942156] blk_update_request: I/O error, dev sr0, sector 4 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 1409.942158] Buffer I/O error on dev sr0, logical block 1, async page read
[ 1409.942170] blk_update_request: I/O error, dev sr0, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 1409.942172] Buffer I/O error on dev sr0, logical block 0, async page read
[ 1409.942178] blk_update_request: I/O error, dev sr0, sector 4 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 1409.942180] Buffer I/O error on dev sr0, logical block 1, async page read
[ 1409.942192] blk_update_request: I/O error, dev sr0, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 1409.942193] Buffer I/O error on dev sr0, logical block 0, async page read
[ 1409.942200] Buffer I/O error on dev sr0, logical block 1, async page read

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

 sudo usb_modeswitch -v 1286 -p 4e31 -K
 sudo usb_modeswitch -v 1286 -p 4e31 -S
 sudo usb_modeswitch -v 1286 -p 4e31 -A
 sudo usb_modeswitch -v 1286 -p 4e31 -B
 sudo usb_modeswitch -v 1286 -p 4e31 -E
 sudo usb_modeswitch -v 1286 -p 4e31 -O
 sudo usb_modeswitch -v 1286 -p 4e31 -R
 sudo usb_modeswitch -v 1286 -p 4e31 -I
 sudo usb_modeswitch -v 1286 -p 4e31 -D
 
אפילו ניסיתי לייצר את קובץ חוקי udev ואפילו זה לא עזר :

cat /etc/udev/rules.d/provision.rules 
ATTRS{idVendor}=="1286", ATTRS{idProduct}=="4e31", RUN+="usb_modeswitch '%b/%k'"

אז חזרתי לימים הטובים ופשוט עשיתי sudo eject /dev/sr0 והספאם הפסיק.

לצערי הרב המודם לא סיפק שום רכיבים שיכלתי להשתמש בהם תחת /dev כמו למשל /dev/ttyUSB או /dev/ttyACM שהייתי יכול לתת לי למהל אותו מתוך NetworkManager .למה זה טוב ?


הקליטה היתה סבירה , לא הייתה רעה,  לא הייתה ממש טובה. פשוט סבירה.

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

המכשיר אפילו תומך בשליחת USSD,  רק חבל שזה חבויי בתת תפריט תחת internet.
בתאוריה ניתן למשל לקבל את כמות התקציב שנשאר על הכרטיס, או אפילו לבצע top up על חשבון הכרטיס בממשק הזה.

לא מצאתי אפשרות לביצוע רישום לאזורי CB (אולי יש איזה תת תפריט שפיספסתי).

פירוט טכני למגגלים :
lsusb -vv -d 1286:4e31

Bus 001 Device 007: ID 1286:4e31 Marvell Semiconductor, Inc. Mobile Composite Device Bus
Couldn't open device, some information will be missing
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass          239 Miscellaneous Device
  bDeviceSubClass         2 
  bDeviceProtocol         1 Interface Association
  bMaxPacketSize0        64
  idVendor           0x1286 Marvell Semiconductor, Inc.
  idProduct          0x4e31 
  bcdDevice            1.00
  iManufacturer           1 
  iProduct                2 
  iSerial                 3 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x0079
    bNumInterfaces          4
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xc0
      Self Powered
    MaxPower              500mA
    Interface Association:
      bLength                 8
      bDescriptorType        11
      bFirstInterface         0
      bInterfaceCount         2
      bFunctionClass        224 Wireless
      bFunctionSubClass       1 Radio Frequency
      bFunctionProtocol       3 RNDIS
      iFunction               5 
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass       224 Wireless
      bInterfaceSubClass      1 Radio Frequency
      bInterfaceProtocol      3 RNDIS
      iInterface              5 
      ** UNRECOGNIZED:  05 24 00 10 01
      ** UNRECOGNIZED:  05 24 01 00 01
      ** UNRECOGNIZED:  04 24 02 00
      ** UNRECOGNIZED:  05 24 06 00 01
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x85  EP 5 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0010  1x 16 bytes
        bInterval              16
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass        10 CDC Data
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface              5 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x87  EP 7 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x06  EP 6 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface              8 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x84  EP 4 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x03  EP 3 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        4
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface             11 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
לסיכום , מודם שעושה את עבודותו בלינוקס לאחר קצת מאמצים ,לא מצאתי דרך פשוטה להתמיע אותו בשימוש בתוך סביבת העבודה בה אני משתמש.

יום ראשון, יוני 28, 2020

DBUS_SESSION_BUS_ADDRESS is no longer unix:path=/run/user/$(id -u)/bus

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

בעבר המשתנה היה פשוט :

DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u)/bus

אבל עכשיו הוא קיבל פורמט אחר   :

DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-RANDOM,guid=UUID

הפתרון הנוכחי שלי הוא לנסות לגלות את משתנה הסביבה מ plasma :

eval $(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u username plasma_session)/environ ) 


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




השימוש בתוך אחד מהתסריטים שלי  נראה כך :

#Send on screen notification when doorbell notification had arrived
#Copyright (c) 2017 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.

function notify_all_users()
{
     users=($(who | sed -nr "s/([a-z]*)[ \t]*.*\((:[^)]+)\).*/\1,\2/p" | sort|uniq))
     summery=$1
     text=$2
     for i in "${users[@]}"
     do
        user=$(echo $i | cut -d',' -f1)
        [ "root" == $user ] && continue
        screen=$(echo $i|cut -d',' -f2)
        id=$(id -u $user)
        #begin with a pre systemd 245 value
        DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$id/bus
        #get dbus for plasma
        [[ ! -z "ps aux | grep plasma_session|grep -vvv grep" ]] && eval $(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u user plasma_session)/environ )
        #get dbys for gnome sessions
        [[ ! -z "ps aux | grep gnome_session|grep -vvv grep" ]] && eval $(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u user gnome_session)/environ )
        #send an alert for each user that a door bell had been activated , 
        screen -Dm sudo -u $user  /bin/bash -c "DISPLAY=$screen DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS  /usr/bin/notify-send -t 15000 -i /usr/share/home/doorbell.png -u critical \"$summery\" \"$text\""
    
     done
} 

יום רביעי, מאי 20, 2020

GMail had disabled LSA or Failed to transport message. Server Error in Kontact/Kmail

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

גיליתי את זה כשלא יכלתי יותר לשלוח או לקבל מיילים בakonadi.


השגיאה שקיבלתי בKontact/Kmail בעת שליחת הדואר היתה :

qt.network.ssl: QSslSocket::startClientEncryption: cannot start handshake on non-plain connection

Failed to transport message. Server Error


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

התיקון בהגדרות המשאב (akonadi resource )  שצריך לעשות הוא מעבר לאימות הנכון אם רוצים להתשמש בשירותי גוגל בשביל SMTP.

בהגדרות ה SMTP  צריך לעבור מ חיבור TLS פורט 465 ואימות PLAIN או STARTTLS פורט 587  ואימות PLAIN.

לחיבור STARTTLS פורט 587 ואימות מסוג XOAUTH2 .

על מנת שנוכל לבצע אימות XOAUTH2 באמת , צריך להוסיף את אקונאדי  לרשימה המורשית לגשת לחשבון ע"י המרת חשבון ה IMAP הנוכחי מ IMAP רגיל לGoogleMail . אתה זה נעשה  ע"י הוספה של resource חדש , אישור akonadi לניהול תיבת הדואר שלנו ב GMAIL.

יום שבת, מרץ 28, 2020

Packaging OSM for debian

בגלל המגפה כולם עכשיו מתחילים להרים שרתים ולהציג מידע על מפות, רק שכמעט כולם מתבססים על שירותי המיפוי של אחרים.  בדר"כ הפתרונות הן שימוש ב openstreetmap , google , esri  ואחרים (משום מה לא ראיתי איש שמשתמש במפה של  govmap.gov.il).

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

רק היום בדביאן יש בעייה באריזה של חבילות OSM.

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

כולנו אוהבים להשתמש בשירותי ה tile של OSM אבל אנחנו תלויים בשרתים של OSM שיעבדו במקום שיהיה לנו שירותי tile server משלנו.

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


לצערי אני לא יודע מספיק Java Script בשביל לפתור את בעיות האריזה של node-carto, וממה שהבנתי node-carto היא החבילה שתוקעת את שאר החבילות הנדרשות בשביל לבנות tile server של OSM.

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

את העזרה באריזה שלכם אפשר להגיש ב debian-gis@lists.debian.org וניתן לצפות בדיונים פה .

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

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

יום חמישי, ספטמבר 12, 2019

משלוח התראות של פיקוד העורף ב KDE ו Gnome

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

צריך להוריד את סמליל פיקוד העורף ולשים אותו ב
/usr/share/oref/240px-Pakar.svg.png

כשיש התראה קופץ חלון התראה גרפי:

בשביל חיבור ממשק טקסט (משל ssh) יש גם התראת טקסט :
Broadcast message from user@pi (pts/4):         
                                                                               
Oref : [{ 
"title" : "התרעות פיקוד העורף ",
"data" : ["מבקיעים"]
}]


הקוד עצמו  :
#!/bin/bash
#License : MIT
#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
#send a notification for each user that has X session, and accept notif
function notify_user()
{
     users=($(who | sed -nr "s/([a-z]*)[ \t]*.*\((:[^)]+)\).*/\1,\2/p" | sort|uniq))
     summary=$1
     text=$2
     for i in "${users[@]}"
     do
        user=$(echo $i | cut -d',' -f1)
        screen=$(echo $i|cut -d',' -f2)
        id=$(id -u $user)
        DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$id/bus
        #get dbus for plasma
        [[ ! -z "ps aux | grep plasma_session|grep -vvv grep" ]] && eval $(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u user plasma_session)/environ )
        #get dbys for gnome sessions
        [[ ! -z "ps aux | grep gnome_session|grep -vvv grep" ]] && eval $(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u user gnome_session)/environ )

        #I use screen to avoid blocking the process for other connected users, I'm obligated to use sudo as notify-send need to be run under the same user which own the session.
        #This unfurtunatly will take over fullscreen Firefox or flash video
        screen -Dm sudo -u $user /bin/bash -c "DISPLAY=$screen DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS  /usr/bin/notify-send -t 15000 -i /usr/share/oref/240px-Pakar.svg.png -u critical \"$summary\" \"$text\""

      done
} 

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-  $1)

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

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

#Send alert over all shells on the system.
wall "Oref : [$result]"
#Send alert for each UI session that support notify-send
title=$(echo $result|jq -s -r '.[].title')
amount_of_alerts=$(echo $result |jq -s '.[].data | length')
#if there had been no data members we can not iterate over it
if [ ! -z "$amount_of_alerts" ]; then
  for (( alert_index = 0 ; alert_index < $amount_of_alerts; alert_index++))
  do
     area=$(echo $result|jq -r -s ".[].data| .[$alert_index]")
     notify_user  "Oref $title $date" "$area"
  done
fi

exit 0


בדיוק כמו בפעם הקודמת צריך להשתמש בשעון עצר של systemd (פורסם בלינק הקודם).

עריכה :


הקוד הזה דורש ש notify-send , jq ו wget יהיו מותקנים במערכת.

הקוד הזה מיועד ל X , אין לי wayland מותקן,  ואין לי דרך לדעת איך wayland עובד עם notify-send או אם notify_user()  תעבוד שם.

יש להפעיל את התסריט הזה מטיימר  או שורת cron, בשביל למשוך התראות חדשות 

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