Společnost JetBrains uvolnila Mellum, tj. svůj velký jazykový model (LLM) pro vývojáře, jako open source. Mellum podporuje programovací jazyky Java, Kotlin, Python, Go, PHP, C, C++, C#, JavaScript, TypeScript, CSS, HTML, Rust a Ruby.
Vývojáři Kali Linuxu upozorňují na nový klíč pro podepisování balíčků. K původnímu klíči ztratili přístup.
V březnu loňského roku přestal být Redis svobodný. Společnost Redis Labs jej přelicencovala z licence BSD na nesvobodné licence Redis Source Available License (RSALv2) a Server Side Public License (SSPLv1). Hned o pár dní později vznikly svobodné forky Redisu s názvy Valkey a Redict. Dnes bylo oznámeno, že Redis je opět svobodný. S nejnovější verzí 8 je k dispozici také pod licencí AGPLv3.
Oficiální ceny Raspberry Pi Compute Modulů 4 klesly o 5 dolarů (4 GB varianty), respektive o 10 dolarů (8 GB varianty).
Byla vydána beta verze openSUSE Leap 16. Ve výchozím nastavení s novým instalátorem Agama.
Devadesátková hra Brány Skeldalu prošla portací a je dostupná na platformě Steam. Vyšel i parádní blog autora o portaci na moderní systémy a platformy včetně Linuxu.
Lidi dělají divné věci. Například spouští Linux v Excelu. Využít je emulátor RISC-V mini-rv32ima sestavený jako knihovna DLL, která je volaná z makra VBA (Visual Basic for Applications).
Revolut nabídne neomezený mobilní tarif za 12,50 eur (312 Kč). Aktuálně startuje ve Velké Británii a Německu.
Společnost Amazon miliardáře Jeffa Bezose vypustila na oběžnou dráhu první várku družic svého projektu Kuiper, který má z vesmíru poskytovat vysokorychlostní internetové připojení po celém světě a snažit se konkurovat nyní dominantnímu Starlinku nejbohatšího muže planety Elona Muska.
Poslední aktualizací začal model GPT-4o uživatelům příliš podlézat. OpenAI jej tak vrátila k předchozí verzi.
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!