Open source platforma Home Assistant (Demo, GitHub, Wikipedie) pro monitorování a řízení inteligentní domácnosti byla vydána v nové verzi 2025.7.
Wayland byl vydán ve verzi 1.24.0. Jde o menší vydání po více než roce. Více funkcionality bývá přidáváno v průběžných vydáních Wayland Protocols.
Textový editor Geany byl vydán ve verzi 2.1. Jde o udržovací vydání po bezmála dvou letech. Obsahuje drobná vylepšení vyhledávání, aktualizace podpory zvýrazňování syntaxe a dále převážně opravy chyb.
Byly zveřejněny videozáznamy, dostupné také s prezentacemi přímo z programu, a také fotogalerie z open source komunitní konference DevConf.CZ 2025 konané od 12. do 14. června v Brně.
Navigace se soukromím CoMaps postavena nad OpenStreetMap je nově k dispozici v Google Play, App Store i F-Droid. Jedná se o komunitní fork aplikace Organic Maps.
Vývojáři OpenMW (Wikipedie) oznámili vydání verze 0.49.0 této svobodné implementace enginu pro hru The Elder Scrolls III: Morrowind. Přehled novinek i s náhledy obrazovek v oznámení o vydání.
Masivní výpadek elektrického proudu zasáhl velkou část České republiky. Hasiči vyjížděli k většímu počtu lidí uvězněných ve výtazích. Výpadek se týkal zejména severozápadu republiky, dotkl se také Prahy, Středočeského nebo Královéhradeckého kraje. Ochromen byl provoz pražské MHD, linky metra se už podařilo obnovit. Výpadek proudu postihl osm rozvoden přenosové soustavy, pět z nich je nyní opět v provozu. Příčina problémů je však stále neznámá. Po 16. hodině zasedne Ústřední krizový štáb.
Po více než roce vývoje od vydání verze 5.40 byla vydána nová stabilní verze 5.42 programovacího jazyka Perl (Wikipedie). Do vývoje se zapojilo 64 vývojářů. Změněno bylo přibližně 280 tisíc řádků v 1 500 souborech. Přehled novinek a změn v podrobném seznamu.
Byla vydána nová stabilní verze 7.5 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 138. Přehled novinek i s náhledy v příspěvku na blogu.
Sniffnet je multiplatformní aplikace pro sledování internetového provozu. Ke stažení pro Windows, macOS i Linux. Jedná se o open source software. Zdrojové kódy v programovacím jazyce Rust jsou k dispozici na GitHubu. Vývoj je finančně podporován NLnet Foundation.
Tak jsem zkoumal, kterak by šel občas taky vypnout TrackPoint, nakonec z toho vylezlo celkem dost skriptů :).
První skript slouží ke spuštění příkazu pod uživatelem v X serveru, a to buď na aktuálně zobrazeném X serveru, nebo na všech běžících.
#!/bin/bash command="$2" getXuser() { user=$(who | grep -m1 "$DISPLAY " | awk '{print $1}') if [ $user = "" ]; then user=$(who | grep -m1 "$DISPLAY" | awk '{print $1}') fi if [ $user != "" ]; then userhome=$(getent passwd $user | cut -d: -f6) export XAUTHORITY=$userhome/.Xauthority else export XAUTHORITY="" fi } runXcommand() { getXuser echo "Display: $DISPLAY" echo "User: $user" echo "XAuthority: $XAUTHORITY" if [ "$DISPLAY" != "" ] && [ "$user" != "" ]; then echo "RUN: $command" su $user -c "$command" fi } Usage() { echo "usage: ${0/*\/} {all|actual} <command>" exit 1 } [ $# -gt 2 ] && Usage case "$1" in "all") for display in $(who | awk '{print $2}' | grep -E ':[0-9]+'); do export DISPLAY=$display runXcommand done ;; "actual") displaynum=$(ps ax | grep -m1 -e '[X] .* vt'$(fgconsole) | sed -re 's|.*/X .*:([0-9]+).*|\1|') export DISPLAY=":$displaynum" runXcommand ;; *) Usage ;; esac
Hodí se ke spouštění následujících dvou skriptů, například, při spouštění přes ACPI tlačítka.
Skript pro přepínání stavu UltraNav
#!/bin/bash TRACKPOINT_NAME="trackpoint" TRACKPOINT='TPPS/2 IBM TrackPoint' TOUCHPAD_NAME="touchpad" TOUCHPAD='SynPS/2 Synaptics TouchPad' Usage() { echo "usage: ${0/*\/} status [device]" echo " ${0/*\/} enable [device]" echo " ${0/*\/} disable [device]" echo " ${0/*\/} toggle [device]" echo "device: $TRACKPOINT_NAME" echo " $TOUCHPAD_NAME" echo "toggle order: 1) $TRACKPOINT_NAME enable" echo " $TOUCHPAD_NAME disable" echo " 2) $TRACKPOINT_NAME disable" echo " $TOUCHPAD_NAME enable" echo " 3) $TRACKPOINT_NAME disable" echo " $TOUCHPAD_NAME disable" echo " 4) $TRACKPOINT_NAME enable" echo " $TOUCHPAD_NAME enable" exit 1 } GetState() { echo $(/usr/bin/xinput list-props "$1" | grep "Device Enabled" | cut -f2 -d:) } Status() { case "$1" in "$TRACKPOINT") DEVICE="$TRACKPOINT_NAME" ;; "$TOUCHPAD") DEVICE="$TOUCHPAD_NAME" ;; esac if [ $(GetState "$1") = "1" ]; then STATUS="enabled" else STATUS="disabled" fi echo -e "$DEVICE: $STATUS" } SetState() { /usr/bin/xinput set-int-prop "$1" "Device Enabled" "8" "$2" } Enable() { SetState "$1" 1 } Disable() { SetState "$1" 0 } Toggle() { if [ $(GetState "$1") = "1" ]; then STATE=0 else STATE=1 fi SetState "$1" "$STATE" } [ $# -gt 2 ] && Usage case "$1" in "status") COMMAND="Status" ;; "enable") COMMAND="Enable" ;; "disable") COMMAND="Disable" ;; "toggle") COMMAND="Toggle" if [ -z "$2" ]; then if [ $(GetState "$TRACKPOINT") = "1" -a $(GetState "$TOUCHPAD") = "1" ]; then SetState "$TRACKPOINT" 1 SetState "$TOUCHPAD" 0 elif [ $(GetState "$TRACKPOINT") = "1" -a $(GetState "$TOUCHPAD") = "0" ]; then SetState "$TRACKPOINT" 0 SetState "$TOUCHPAD" 1 elif [ $(GetState "$TRACKPOINT") = "0" -a $(GetState "$TOUCHPAD") = "1" ]; then SetState "$TRACKPOINT" 0 SetState "$TOUCHPAD" 0 else SetState "$TRACKPOINT" 1 SetState "$TOUCHPAD" 1 fi exit fi ;; *) Usage ;; esac case "$2" in "$TRACKPOINT_NAME") $COMMAND "$TRACKPOINT" ;; "$TOUCHPAD_NAME") $COMMAND "$TOUCHPAD" ;; "") $COMMAND "$TRACKPOINT" $COMMAND "$TOUCHPAD" ;; *) Usage esac
Notně vylepšený skript pro přepínání interního-externího displeje
#!/bin/bash INTERNAL_NAME='internal' INTERNAL='LVDS' EXTERNAL_NAME='external' EXTERNAL='VGA' EXTERNAL_EXPAND="left-of" Usage() { echo "usage: ${0/*\/} status [device]" echo " ${0/*\/} enable [device]" echo " ${0/*\/} disable [device]" echo " ${0/*\/} toggle [device]" echo "device: $INTERNAL_NAME" echo " $EXTERNAL_NAME" echo "toggle order: 1) $INTERNAL_NAME enable" echo " $EXTERNAL_NAME disable" echo " 2) $INTERNAL_NAME disable" echo " $EXTERNAL_NAME enable" echo " 3) $INTERNAL_NAME enable" echo " $EXTERNAL_NAME enable" exit 1 } GetState() { if /usr/bin/xrandr | grep -q -E '^'"$1"' connected .+\('; then echo 1 else echo 0 fi } Status() { case "$1" in "$EXTERNAL") DEVICE="$EXTERNAL_NAME" ;; "$INTERNAL") DEVICE="$INTERNAL_NAME" ;; esac if [ $(GetState "$1") = "1" ]; then STATUS="enabled" else STATUS="disabled" fi echo -e "$DEVICE: $STATUS" } GetOther() { case "$1" in "$EXTERNAL") echo "$INTERNAL" ;; "$INTERNAL") echo "$EXTERNAL" ;; esac } SetState() { OTHER="$(GetOther "$1")" if [ "$2" = "0" -a $(GetState "$OTHER") = "0" ]; then /usr/bin/xrandr --output "$OTHER" --auto [ $(GetState "$OTHER") != "0" ] && /usr/bin/xrandr --output "$1" --off elif [ "$2" = "0" ]; then /usr/bin/xrandr --output "$1" --off else /usr/bin/xrandr --output "$1" --auto if [ $(GetState "$1") != "0" -a $(GetState $OTHER) != "0" ]; then /usr/bin/xrandr --output "$INTERNAL" --"$EXTERNAL_EXPAND" "$EXTERNAL" fi fi true } Enable() { SetState "$1" 1 } Disable() { SetState "$1" 0 } Toggle() { if [ $(GetState "$1") = "1" ]; then STATE=0 else STATE=1 fi SetState "$1" "$STATE" } [ $# -gt 2 ] && Usage case "$1" in "status") COMMAND="Status" ;; "enable") COMMAND="Enable" ;; "disable") COMMAND="Disable" ;; "toggle") COMMAND="Toggle" if [ -z "$2" ]; then if [ $(GetState "$INTERNAL") = "1" -a $(GetState "$EXTERNAL") = "1" ]; then SetState "$INTERNAL" 1 SetState "$EXTERNAL" 0 elif [ $(GetState "$INTERNAL") = "1" -a $(GetState "$EXTERNAL") = "0" ]; then SetState "$EXTERNAL" 1 SetState "$INTERNAL" 0 else SetState "$INTERNAL" 1 SetState "$EXTERNAL" 1 fi exit fi ;; *) Usage ;; esac case "$2" in "$INTERNAL_NAME") $COMMAND "$INTERNAL" ;; "$EXTERNAL_NAME") $COMMAND "$EXTERNAL" ;; "") $COMMAND "$INTERNAL" $COMMAND "$EXTERNAL" ;; *) Usage esac
Další skript je pro přepínání stavu UltraConnect, funguje jen pokud ho spustí root.
#!/bin/bash WLAN_MODULE="iwlagn" WLAN_IFACE="wlan0" WLAN_NAME="wifi" BT_CTRL_FILE="/sys/devices/platform/thinkpad_acpi/bluetooth_enable" BT_NAME="bluetooth" Usage() { echo "usage: ${0/*\/} status [device]" echo " ${0/*\/} enable [device]" echo " ${0/*\/} disable [device]" echo " ${0/*\/} toggle <device>" echo "device: $WLAN_NAME" echo " $BT_NAME" exit 1 } WlanPowerSave() { /usr/sbin/iwconfig "$WLAN_IFACE" power on } GetWlanState() { if [ -d "/sys/module/$WLAN_MODULE" ]; then echo 1 else echo 0 fi } SetWlanState() { if [ "$1" -eq 0 ]; then /sbin/modprobe -r "$WLAN_MODULE" else /sbin/modprobe "$WLAN_MODULE" WlanPowerSave fi } ToggleWlan() { if [ $(GetWlanState) = "0" ]; then SetWlanState 1 else SetWlanState 0 fi } GetBTState() { cat $BT_CTRL_FILE } SetBTState() { echo "$1" > "$BT_CTRL_FILE" } ToggleBT() { if [ $(GetBTState) = "0" ]; then SetBTState 1 else SetBTState 0 fi } Status() { case "$1" in "$WLAN_NAME") STATE=$(GetWlanState) ;; "$BT_NAME") STATE=$(GetBTState) ;; esac if [ $STATE = "1" ]; then STATUS="enabled" else STATUS="disabled" fi echo -e "$1: $STATUS" } [ $# -gt 2 ] && Usage case "$1" in "status") case "$2" in "$WLAN_NAME"|"$BT_NAME") Status "$2" ;; "") Status "$WLAN_NAME" Status "$BT_NAME" ;; *) Usage ;; esac ;; "enable"|"disable") case $1 in "enable") STATE="1" ;; "disable") STATE="0" ;; esac case "$2" in "$WLAN_NAME") SetWlanState "$STATE" ;; "$BT_NAME") SetBTState "$STATE" ;; "") SetWlanState "$STATE" SetBTState "$STATE" ;; *) Usage ;; esac ;; "toggle") case "$2" in "$WLAN_NAME") ToggleWlan ;; "$BT_NAME") ToggleBT ;; *) Usage ;; esac ;; *) Usage ;; esac
Poslední je vylepšený skript pro UltraBay
#!/bin/bash DEFAULT_DEVICE="/sys/class/scsi_device/1:0:0:0/device" FORCE_SLEEP="1" QUIET="0" Message() { if [ $QUIET = "0" ]; then echo "${0/*\//}: $*" else true fi } Block2Device() { /bin/readlink -e "/dev/block/$1" } IsSwap() { /sbin/swapon -s | grep -q -e "^$1\b" } IsMounted() { mount | grep -q -e "^$DEVICE\b" } ReleaseDevice() { if IsMounted "$1"; then if ! umount "$1" &> /dev/null; then Message "cannot umount $DEVICE" false fi elif IsSwap "$1"; then if ! /sbin/swapoff "$1" &> /dev/null; then Message "cannot disable swapping on $DEVICE" false fi fi } SleepDrive() { if ! /sbin/hdparm -Y "$1" &> /dev/null; then Message "cannot put drive to sleep" if [ $FORCE_SLEEP = "0" ]; then true else false fi fi } DeleteScsiDevice() { if ! { echo 1 > $SCSI_DEVICE/delete; } &> /dev/null; then Message "cannot delete device" false fi } GetDock() { grep "$1" /sys/devices/platform/dock.*/type | sed -e s%/type:.*%% } IsDocked() { [ $(cat $(GetDock "$1")/docked) -ne 0 ] } Undock() { { echo 0 > $(GetDock "$1")/undock; } &> /dev/null ! IsDocked "$1" } SCSI_DEVICE="$DEFAULT_DEVICE" for PARAM in $*; do if [ "$PARAM_DEVICE" ]; then SCSI_DEVICE="$PARAM" else case "$PARAM" in "--quiet"|"-q") QUIET="1" ;; "--no-force-sleep"|"-n") FORCE-SLEEP="0" ;; "--device"|"-d") PARAM_DEVICE="1" ;; *) echo "usage: ${0/*\/} [options]" echo "options:" echo " -q --quiet No messages" echo " -n --no-force-sleep Ignore fail when putting drive to sleep" echo " -d --device <path> SCSI device, default: $DEFAULT_DEVICE" exit 1 ;; esac fi done if [ -d $SCSI_DEVICE ] && IsDocked "ata_bay"; then sync for BLOCK in $(/bin/cat $SCSI_DEVICE/block/*/*/dev $SCSI_DEVICE/block/*/dev 2> /dev/null); do DEVICE=$(Block2Device "$BLOCK") && ReleaseDevice "$DEVICE" || FAIL="1" done if [ $FAIL ]; then exit 1 fi sync BLOCK=$(cat $SCSI_DEVICE/block/*/dev 2> /dev/null) && DEVICE=$(Block2Device "$BLOCK") && SleepDrive "$DEVICE" || exit 1 sleep 3 DeleteScsiDevice "$SCSI_DEVICE" || exit 1 sleep 1 fi if [ ! -d $SCSI_DEVICE ] && $(IsDocked "ata_bay"); then if Undock "ata_bay"; then Message "AtaBay undocked" exit 0 else Message "cannot undock AtaBay" exit 1 fi fi if $(IsDocked "battery_bay"); then if Undock "battery_bay"; then Message "BatteryBay undocked" exit 0 else Message "cannot undock BatteryBay" exit 1 fi fi Message "UltraBay is already undock" exit 1
No a nakonec, užijte si to :_).
Tiskni
Sdílej:
A na ThinkWiki s nimi!