Příručka Linux From Scratch pro sestavení základního linuxového systému byla aktualizována v pravidelném půlročním termínu. Vydání 13.1 shrnuje přes 40 nových verzí balíčků a několik patchů. Navazující příručka Beyond Linux From Scratch s recepty pro sestavení dalších knihoven a aplikací zatím vydána nebyla, ačkoliv vývojová verze stále dostává aktualizace. Lze je číst online nebo stáhnout v HTML či PDF.
Národní bezpečnostní tým CSIRT.CZ koordinovaný sdružením CZ.NIC přichází se službou Strážci internetu, která má sjednotit způsob hlášení doménových jmen zneužívaných k páchání trestné činnosti. Službu mohou uživatelé využívat také prostřednictvím rozšíření do prohlížeče. Nový nástroj podporuje jak hlášení vyžadující autorizaci, tak anonymní reporting, u kterého však nebude možné zapojit takovou míru automatizace jako u
… více »Firefox pro iOS přichází s integrovaným blokováním reklam. Funkce je ve výchozím nastavení vypnutá a lze ji aktivovat v Settings > Browsing > Ad Blocker.
Společnost Hugging Face ve spolupráci se společností Pollen Robotics představila (𝕏) open-source robota Microduck. Předobjednat jej lze za 340 eur.
Open-source autonomní AI agent OpenClaw (Wikipedie) byl vydán ve verzi 2026.8.1 aneb 2.0. Přehled novinek v poznámkách k vydání.
Byla vydána první veřejná preview verze PrusaSliceru 3.0. Přesně 15 let po zveřejnění první verze Slic3ru, které připadlo na 1. září 2011. Jedná se o dosud největší upgrade PrusaSliceru: "Řídili jsme se tím, co skutečně potřebujete, a tak jsme například zcela zahodili stávající uživatelské rozhraní a vytvořili ho znovu od nuly. Přinášíme také nový systém projektů, kompletně přepracované profily navržené pro moderní tiskárny s větším
… více »Byl vydán Mozilla Firefox 155.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Vypíchnout lze Smart Window, zatím ale dostupné pouze pro uživatele v USA, Kanadě a Francii. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 155 bude brzy k dispozici také na Flathubu a Snapcraftu.
Tima Cooka na pozici generálního ředitele společnosti Apple dnešním dnem nahradil John Ternus, který byl dosud odpovědný za hardware. Tim Cook vedl Apple od roku 2011, kdy funkci převzal od později zesnulého spoluzakladatele společnosti Stevea Jobse. Za 15 let v čele Applu více než zdvojnásobil tržní hodnotu firmy.
Organizátoři konference LinuxDays ukončil veřejné přihlašování přednášek. Teď je na vás, abyste vybrali nejlepší témata pro letošní ročník. Hlasovat můžete do pondělí 7. září, poté bude podle výsledků hlasování sestaven program pro letošní ročník.
Servo, engine webového prohlížeče napsaný v Rustu, byl vydán ve verzi 0.5.0. Novinky shrnuje přehled projektu za červenec. Došlo k dalšímu pokroku ve vykreslování webových stránek. Současným cílem projektu je vytvořit komponentu webového prohlížeče jako WebView pro použití v jiných aplikacích.
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! 