3ED Blog

24 kwietnia, 2010

ladspa w .asoundrc

Napisane w: Linux (1)

Wtyczki ladspa można podstawić pod alsę za pomocą pliku wymienionego w tytule. Skąd wiedzieć co napisać? Po kolei.. Zakładam, że masz zainstalowane wtyczki ladspa, poleceniem listplugins można wyświetlić wszystkie dostępne w systemie wtyczki. Lista taka składa się z nazw plików i nazw filtrów. Kolejnym poleceniem jest analyseplugin, jako parametr należy podać nazwę pliku. Interesujące nas linijki to Plugin Label i Ports. Pierwszy będzie potrzebny do określenia w pliku .asoundrc pluginu, a drugi do ustawienia prawidłowych wartości. We wspomnianym pliku tworzymy następujący wpis:

pcm.mojanazwa {
  type ladspa
  slave.pcm "plughw:0,0";
  path "/usr/lib/ladspa";
  plugins [
    {
      label tap_reverb
      input {
        controls [2.8 -6 0 1 1 0 0 0]
      }
    }
  ]
}

Więc tak, pcm.mojanazwa to nazwa.. slave.pcm to nazwa pcm karty dzwiękowej (dla drugiej będzie to plughw:1,0). path to katalog z pluginami ladspa. label to nazwa odpowiadająca Plugin Label, controls to ustawienia tego pluginu, według Ports.

Można też ustawić by ten "plug" był domyślny takim oto wpisem:

pcm.!default {
  type plug
  slave.pcm "mojanazwa"
}

Uwaga: Ustawienie to wejdzie w życie z kolejnym uruchomieniem dźwięku i może też służyć jako przełącznik karty master.

06 września, 2009

Grub2-GfxMenu

Napisane w: Arch Linux, Linux, Oprogramowanie (1)

Słowem wstępu: Grub2 to nowszy Grub, boot loader czyli coś co siedzi w MBR i ładuje wybrany przez nas system, kropka.

Nowa wersja programu ma znacznie większe możliwości konfiguracyjne choć niektórych opcji z poprzedniej wersji mu brakuje, jest modularny i potrafi lepiej używać karty wideo. Poprzednia wersja z przystawką jaką był gfx stanowczo ustępuje tej z obecną gfxmenu (w linkach zrzutki). Do kompletu dobrze pasuje kernel z fbcondecor np. kernel26-ice i wystrój boot splasha o nazwie arch-black, gdy użyjesz mojego wystroju gruba - będzie w sam raz.. Niestety nie wiem jak zrobić screenshot z gruba więc opiszę jak to wygląda, a jest to skrzyżowanie themesu ubuntu tego z kułeczkiem po lewej (screeny w linku do gfxmenu), a tłem verbose, logo i ikonką z arch-black. Pobrać można tutaj. Do rzeczy.

Po instalacji paczek grub2-gfxmenu i grub2-gfxmenu-overlay z aur lub archfox:

[archfox]
Server = http://hateanthem.dreamhosters.com/arch/i686
#lub
[archfox]
Server = http://hateanthem.dreamhosters.com/arch/x86_64

Przyszedł czas na konfigurację, co trzeba wiedzieć?

  1. Zmieniła się nazwa pliku konfiguracyjnego z menu.lst na grub.cfg.
  2. Zmieniły się komendy gruba.
  3. Od teraz (hd0,0) jest (hd0,1)

Tak było w starym grubie:

title Arch Linux
root (hd0,0)
kernel /boot/vmlinuz26 root=/dev/sda1 ro
initrd /boot/kernel26.img

A tak jest w nowym:

menuentry "Arch Linux" --class "arch" {
set root=(hd0,1)
linux /boot/vmlinuz26 root=/dev/sda1 ro
initrd /boot/kernel26.img
}

Opcja class wczytuje ikonki w formacie png z /boot/grub/themes/icons/.
Instalacja gruba (robisz na własne ryzyko, zabezpiecz się w livecd) wygląda tak:

grub-install /dev/sda

Wystrój graficzny..

# Jako ciekawostka, hiddenmenu dla grub2, odkomentuj
# linię zakomentowane podwójnym komentarzem..
##echo -n "Przycisnij [ESC] aby przejsc do menu... "
##if sleep --verbose --interruptible 1; then
## set menuviewer="terminal"
## set timeout=0
##else
# gfxmode = rozdzielczości themesu, inaczej będzie dziwnie
# wyglądać gdy się nie zmieści na ekranie bądź będzie mikrych
# wymiarów.. 640x480 lub 800x600 to kompromis między
# wydajnością, a pięknem niekwadratowej grafiki..
set gfxmode=640x480
insmod biosdisk
insmod pc
insmod font
insmod vbe
insmod gfxterm
insmod videotest
insmod tga
insmod png
insmod gfxmenu
set menuviewer="gfxmenu"
set theme="/boot/grub/themes/arch-black/theme.txt"
set timeout=15
##fi
# [..] #

Gotowe, restart i ku naszym oczom widnieje piękny bootloader (mam nadzieję). ;)

17 sierpnia, 2009

Napi-bash (napi-project)

Napisane w: Linux, Oprogramowanie, Skrypty (1)

Napi-bash (strona domowa) daje nam możliwość szybkiego pobrania napisów do filmów, które mamy na dysku. Nie umie ich wysyłać ale nie miałem takiego zamiaru. Skrypt ma wersję gui i cli, a także specjalną procedurę integracyjną z nautilusem. Są cztery sposoby użycia:

  1. Tryb cli, wszystko na konsoli:
    napi-bash -c <plik> [kolejne pliki]
  2. Tryb gui, informacja w libnotify (powiadomienia systemowe):
    napi-bash -g <plik> [kolejne pliki]
  3. Jako "skrypt nautilusa", wystarczy podlinkować napi-bash do folderu ~/.gnome2/nautilus-scripts/ (będzie działał jak wywołany z opcją "-g").
  4. Zrobić albo plik .desktop umieszczający ikonkę w menu programy albo skrót klawiszowy w twoim środowisku graficznym (wymagany zenity dla okna wyboru pliku): napi-bash -g

Nautilus, skróty klawiszowe: Jeżeli mamy uaktywnione dynamiczne skróty klawiszowe, wystarczy wejść do menu "Plik → Skrypty", zaznaczyć podlinkowany wcześniej skrypt i nacisnąć swoją kombinację klawiszy.

Na stronie domowej można obejrzeć przykładowe zrzuty ekranu, changelog oraz pobrać program.

Ostatnio przeglądałem nowe opcje konfiguracyjne dla gtkrc i przyszło mi do głowy aby poszukać tego w google, a nie dokumentacji GNOME.. Wiele stron z pierwszych miejsc nie opisuje tego w sposób prawidłowy lub wyczerpujący, a przecież to jest proste jak można wywnioskować po przeczytaniu dokumentację GNOME (powyższy link). Opiszę tutaj najważniejsze (według mnie) opcje:

# Motyw dla aplikacji gtk:
gtk-theme-name = "ClearGlow Green"
# Motyw ikonek:
gtk-icon-theme-name = "gnome-wise"
# Styl ikonek na paskach narzędzi: 0 = tylko ikonki; 1 = tylko tekst;
# 2 = tekst pod ikonkami; 3 = tekst obok ikonek
gtk-toolbar-style = 3
# Ikonki na przyciskach: 1 = Wł; 0 = Wył
gtk-button-images = 1
# Motyw kursorka myszy (mam zakomentowane - ustawione w xorg):
#gtk-cursor-theme-name = "cos"
# Rozmiar kursorka (jak powyżej):
#gtk-cursor-theme-size = 24
# Domyślna czcionka:
gtk-font-name = "Liberation Sans 12"
# Dpi (1024 * dpi[px])
gtk-xft-dpi = 86016
# Hinting: 1 = Wł; 0 = Wył
gtk-xft-hinting = 1
# Hinting styl: hintnone = brak; hintslight = lekki;
# hintmedium = średni; hintfull = pełny
gtk-xft-hintstyle = hintslight
# Wygładzanie: 1 = Wł; 0 = Wył
gtk-xft-antialias = 1
# Dynamiczne skróty w menu: 1= Wł; 0 = Wył
gtk-can-change-accels = 1
# Dźwięki: 1 = Wł; 0 = Wył
gtk-enable-event-sounds = 0

Domyślny plik konfiguracyjny ustawia się przy pomocy zmiennej, należy ją eksportować jako środowiskową: export GTK2_RC_FILES="/ścieżka/do/pliku" i wkleić powyższe opcje do tego pliku. Można też na samym końcu tego pliku dodać np. include="/ścieżka/do/innego/pliku" - od teraz gtk będzie podstawiał zawartość tego pliku w miejsce linijki z include, a w nim może być coś jak załóżmy naprawa polskich czcionek w xmms:

# GTK 1
style "user-font"
{
# Wygenerowane przy pomocy xfontsel z pakieu xorg-utils
fontset="-adobe-helvetica-medium-r-normal-*-*-100-*-*-p-*-iso10646-1"
}
widget_class "*" style "user-font"

24 lutego, 2009

Dradio ("radio" na ncurses)

Napisane w: Internet, Linux, Skrypty (1)

Ostatnio niechcący natrafiłem w polskim repo Archa na mały skrypt o nazwie "radio", trochę on mało wygodny pomyślałem, z ciekawości zajrzałem do środka, to co zobaczyłem wzbudziło we mnie "fuj" (o gustach się nie dyskutuje). Pod wpływem chwili napisałem ten skrypt, dłużej pisałem ten komentarz, może to przez późną porę 3:30 w nocy. Wracając do skryptu: użytkownik dostaje prosty konfig (możliwość dodania swoich stacji), interface na ncurses, posortowaną listę, itd.

Kod programu:

#!/bin/bash
##################################################################
# Nazwy i adresy stacji radiowych zaczerpnięte ze skryptu:       #
# http://www.supermegazord.pl/paczki/radio/                      #
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
# Autor: 3ED <krzysztof1987@gmail.com>  http://3ed.jogger.pl/    #
##################################################################

# Lokalizacje radiowych list
for i in "/usr/share/dradio/dradio.lista" "$HOME/.dradio.lista"; do
	if [ -r "$i" ]; then . $i; fi
done

play() {
	dialog --infobox 'Odtwarzam strumień:
'"$2"'

>>> '"$1"' <<<

Aby przerwac i powrocic do menu nacisnij "q"
Regulacja glosnosci "vol- 9" i "vol+ 0"
Pauza "p", wyciszenie "m"' 10 50
mplayer -really-quiet $2 &> /dev/null
}

typeset tmp=/tmp/.radio.name
typeset -i e=0

until [ "$e" != "0" ]; do
	e=1
	eval $(echo 'dialog --cancel-label "Zakończ" --ok-label "Odtwarzaj" --menu "Wybierz stację" 24 40 40 '$(
		for i in ${!NAME[*]}; do echo '"'"${NAME[$i]}"'" ""'; done|sort
	)' 2> $tmp; e=$?')
	if [ "$e" != "0" ]; then
		break
	else
		e=1
	fi
	NAMESEL="$(cat $tmp)"
	for i in ${!NAME[*]}; do
		if [ "${NAME[$i]}" = "${NAMESEL}" ]; then
			e=0
			play "${NAME[$i]}" "${ADRESS[$i]}"
		fi
	done
done
clear

Lista stacji radiowych:

# /usr/share/dradio/dradio.lista
#  Konfiguracja radiowej listy

NAME+=("Radio Zet")
ADRESS+=("http://www.radiozet.pl/content/stream/radiozet.pls")

NAME+=("RMF FM")
ADRESS+=("http://213.251.141.62:8000/")

NAME+=("POLSKASTACJA Best of 80 90")
ADRESS+=("http://polskastacja.pl/play/aac_np.pls")

NAME+=("Radio Złote Przeboje")
ADRESS+=("http://lodz.radio.pionier.net.pl:8000/pl/zloteprzeboje.ogg")

NAME+=("Polskastacja Muzyka na Topie")
ADRESS+=("http://polskastacja.pl/play/aac_mnt.pls")

NAME+=("Planeta fm")
ADRESS+=("http://213.251.141.82:8150")

NAME+=("Radiostacja")
ADRESS+=("http://213.251.141.82:8150")

NAME+=("Radio Eska")
ADRESS+=("http://warszawa1-1.radio.pionier.net.pl:8000/eska-warszawa.ogg")

NAME+=("Antyradio")
ADRESS+=("http://213.251.138.121:7000")

NAME+=("Tylko Polskie Przeboje")
ADRESS+=("http://polskastacja.pl/play/aac_tpp.pls")

NAME+=("Best stacja")
ADRESS+=("http://www.beststacja.net.pl/48.m3u")

NAME+=("TOK FM")
ADRESS+=("http://sask1-3.radio.pionier.net.pl:8000/pl/radiotok.ogg")

NAME+=("Jungletrain")
ADRESS+=("http://stream1.jungletrain.net:8000")

NAME+=("Bassdrive")
ADRESS+=("http://uk.streams.bassdrive.com:8000")

NAME+=("Radio Team")
ADRESS+=("http://www.emiter.teamradio.pl:8095")

NAME+=("Art Radio")
ADRESS+=("http://www.radioart.pl/radioART_jedynka.m3u")

NAME+=("Radio Luz")
ADRESS+=("http://radioluz.pwr.wroc.pl/listen.pls")

NAME+=("Radio Afera")
ADRESS+=("http://lodz.radio.pionier.net.pl:8000/pl/afera.ogg")

NAME+=("Radio Akadera")
ADRESS+=("http://lodz.radio.pionier.net.pl:8000/pl/akadera.ogg")

NAME+=("Radio Centrum")
ADRESS+=("http://www.centrum.fm/ogg96.m3u")

NAME+=("Roxyfm")
ADRESS+=("http://lodz.radio.pionier.net.pl:8000/pl/roxyfm.ogg")

NAME+=("Radio horyzont")
ADRESS+=("http://radiohoryzont.net:9050")

NAME+=("Radio merkury")
ADRESS+=("http://lodz.radio.pionier.net.pl:8000/pl/merkury.ogg")

NAME+=("Radio kolor")
ADRESS+=("http://radiokolor.streamhost.pl:8074")

NAME+=("Idobi Radio")
ADRESS+=("http://72.13.82.202:80")

NAME+=("Radio Zak")
ADRESS+=("http://lodz.radio.pionier.net.pl:8000/radiozak.ogg")

NAME+=("Radio dla Ciebie")
ADRESS+=("http://sc9232.xpx.pl:9232")

NAME+=("Nectarine")
ADRESS+=("http://nectarine.sik.fi:8002/live.mp3")

NAME+=("Radio Wa Ma")
ADRESS+=("http://213.251.139.121:9500")

NAME+=("Radio Ławeczka")
ADRESS+=("http://www.laweczka.net/laweczka.m3u")

NAME+=("Radio Maryja")
ADRESS+=("mms://195.94.205.211/rm")

URxvt to minimalistyczny ale funkcjonalny emulator terminala pod X. Opiszę tu podstawową konfigurację tego termiala jako komentarze do konfiguracji..

Najpierw wspomnę może o sposobie jego konfiguracji. Jest to plik ~/.Xdefaults i aby go przeładować po wprowadzeniu zmian trzeba jeszcze uruchomić polecenie: xrdb -load ~/.Xdefaults. Plik ten jest plikiem globalnym, mogą w nim znajdować się opcje konfiguracyjne innych programów.

! Ustawienia biblioteki libxft - czcionka
Xft.antialias:   true
Xft.hinting:     true
Xft.hintstyle:   0
Xft.dpi:         81

! mój konfig URxvt
URxvt.termName: rxvt
! ma być przezroczysty?
URxvt.transparent: true
! procentowo przezroczystość..
URxvt.shading: 40
! twoje locale
URxvt.imLocale: pl_PL.UTF-8
! styl suwaka
URxvt.scrollstyle: plain
URxvt.secondaryScroll: true
! ma być suwak?
URxvt.scrollBar: true
! po prawej stronie?
URxvt.scrollBar_right: true
! kolor suwaka
URxvt.scrollColor: white
! ile ma pamiętać linijek?
URxvt.saveLines: 5000
! jakich wymiarów ma wyświetlać okno?
URxvt*geometry: 80×40
! zwykła czcionka
URxvt*font: xft:Monospace:pixelsize=12:antialias=true:hinting=true
! czcionka pogrubiona
URxvt*boldFont: xft:Monospace:pixelsize=12:antialias=true:bold:hinting=true
! czcionka pochyła
URxvt*italicFont: xft:Monospace:pixelsize=12:antialias=true:italic:autohint=true:hinting=true
! pogrubiona i pochyła
URxvt*bolditalicFont: xft:Monospace:pixelsize=12:antialias=true:bold:italic:autohint=true:hinting=true
URxvt.scrollTtyOutput: false
URxvt.scrollWithBuffer: false
! czy przesunąć na dół gdy piszesz?
URxvt.scrollTtyKeypress: false
! scroll reaguje na lewy myszki?
URxvt*jumpScroll: true
! rozszerzenia perlowe, (1) taby tekstowe, (2, 3) podmienianie
URxvt*perl-ext-common: tabbed,selection-autotransform,matcher
! podmienianie dla linków, uruchom fx
URxvt*urlLauncher: firefox
! ^^ uruchamianie lewym myszy
URxvt*matcher.button: 1
! kolor paska fg - napisy, bg - tło
URxvt*tabbed.tabbar-fg: 79
URxvt*tabbed.tabbar-bg: 0
! aktywowane przyciski
URxvt*tabbed.tab-fg: 0
URxvt*tabbed.tab-bg: 79
! kolory dla konsoli
URxvt*background: #222222
URxvt*foreground: #ffffff
URxvt*color0:     #000000
URxvt*color1:     #9e1828
URxvt*color2:     #aece92
URxvt*color3:     #968a38
URxvt*color4:     #414171
URxvt*color5:     #963c59
URxvt*color6:     #418179
URxvt*color7:     #bebebe
URxvt*color8:     #666666
URxvt*color9:     #cf6171
URxvt*color10:    #c5f779
URxvt*color11:    #fff796
URxvt*color12:    #4186be
URxvt*color13:    #cf9ebe
URxvt*color14:    #71bebe
URxvt*color15:    #ffffff

15 lutego, 2009

aurpac

Napisane w: Arch Linux, Linux, Oprogramowanie, Skrypty (1)

First public released aurpac. This is Light'n'fast manager aur and pacman repository. Now pacman is used only for search and remove packages, but this is verion 0.1. ;)

Features in this verion: coloring outputs, very fast searching tool looks like pacman (-Ss and -Ssp), installing (with deps) from aur (-S), upgrading (-Su), printing information about package (-Si), all from pacman -R*.


Pierwsze publiczne wydanie aurpac. Jest to lekki i szybki menadżer repozytoriów aur i pacmana. Obecnie pacman jest używany tylko do wyszukiwania i usuwania paczek, ale to dopiero wersja 0.1.

Nowości w tej wersji: koloruje output, bardzo szybkie narzędzie do wyszukiwania w aur wyglądające jak pacman (-Ss i -Ssp), instalowanie (z zaleźnościami) z aur (-S), aktualizowanie (-Su), wyświetlanie informacji o pakiecie (-Si), wszystko z pacman -R*.


Get source/żródła from aur site.

Cytat:
"Wyobraź sobie, że jesteś ministrem edukacji biednego kraju i mając ograniczony budżet masz udoskonalić system szkolnictwa. Wiesz, jak ważne są komputery w nauczaniu, ponadto zdajesz sobie sprawę, że niedostarczenie odpowiedniej infrastruktury informatycznej dla młodzieży będzie niosło za sobą poważne konsekwencje dla twojego kraju na całe pokolenia. Co mogłoby się wydarzyć, gdybyś nie miał świadomości istnienia ruchu Open Source? Najprawdopodobniej skończyłbyś wydając grube pieniądze na oprogramowanie dla szkolnych komputerów, a cięcia kosztów pozwoliłyby na dostarczenie jedynie części (jakże potrzebnych) komputerów. W ten sposób musiałbyś stawić czoła dwóm opcjom: albo tylko część szkół wyposażona jest w komputery, albo dziesięcioro dzieci tłoczy się przed jedną maszyną."

Czytaj więcej.. (jakilinux.pl)


Komentarz odnośnie powyższego artykułu:
Dodatkowo trzeba podkreślić, że nie tylko biedne kraje wybierają Linuksa, przykładem niech będzie choćby Linux w japońskich szkołach i skutek dla MS. Jak widać, nie dotyczy to jedynie biednych krajów.. Wydaje mi się że coraz więcej osób ma okazję przekonać się do tego systemu i ten trend się utrzyma dopóki w tych krajach będą decydentami inteligentni ludzie stawiający na rozwój własnych państw..

Komentarz ogólny, niezależnie od tego czego używasz, wiedz że:
GNU/Linux jest przede wszystkim świetnym systemem operacyjnym i mocną alternatywą dla Windowsa.. Nie warto opierać się na mitach czy własnych wyobrażeniach, jest on za darmo (w pełni legalnie), możesz pobrać, używać i nie martw się, że będzie za bardzo skomplikowany ponieważ to nie prawda (najprawdopodobniej ta informacja wypłynęła od MS w celu spowolnienia rozwoju konkurencji na komputerach domowych). Co prawda, kilkoma rzeczami to się różni (Linux nie jest klonem Windowsa) ale masz okienka, dużo aplikacji (jest możliwość prostego uruchomienia większości windowsowych aplikacji), myszkę oraz polski interface, co stoi na przeszkodzie?

12 października, 2008

openbox-gnome-places

Napisane w: Arch Linux, Linux, Skrypty (1)

Screenshot

Narzędzie to służy do wyświetlania w menu "Miejsca" (en: "Places", możesz nazwać inaczej), podstawowe pozycje jak "Domowy" (en: "Home"), czy wyszukiwanie plików, itp. oraz dodatkowe podmenu: "Zakładki" (en: "Bookmarks") oraz "Ostatnio używane" (en: "Recently used"). Te dwa podmenu są generowane automatycznie na podstawie mechanizmów większości przeglądarek plików opartych na gtk, takich jak np: nautilus, thunar, pcmanfs, itp. oraz dolphin (KDE4, nie testowane). Generowane są przy pomocy regexpów tak by menu wyświetlało się jak najszybciej jest to możliwe (do tego perla użyłem).

Plik konfiguracyjny jest bardzo prosty, w części "opcje podstawowe" można wybrać polecenia, które będą wywoływane podczas konkretnych akcji, np: podczas uruchamiania "Domowy" standardowo zostanie wywołany "nautilus --no-desktop", można zmienić to polecenie np. na "pcmanfs", itd. To samo tyczy się innych opcji.

Druga część pliku to "opcje zaawansowane", tutaj jest miejsce na dopisanie przy użyciu echo lub wbudowanych funkcji, dodatkowych opcji, lub ich modyfikacja. Opcja: "print_item <name> <cmd> [path]" służy po prostu do wyświetlania pozycji, mogą one być dowolnymi programami, oczywiście. "Path" ("/ścieżka/do/") nie jest wymagany, a "name" służy do określania nazwy (proszę się nie martwić o te $"śmieszne" parametry, one po prostu pobierają ich polskie odpowiedniki przy pomocy gettext, jest to zwyczajny tekst). Opcja "seperator" służy tylko i wyłącznie do oddzielania poziomymi krechami, pozycji. "bookmarks_menu" i "recentlyused_menu" generują automatycznie zawartość dla wcześniej wspomnianych podmenu.

Ta malutka aplikacja dostępna jest w AUR, zapraszam do testów.

Openbox od wersji 3.4.7 posiada program gdm-control, który potrafi skonfigurować tak GDM, że gdy zakończymy sesje, wykona on ustawioną mu akcję. Oczywiście jak na news przystało, ciekawe, ciekawe, ale jak u licha tego używać? Można zrobić wpisy w menu, coś na podobieństwo tego:

<item label="Wyłącz komputer">
	<action name="Execute">
		<execute>
			gdm-control --shutdown && openbox --exit
		</execute>
	</action>
</item>

Szczerze? Nie podoba mnie się to! Postanowiłem napisać małą aplikacyjkę (o ile można to tak nazwać).. Moim wyborem padł gtkdialog i glade. Tak wygląda chwilka klikania (lub "mlaskania urządzeniem wskazującym" - wyborne jabłko) w glade:
openbox-shutdowner by 3ED
a tak wygląda wygenerowany przez niego kod xml:

<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">

<glade-interface>

<widget class="GtkWindow" id="MAIN_WINDOW">
  <property name="width_request">620</property>
  <property name="title">Wy&#x142;&#x105;cznik openbox</property>
  <property name="icon_name">application-exit</property>
  <property name="type">GTK_WINDOW_TOPLEVEL</property>
  <property name="window_position">GTK_WIN_POS_CENTER</property>
  <property name="modal">False</property>
  <property name="resizable">False</property>
  <property name="destroy_with_parent">False</property>
  <property name="decorated">True</property>
  <property name="skip_taskbar_hint">False</property>
  <property name="skip_pager_hint">False</property>
  <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
  <property name="focus_on_map">True</property>
	<property name="urgency_hint">True</property>
	    <child>
      <widget class="GtkVBox" id="vbox1">
        <property name="visible">True</property>
        <child>
          <widget class="GtkHButtonBox" id="hbuttonbox1">
            <property name="visible">True</property>
            <property name="border_width">6</property>
            <child>
              <widget class="GtkButton" id="button1">
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
                <property name="response_id">0</property>
                <signal name="clicked" handler="gdm-control --none"/>
                <signal name="clicked" handler="openbox --exit"/>
                <signal name="clicked" handler="exit:Normal"/>
                <child>
                  <widget class="GtkImage" id="image1">
                    <property name="visible">True</property>
                    <property name="icon_size">6</property>
                    <property name="pixel_size">128</property>
                    <property name="icon_name">system-log-out</property>
                  </widget>
                </child>
              </widget>
            </child>
            <child>
              <widget class="GtkButton" id="button2">
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
                <property name="response_id">0</property>
                <signal name="clicked" handler="gnome-screensaver-command -l"/>
                <signal name="clicked" handler="exit:system-lock-screen"/>
                <child>
                  <widget class="GtkImage" id="image2">
                    <property name="visible">True</property>
                    <property name="pixel_size">128</property>
                    <property name="icon_name">system-lock-screen</property>
                  </widget>
                </child>
              </widget>
              <packing>
                <property name="position">1</property>
              </packing>
            </child>
            <child>
              <widget class="GtkButton" id="button3">
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
                <property name="response_id">0</property>
                <signal name="clicked" handler="gdm-control --reboot"/>
                <signal name="clicked" handler="openbox --exit"/>
                <signal name="clicked" handler="exit:Normal"/>
                <child>
                  <widget class="GtkImage" id="image3">
                    <property name="visible">True</property>
                    <property name="icon_size">0</property>
                    <property name="pixel_size">128</property>
                    <property name="icon_name">view-refresh</property>
                  </widget>
                </child>
              </widget>
              <packing>
                <property name="position">2</property>
              </packing>
            </child>
            <child>
              <widget class="GtkButton" id="button4">
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
                <property name="response_id">0</property>
                <signal name="clicked" handler="gdm-control --shutdown"/>
               <signal name="clicked" handler="openbox --exit" />
              <signal name="clicked" handler="exit:Shutdown"/>
                <child>
                  <widget class="GtkImage" id="image4">
                    <property name="visible">True</property>
                    <property name="icon_size">0</property>
                    <property name="pixel_size">128</property>
                    <property name="icon_name">system-shutdown</property>
                  </widget>
                </child>
              </widget>
              <packing>
                <property name="position">3</property>
              </packing>
            </child>
          </widget>
        </child>
        <child>
          <widget class="GtkHBox" id="hbox1">
            <property name="visible">True</property>
            <child>
              <widget class="GtkLabel" id="Akcja">
                <property name="visible">True</property>
              </widget>
              <packing>
                <property name="padding">6</property>
              </packing>
            </child>
            <child>
              <widget class="GtkButton" id="Anuluj">
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="has_default">True</property>
                <property name="receives_default">True</property>
                <property name="response_id">0</property>
                <signal name="clicked" handler="exit:Anuluj" />
                <child>
                  <widget class="GtkHBox" id="hbox2">
                    <property name="visible">True</property>
                    <child>
                      <widget class="GtkImage" id="Anuluj_image">
                        <property name="visible">True</property>
                        <property name="stock">gtk-cancel</property>
                      </widget>
                      <packing>
                        <property name="expand">False</property>
                        <property name="fill">False</property>
                        <property name="padding">3</property>
                      </packing>
                    </child>
                    <child>
                      <widget class="GtkLabel" id="Anuluj_label">
                        <property name="visible">True</property>
                        <property name="label" translatable="yes">Anuluj</property>
                        <property name="justify">GTK_JUSTIFY_CENTER</property>
                      </widget>
                      <packing>
                        <property name="fill">False</property>
                        <property name="padding">3</property>
                        <property name="position">1</property>
                      </packing>
                    </child>
                  </widget>
                </child>
              </widget>
              <packing>
                <property name="expand">False</property>
                <property name="fill">False</property>
                <property name="padding">6</property>
                <property name="position">1</property>
              </packing>
            </child>
          </widget>
          <packing>
            <property name="expand">False</property>
            <property name="padding">6</property>
            <property name="position">1</property>
          </packing>
        </child>
      </widget>
    </child>

</widget>

</glade-interface>

Tak to się uruchamia:

gtkdialog --glade-xml=PATHTOFILE/shutdowner.glade \
--program=MAIN_WINDOW

Prawda, że bułeczka z masłem?

Opiszę tutaj moją konfigurację niezależną od WM/DE. Można to sobie dowolnie zmodyfikować.

Scroll_Lock: Należy do pliku '~/.xmodmaprc' dopisać taką linijkę:

add mod3 = Scroll_Lock

Nazwy klawiszy multimedialnych: Programem xev uruchomionym na konsoli należy sprawdzić 'keycode' przycisków (te białe okienko musi być aktywne, wyniki na konsoli). Później wrzucić keykode do '~/.xmodmaprc' wraz z nową nazwą. Ja mam tak:

keycode 160 = XF86AudioMute
keycode 174 = XF86AudioLowerVolume
keycode 176 = XF86AudioRaiseVolume
keycode 162 = XF86AudioPause
keycode 144 = XF86AudioPrev
keycode 153 = XF86AudioNext

Wydaje mi się, że keycode są w każdej klawiaturze takie same, klawiatury różnią się tylko ilością przycisków, oto niektóre z nich:

keycode 234 = XF86Back
keycode 233 = XF86Forward
keycode 232 = XF86Stop
keycode 231 = XF86Refresh
keycode 229 = XF86Search
keycode 230 = XF86Favorites
keycode 178 = XF86HomePage
keycode 236 = XF86Mail
keycode 164 = XF86AudioStop

Akcje klawiszy: Program xbindkeys posłuży do podczepienia pod klawisze dowolnych poleceń. Można to oczywiście też zrobić w swoim WM ale oczywiście to tylko dodatkowa robota, za każdą zmianą trzeba przypisywać od nowa, a tu "raz ciach i koniec".

#Ustaw klawisz jako rozpoznawalny modyfikator dla xbindkeys
#keystate_numlock = enable
#keystate_capslock = enable
keystate_scrolllock= enable
#
# /-----------------------\
# | Klawisze    | Nazwa   |
# |-------------|---------|
# | CTRL        | Control |
# | Shift       | Shift   |
# | ALT (Lewy)  | Alt     |
# | ALT (Prawy) | Mod5    |
# | WIN         | Mod4    |
# | Scroll Lock | Mod3    |
# | Num Lock    | Mod2    |
# \-----------------------/
#
# Multimedialne na mojej klawiaturze:
# XF86AudioLowerVolume, XF86AudioRaiseVolume, XF86AudioMute,
# XF86AudioPause, XF86AudioPrev, XF86AudioNext
# ---------------------------------------------------------
# "Tutaj polecenie. "
#   XF86AudioLowerVolume + Control
#   Jeśli nie chcesz to olej plus i wszystko po prawej..

Gotowe skrypty bash: Dwa mojego autorstwa skrypciki na licencji GPL3:

#!/bin/bash
# Klient MPD
shownotify() {
	notify-send "${sinf[1]}" "${sinf[0]}"
}

xselcopy() {
	echo "${sinf[0]}"|xsel
}

for i in $@; do
	if [ "$i" = "-s" ]; then
		shift
		opts[0]="shownotify"
	elif [ "$i" = "-c" ]; then
		shift
		opts[1]="xselcopy"
	fi
done

eval $(echo "sinf=(\\"; mpc $@|sed '1,2!d; s/\(^.*$\)/"\1"/g; s/$/ \\/g'; echo ")")

for i in ${opts[*]}; do	$i; done

# Sposób użycia:
# 	nazwa_tego_skryptu [-s] [-c] [mpc_opts]
#
# Opcje:
# 	-c   Kopiuje tytuł do schowka
# 	-s   Wyświetla chmurkę z nazwą piosenki i postępem
#!/bin/bash
# sterowanie głośnością.. (trochę stary skrypt ;))
volmove="4" # procentowy przeskok
MUTEFILE="/tmp/xbindkeys.mute.tmp" # zapisuje poziom przez wyciszeniem
OSDFILE="/tmp/xbindkeys.osd.tmp" # zapisuje pid skryptu
OSDSLEEP=(3 3)     # ('czas do chmurki' 'czas jej wyświetlania')
MIXER="Master Playback Volume" # nazwa kontrolera, patrz amixer controls

if [ -f $OSDFILE ]; then
	kill `cat $OSDFILE`
	rm $OSDFILE
fi

printvol() {
if [ ! -f $OSDFILE ]; then
	echo $$ > $OSDFILE
	sleep ${OSDSLEEP[0]}s
	rm $OSDFILE
	notify-send -t ${OSDSLEEP[1]}000 $"$1"
fi
}

GETVOL() {
amixer cget name="$MIXER"|sed '/:[[:space:]]values=/!d; s/.*values=\(.*\)/\1/g'
}

SETVOL() {
amixer cset name="$MIXER" $1|sed '/:[[:space:]]values=/!d; s/.*values=\(.*\)/\1/g'
}
function mute {
if [ "$(GETVOL)" = "0" ]; then 
  if [ -e "$MUTEFILE" ]; then 
		local -i VOL
    VOL="$(SETVOL $(cat $MUTEFILE))"
		printvol "Anulowanie wyciszenia: ${VOL}%"
    rm $MUTEFILE
  fi
else
  GETVOL > $MUTEFILE 
  SETVOL 0
	printvol "Wyciszenie.."
fi
}
function vol {
	local -i VOL
	VOL="$(SETVOL $[$(GETVOL)${1}volmove])"
	printvol "Sila dzwieku: ${VOL}%"
}

if   [ "$1" = "+" ]; then vol +
elif [ "$1" = "-" ]; then vol -
elif [ "$1" = "mute" ]; then mute
fi
# Sposób użycia:
# 	nazwa_tego_skryptu [[-] albo [+] albo [mute]]

Edytowany: 10 grudnia 2008

Openbox to funkcjonalny menadżer okien, choć nie ma co pokazywać zrzutek ekranu bo całością steruje się za pomocą myszki bądź klawiatury i zrzut byłby tylko tapetą. Pokaże za to moją konfigurację..

Na początek będzie to plik ~/.config/openbox/autostart.sh:

# This shell script is run before Openbox launches.
# Environment variables set here are passed to the Openbox session.

# D-bus
if which dbus-launch >/dev/null && test -z "$DBUS_SESSION_BUS_ADDRESS"; then
       eval `dbus-launch --sh-syntax --exit-with-session`
fi

# Make GTK apps look and behave how they were set up
export GTK_RC_FILES="$HOME/.gtkrc-1.2-openbox"
export GTK2_RC_FILES="$HOME/.gtkrc-2.0-openbox"
declare -x GTK_RC_FILES GTK2_RC_FILES

# Preload stuff for KDE apps
if which start_kdeinit >/dev/null; then
  LD_BIND_NOW=true start_kdeinit --new-startup +kcminit_startup &
fi

#Set wallpaper
hsetroot -fill $HOME/openbox.jpg #zmień to

#Startup trayer
trayer --align right --edge bottom --widthtype request --transparent true --alpha 255 --SetDockType false &

Od razu wspomnę o ~/.gtkrc-2.0-openbox:

# Motyw
gtk-theme-name = "Cillop"

# Ikonki
gtk-icon-theme-name = "Tango"
gtk-icon-sizes = "panel-menu=16,16"
gtk-toolbar-style = 3

# Czcionka
gtk-font-name="Sans 10"

Tak można ustawiać themesy dla różnych WM/DE..

A oto przykładowy plik menu.xml:

<?xml version="1.0" encoding="utf-8"?>
<openbox_menu xmlns="http://openbox.org/3.4/menu">
	<menu id="apps-menu" label="Ulubione">
		<item label="Terminal">
			<action name="Execute">
				<execute>
					gnome-terminal
				</execute>
			</action>
		</item>
		<item label="Firefox">
			<action name="Execute">
				<execute>
					firefox
				</execute>
			</action>
		</item>
		<item label="Gajim">
			<action name="Execute">
				<execute>
					gajim
				</execute>
			</action>
		</item>
	</menu>
	<menu id="root-menu" label="Openbox 3">
		<separator label="Openbox"/>
		<item label="Aplikacje">
			<action name="Execute">
				<execute>
					/usr/lib/gnome-main-menu/application-browser
				</execute>
			</action>
		</item>
		<item label="Pliczki">
			<action name="Execute">
				<execute>
					thunar
				</execute>
			</action>
		</item>
		<menu id="apps-menu"/>
		<separator/>
		<menu id="client-list-menu"/>
		<menu id="root-menu-783347" label="Configure">
			<item label="ObMenu">
				<action name="Execute">
					<execute>
						obmenu
					</execute>
				</action>
			</item>
			<separator/>
			<item label="ObConf">
				<action name="Execute">
					<execute>
						obconf
					</execute>
				</action>
			</item>
			<item label="Reconfigure">
				<action name="Reconfigure"/>
			</item>
		</menu>
		<separator/>
		<item label="Exit">
			<action name="Exit"/>
		</item>
	</menu>
</openbox_menu>

"application-browser" to nic innego jak okienko od "gnome-main-menu", można sobie tu wstawić coś innego, zastępuje mi menu w razie gdybym nie pamiętał nazwy programu czy coś..

Oczywiście plik rc.xml ustawcie wedle własnego uznania, ja dla wygody ustawiłem sobie margines pulpitu na 1px z każdej strony. Skróty klawiszowe robi się tak:

    <keybind key="A-Return">
      <action name="ToggleFullscreen"/>
    </keybind>

Jak widać, konfiguracja to xml, a nazwa przycisku enter to "Return", Win to "W", Alt to "A"..

Oczywiście wszystko można ładnie edytować za pomocą dwóch narzędzi: "obconf" i "obmenu" (niestety oprócz skrótów klawiszowych)..

Cinelerra jest to prosty i potężny, program do obróbki wideo. Może ma trochę spartański wygląd ale nie to tu się liczy, prawda?

Zrzut okna

Najpierw trzeba to zainstalować.. W Arch Linuksie sprawa jest KISS ponieważ program znajduje się w repo [community]. Dla ubuntu będzie trzeba dodać dodatkowe repozytorium z programem.

sudo wget http://akirad.cinelerra.org/dists/hardy.list -O /etc/apt/sources.list.d/akirad.list
wget -q http://akirad.cinelerra.org/dists/akirad.key -O- | sudo apt-key add - && sudo apt-get update

Oprócz tego zainstalujemy jeszcze jeden program, będzie nim avidemux, który posłuży do zapisania wyniku cinelerri do satysfakcjonującego nas formatu.

Zanim przejdziemy do tworzenia slideshow, przydałoby się przygotować obrazki, a następnie skonfigurować program. Obrazki powinny mieć zbliżone lub większe wymiary niż filmik wynikowy. Prostą metodą przeskalowania zdjęć jest użycie programu convert z pakietu imagemagick, można również skorzystać z programu gimp do retuszu zdjęć przed dodaniem. Zajmę się jednak tylko skalowaniem obrazków. Przykładowo mamy obrazki o wymiarach 1024x768, a film ma mieć 512x384 (4:3). Należy wybrać obrazki, które chcemy dodać do prezentacji kopiując je do nowego katalogu (można użyć funkcji "sort manager" w programie gqview) i utworzyć dodatkowy pusty katalog. Zakładając, że nasze obrazki mają być takiej samej szerokości wykonujemy pętle w terminalu będąc w katalogu ze zdjęciami: 'find -type f -exec convert -resize 512x {} ../pustykatalog/{} \;'. Zdjęcia są przygotowane, jesteś pewien że nie chcesz dodać jakichś plansz witalnych czy napisów końcowych wykonanych w gimpie?

Teraz zajmiemy się konfiguracją cinelerri. W okienku ze ścieżkami wybierz z menu głównego pozycje view i zaznacz jak na obrazku:

Zrzut okna

Przejdź do ustawień czyli "Settings → Preferences" i ustaw tak jak na obrazku pierwszym i drugim oraz wejdź do "Format" w tym samym menu i ustaw jak na obrazku trzecim.

Zrzut okna Zrzut okna Zrzut okna

Zwróć uwagę na opcję: "Import images with a duration of 8.0000 seconds." - czas wyświetlania zdjęcia. Uwaga, szerokość musi być wielokrotnością dodawania 8 do 8. Pozaznaczaj tak na głównym oknie (paski ikonek na okienkach: podgląd i ścieżki) jak w zrzucie okna głównego.

Czas na sklejenie naszych obrazków. Zacznijmy od wczytywania czyli "File → Load files..". Proszę zwrócić uwagę na opcje dodawania nazwaną strategią (insertion strategy). Można tam zaznaczyć: "Replace current project and concatenate tracks" (ustawiałeś już czas wyświetlania zdjęcia, zdjęcia poukładają się jedno za drugim usuwając poprzedni projekt), "Concatenate to existing tracks" (tym razem zdjęcia dodadzą się do już istniejącego projektu), "Create new resources only" (bez automatu układającego zdjęcia, które i tak możesz ręcznie poukładać wybierając z okienka efektów kartę "Media"). Wstaw teraz między obrazki efekty przejścia "Video Transitions" lub zaznacz i prawym przyciskiem nad zaznaczeniem dodaj efekt, lupka służy do edycji, można również prawym myszki..

Ścieżka audio, załaduj plik ze strategią: "Append in new tracks" (dodaj do nowej ścieżki). Możesz ucinać, skracać, wstawiać efekty, itp.

Czas zapisać, aby tego dokonać kliknij: "File → Render", ustaw załóżmy tak by kontener był "Microsoft AVI", dźwięk "MP3 128 kbps" i obraz w "sekwencyjnym jpegu A".

Następnie przy pomocy avidemux przekonwertuj plik na dowolny format, może być xvid i mp3 w kontenerze avi.

Inspiracją do napisania tego tekstu był artykuł Cinelerra is very easy.

"Załóżmy, masz trzy dyski twarde o wielkościach: 80, 40 i 60 GB. I 150 GB plików muzycznych, które należy przechowywać na tych dyskach. Jak to zrobić?

    Znane mi były dwa rozwiązania:
  • trzy oddzielne katalogi "Muzyka", po jednym na każdym systemie plików
  • utworzyć pewnego rodzaju RAID, łącząc wszystkie dyski w macierz.

Pierwszy metoda jest dosyć męcząca, po pierwsze musisz zdecydować w jaki sposób podzielisz dane między dyski i śledzić co jest gdzie przechowywane. Na przykład, możesz zdecydować się na przechowywanie całej kolekcji muzyki klasycznej na pierwszym dysku, a rocka trzymać na drugim. Wtedy może się okazać że na pierwszym brakuje Ci miejsca, a na drugim masz go w nadmiarze. Co wtedy? Linki symboliczne?

Metoda z RAIDem jest wygodniejszym rozwiązaniem ale zawsze ponosisz jakąś stratę (zawodność, mniej miejsca na dysku).

Niedawno znalazłem lepsze rozwiązanie tego problemu: mhddfs. Jest to moduł FUSE, który pozwala łączyć kilka mniejszych plików w jeden wielki, wirtualny, który będzie zawierał wszystkie pliki ze wszystkich partycji. Nawet lepiej, w odróżnieniu od innych podobnych modułów (unionfs?), ten nie ogranicza możliwości dodawania nowych plików do połączonych plików i inteligentnie zarządza tym gdzie te pliki zostaną umieszczone."

Czytaj więcej..

14 kwietnia, 2008

Rzeczpospolita windowsowa

Napisane w: Linux, MiniWykop, Oprogramowanie (1)

"Co by się działo, gdyby rząd zadekretował, że jedynym autem dopuszczonym na polskie drogi jest fiat albo citroën? A jednak pozwalamy, by państwo zmuszało nas do używania systemu operacyjnego Microsoftu"

Gazeta wyborcza [LINK]

11 kwietnia, 2008

Blueflops

Napisane w: Linux (1)

Ostatnio zupełnie przy okazji natrafiłem na ciekawą dystrybucję, zajmuje ona zaledwie dwie dyskietki i oparta jest o system Linux w wersji 2.6.18-ck1. Jej minimalne wymagania to procesor i386 i 16MB RAMu (ewentualnie 8MB plus swap). Zawiera podstawowe narzędzia sieciowe (między innymi "links" dzięki czemu każdy ciasteczkowy potworek będzie w stanie oglądać ASCII-p0rn) oraz prosty w obsłudze konfigurator, który potrafi zapisywać profile od razu na dyskietce. Autor umieścił również skrypt do instalacji dystrybucji na dysk twardy.
Strona główna projektu oraz spis dostępnych sterowników i programów.

Kilka zrzutów ekranu:

Free Image Hosting at www.ImageShack.us Free Image Hosting at www.ImageShack.us Free Image Hosting at www.ImageShack.us Free Image Hosting at www.ImageShack.us Free Image Hosting at www.ImageShack.us Free Image Hosting at www.ImageShack.us Free Image Hosting at www.ImageShack.us Free Image Hosting at www.ImageShack.us Free Image Hosting at www.ImageShack.us

21 listopada, 2007

CDemu: emulacja napędu CD

Napisane w: Arch Linux, Linux (1)

Każdy pewnie zna program deamon-tools z systemu Windows ale nie każdy wie jak takie coś zrobić pod Linuksem. Montowanie z loopem ma jedną dużą wadę - nie umie montować innych obrazów CD niż jeden słuszny ISO. Niestety w naszych czasach istnieje wiele nie powiem że bez sensownych (bo przecież po co korzystać z ISO jak można zrobić coś innego) ale innych formatów których nie da się zamontować w loopie. Z pomocą przychodzi cdemu. Aby zainstalować program potrzebne są 4 pakiety: "vhba", "libmirage", "cdemud" i "cdemu-client". (W dystrybucji Arch Linux znajdziesz je w AUR..) Po zainstalowaniu trzeba dodać daemon "cdemud" do initu (za hal'em) i uruchomić. Następnie trzeba dodać następujący wpis w "/etc/fstab":

/dev/scd0  /media/cdemu      auto  ro,users,noauto,nosuid,unhide,iocharset=iso8859-2 0 0

Gotowe.

Polecenie "cdemu" służy do ładowania obrazów z poziomu cli. Można teraz spokojnie dodać do menu nautilusa bądź thunara akcję do montowania obrazów CD. Przedstawie tu tylko wpisy dla thanara ponieważ to jego używam obecnie..

Edytuj akcję → Podstawowe
Nazwa:
Zamontuj..
Opis:
Zamontuj obraz płyty..
Polecenie:
cdemu load 0 %f
Ikona:
Ikony urządzeń → cdrom_mount
Edytuj akcję → Warunki pokazania
Wzorzec pliku:
*.b5t;*.b6t;*.ccd;*.cdi;*.cue;*.iso;*.img;*.mds;*.xmd;*.nrg;*.toc;*.bin
Dostępne, gdy zaznaczenie zawiera:
Inne pliki

14 listopada, 2007

videonfo

Napisane w: Linux, Skrypty (1)

To narzędzie służy do wyświetlania informacji o pliku video. Okienko można wygenerować za pomocą zenity lub twojego ulubionego. Potrafi generować pliki .nfo automatycznie. Thunar nie posiada nawet tego pierwsze więc można sobie obie funkcje podpiąć.. Potrzebny jest mplayer, bash.

Przykładowe wpisy w thunarze:
"video.nfo pokaż"
videonfo -z %f
"video.nfo zapisz"
zenity --question --text="Czy napewno chcesz wygenerować plik .nfo dla\n%n?" && videonfo -n %f
#!/bin/bash
#
f_help() {
cat <<EOF
video.nfo wersja 0.0.99.1 (RC) 2007 | 3ED <kas1987@o2.pl>

Składnia: videonfo [OPCJA] [PLIK]
  Możliwa jest tylko jedna opcja i tylko jeden plik na raz.
  Program jest rozprowadzany na licencji GPL2 lub nowszej.

Możliwe opcje:
 -z, --zenity      wyświetli informacje w okienku zenity
 -n, --nfo         zapisze informacje do pliku .nfo

 -h, --help        wyświetli tę informację

EOF
}

f_nfo_top() {
cat <<EOF
 -----------------------------------------------------------
 ##   ##  ##      ##                            ####
 ##   ##          ##                           ##  ##
 ##   ##  ##  ######  #####  ######   ######    ##    ######
 ##   ##  ##  ##  ##  #####  ##  ##    ##  ##  ####   ##  ##
  ## ##   ##  ##  ##  ##     ##  ##    ##  ##   ##    ##  ##
   ###    ##  ######  #####  ###### ## ##  ##   ##    ######
 -----------------------------------------------------------
EOF
}

f_nfo_bottom() {
cat <<EOF
 -----------------------------------------------------------
EOF
}

f_readfile() {
if [ -e "$1" ]; then
	eval $(mplayer -vo null -ao null -frames 0 -identify "$1" 2>/dev/null |sed -ne '/^ID_/ {s/[]()|&;<>`'"'"'\\!$" []/\\&/g;p}')

	ID_FILESIZE="$(echo $(du -h0 "$1")|cut -d\  -f1)"
	NFO_FILENAME="${ID_FILENAME}.nfo"
else
	echo "Plik nie istnieje.."
	exit 1
fi
}

f_print() {
f_readfile "$1"
cat <<EOF
 Rozmiar pliku:  ${ID_FILESIZE}B
 Kontener pliku: $ID_DEMUXER
 Czas trwania:   $[$(echo $ID_LENGTH|cut -d. -f1) / 60] min

 Kodek wideo:    ${ID_VIDEO_FORMAT}
 Wideo bitrate:  $ID_VIDEO_BITRATE bps
 Wymiary obrazu: ${ID_VIDEO_WIDTH}x${ID_VIDEO_HEIGHT}
 Wideo FPS:      $ID_VIDEO_FPS

 Kodek Audio:    $ID_AUDIO_CODEC
 Audio bitrate:  $[ID_AUDIO_BITRATE /1000] kbps
 Audio rate:     $ID_AUDIO_RATE
 Kanałów audio:  $ID_AUDIO_NCH
EOF
}

if [ "$1" = "-h" -o "$1" = "--help" ]; then
	f_help
elif [ "$1" = "-z" -o "$1" = "--zenity" ]; then
	f_print "$2"| \
	zenity --text-info --title="video.nfo" --width="250" --height="380"
elif [ "$1" = "-n" -o "$1" = "--nfo" ]; then
	if [ -e "$2" ]; then
		f_nfo_top > "${2}.nfo"
		f_print "$2" >> "${2}.nfo"
		f_nfo_bottom >> "${2}.nfo"
	else
		f_print
	fi
else
	f_print "$1"
fi

26 października, 2007

Zabawka - wszystko wiedząca kula

Napisane w: Linux, Rozrywka, Skrypty (1)

Zadaj pytanie, a odpowiem na nie..

#!/bin/bash
echo -n "Pytanie: "; read
echo -n "Odpowiedz: "
[ "$[RANDOM % 2+1]" = "1" ] \
&& echo "Nie." \
|| echo "Tak."

26 października, 2007

mpd_add_pls_stream

Napisane w: Linux, Skrypty (1)

Skrypt dla Firefoxa, akcja "otwórz plik w". Dodaje losowy adres strumienia playlisty pls np. ze strony shoutcast do playlisty MPD. Wymagania: mpd, mpc, bash, linux/unix like system.

#!/bin/bash
plsfile="/tmp/playlist.pls"
cat "$@"|grep ^File|sed -e's#^File.*=\(http.*\)#\1#g' > $plsfile
typeset -i maxran random
maxran="`cat $plsfile|wc -l`"
if [ "$maxran" -gt "0" ]; then
	random="$[RANDOM % $maxran+1]"
	addurl="`cat $plsfile|head -n$random|tail -n1`"
	mpc add $addurl
fi

Zalecane uprawnienia dla pliku to 755.

21 września, 2007

GDM i numlock dla wszystkich..

Napisane w: Arch Linux, Linux, Skrypty (1)

Włącza lub wyłącza numlock.
Opcja "1", "true" lub "True" aktywuje.

It enables or disables the numlock.
Options "1", "true" or "True" for enable.

Plik (File): "/etc/gdm/Init/Default" - na samym dole (on bottom):

NUMLOCK="true"
NUMLOCK_BIN="/usr/bin/numlockx"
if [ -f "$NUMLOCK_BIN" -a -n "$NUMLOCK" ] && \
   [ "$NUMLOCK" = "1" -o "$NUMLOCK" = "true" -o  $NUMLOCK" = "True" ]
   then
	$NUMLOCK_BIN on
fi
unset NUMLOCK NUMLOCK_BIN

Aktualizacja: 06 listopad 2007

Skrypt ten wykorzystuje kodeki x264, mp3 oraz kontener avi. Tworzy małe pliczki wideo o dobrej jakości. Posiada opcje do ustawiania jakości wideo i dzwięku. Jest on prostym w obsłudze skryptem bash, wymaga on mplayera, x264, lame. Po uruchomieniu zobaczysz:

flv2x264 version 0.1 2007 | 3ED <kas1987@o2.pl>

Usage:
 flv2x264 [-v <v-br>][-a <a-br>][-o <output>] -i <input>
 flv2x264 -h (or) -V

Options:
 -v   video bitrate [default=280]
 -a   audio bitrate [default=64]
 -o   output avi file
 -i   input flv file

 -h   show help options
 -V   more info about this program

Tworzy on pliczki których rozmiar jest zbliżony do flv (+/- 1MB na 20MB plik flv). Można go również wykorzystać niestandardowo do plików avi, wmv, itp. Dzięki opcji -v ustawisz ilość ramek na sekundę wideo, a dzięki opcji -a ustawisz ilość kb na sekundę dźwięku. Opcja -o nie jest wymagana ale możesz jej użyć by zapisać pod inną nazwą plik wynikowy - w przeciwnym wypadku zapisze się on pod nazwą oryginalną + "2x264.avi" czyli np. "gumisie.flv2x264.avi". Opcją -i służy do określenia pliku do konwertowania czyli np. "gumisie.flv", jest wymagana. Skrypt ten jest objęty licencją GPL2. Można go pobrać stąd: flv2x264.

29 czerwca, 2007

flv2x264

Napisane w: Arch Linux, Linux, Skrypty (1)

x264 to open-sourcowy format jak się okazuje bardzo dobry. Wychodzi bardzo mały plik w dobrej jakości. Postanowiłem napisać sobie skrypt do konwertowania właśnie do tego formatu plików FLV. Dlaczego bez start.sh, getopts nie wykonuje się to nie wiem. W razie czego piszcie mi tu komentarze.. ;) A oto skrypt flv2x264.

Tak powinien wyglądać output po wpisaniu "flv2x264 -h":

flv2x264 version 0.1rc1 2007 | 3ED <kas1987@o2.pl>

Usage:
 flv2x264 [-v <v-br>][-a <a-br>][-o <output>] -i <input>
 flv2x264 [-h]

Options:
 -v   video biterate [default=300]
 -a   audio biterate [default=64]
 -o   output avi file
 -i   input flv file

--20070701--EDIT:
PKGBUILD dla Arch Linux.. Właśnie chodzi o to z tym starterem że wykorzystując PATH systemowy flv2x264.sh nie chciał mi wykonać getopts. Ocb to nie wiem i nie miałem czasu sprawdzić. Jak coś będę wiedział to zaktualizuje pkgbuild i wpis na blogu. Zachęcam do używania i zgłaszania ewentualnych błędów w komentarzach albo na jabberze..

--20070701--EDIT:
Wersja rc2: To ze starterem już nie aktualne.. Dla mnie działa bez niego. Drobne poprawki w kodzie..

Jak dla mnie - [LinuxMCE] wygrywa.. [Zobacz więcej..]

Pomocny program, można go dodać np. do nautilus-actions. Ładne okienko ułatwi i uprzyjemni całą sprawę. Przykład użycia: gtocacp mplayer /katalog/plik. Po zakończeniu się mplayera zostanie wyświetlone okienko w gtk2 odliczające od 60 sekund w dół z 1 sekundową częstotliwością odświeżania pasku postępu oraz informacji pisemnej.
Wymagania: komputer z systemem Linux/BSD oraz program zenity.

#!/bin/bash
#Autor: 3ED

shutdown_command="sudo shutdown -h now" #1
#cancel_command="recordmydesktop $HOME/out.ogg" # ;-)

if [ -z "$@" ];then #2
	echo "gtocacp wersja 0.2.1; Publiczna domena."
	echo "·······································"
	echo "Przykład użycia: $0 mplayer /path/to/video"
	echo
	if [ x$LANG != x"pl_PL.UTF-8" ]; then 
	echo "(uwaga, kodowanie inne niz UTF8)"; fi
	exit 0
fi

"$@" #3
[[ "$?" = 127 ]] && exit 1 #4

( #5
	loop=60
	until [ $loop = 0 ]; do let loop--
	sleep 1s
	echo "$[100-${loop}*100/60]" 
	echo "# Zostało $loop sekund zanim zostanie wyłączony komputer.." 
	done
) |
zenity --progress \ #6
	--title="Wyłącznik czasowy komputera" \
	--text="Zostało 60 sekund zanim zostanie wyłączony komputer.." \
	--percentage=0 --auto-close && $shutdown_command #7

Opis (raczej dla newbie):

  1. Polecenie które zostanie wykonane po zakończeniu odliczania (oczywiście w zmiennej)
  2. Tekst gdy nic nie wpiszemy jako parametr.. ("-z" - puste?)
  3. Nasz parametr czyli polecenie do wykonania
  4. Gdy polecenie zwróci kod 127 skrypt przerwie z kodem 1
  5. Pętla odliczająca 60 razy po 1 sekundzie po czym jest kończona i przerywa zenity
  6. progress - typ okna; title - tytuł okna; tekst - tekst w okienku na start; procentage - od ilu procent pasek postępu zaczyna; auto-close - patrz punkt 5.
  7. Gdy zenity nie zostanie przerwane czyli doliczy do stówki i samo się zamknie zwróci kod 0 czyli po "&&" polecenie zostanie wykonane, gdy klikniesz na anuluj program zwróci kod 1 czyli polecenie po "||" uruchomi się. Np. recordmydesktop - gdyby ktoś chciał coś popatrzeć gdy śpimy to można go nagrać..

Jak widać jest to bardzo prosty skrypt, mam nadzieję że komuś pomogłem, a nawet zachęciłem do konsoli. Myślę nad publikacją większej ilości skryptów i o wiele dłuższych - skomplikowanych ale tutaj? Może jakiś inne miejsce? Co proponujecie?

08 lutego, 2007

Gshutdown w wersji polskiej

Napisane w: Linux, Oprogramowanie (1)

Gshutdown Team zapewnili mnie że moje tłumaczenie trafi do wersji SVN. Chce abyście wyrazili swoje zdanie na temat tego tłumaczenia. Co mam zmienić, a co poprawić?
Zrzuty ekranu:


Jeżeli chcesz mieć to tłumaczenie wystarczy że skopiujesz ten plik do "/usr/share/locale/pl/LC_MESSAGES/".

Aktualizacja: Plik z ostatnią wersji tłumaczenia programu można pobrać stąd KLIK lub z serwera svn projektu. Instrukcja oraz kod źródłowy znajdują się we wnętrzu pliku, tłumaczenie pasuje do ostatniej stabilnej wersji.

30 stycznia, 2007

Superswitcher

Napisane w: Linux, Oprogramowanie (1)

Superswitcher to taki żongler aplikacjami i pulpitami. Coś jak alt+tab/ctrl+alt+na_boki tyle że o wiele fajniejsze. Napisane w gtk+ w C dla Gnome. Okienko podzielone na kolumny gdzie w każdej z kolumn na górze jest kwadracik z numerem (być może w przyszłości coś więcej), a poniżej lista programów. Skróty klawiszowe:

win - wyświetlasz okienko superswitchera (jest możliwość obsługi myszką)
win+*tekst* - wyszukujesz programy po nazwie
win+na_boki - zmieniasz pulpity
win+shift+na_boki - przesuwasz okno
win+shift+ctrl+na_boki - przesuwasz wszystkie okna z biurka
win+góra-dół - wybierasz okienko które ma być aktywowane
win+shift+góra-dół - układasz kolejność okien na liście
win+enter - działa podobnie jak alt+tab
win+shift+enter - to co wyżej tyle że w kierunku przeciwnym
win+page_down - minimalizujesz okienko
win+page_up - maksymalizujesz okienko
win+esc - zamykasz okienko
win+ctrl+esc - zamykasz wszystkie okienka na używanym biurku
win+insert - dodajesz biurko
win+shift+insert - dodajesz biurko i przenosisz tam aktywne okienko
win+shift+ctrl+insert - dodajesz biurko i przenosisz tam wszystkie okienka z biurka
win+del - usuwasz biurko (bez okienek)
win+shift+del - usuwasz wszystkie biurka (bez okienek)
win+shift+ctrl+del - wychodzisz z programu?
win+F[1-12] - przechodzisz do biurka 1-12

Polecam.. Bardzo użyteczny i wygodny program.

13 stycznia, 2007

Mój mplayer..

Napisane w: Linux, Oprogramowanie (1)

Mam dobry humor i myślę sobie, a co tam mi zależy. Dużo ludzi szczególnie początkujących ma problemy ze skonfigurowaniem mplayera więc podam co i jak. Ustawienie dla 2 głośników. Mplayer z tym configiem zajmuje procesor w granicach 170MHz-260MHz.

subcp=cp1250
vo=xv
vf=eq2,pp=hb/vb/dr/-al
channels=2
ao=alsa
af=extrastereo=1.8
softvol=1
softvol-max=200 
slang=pl,en
alang=pl,en
font=/usr/share/fonts/TTF/arial.ttf
sub-fuzziness=1 
subfont-autoscale=3
subfont-text-scale=4
subfont-osd-scale=6
fs=1

W tym pliku (~/.mplayer/config) podajesz parametr (subfont-autoscale=3), a taki gdy z shella dla mplayera (-subfont-autoscale 3). Spis parametrów znajdziesz tutaj - w polskim manualu.

31 grudnia, 2006

Conky

Napisane w: Linux, Oprogramowanie (1)

Free Image Hosting at www.ImageShack.us

Pewnego razu nie mając zajęcia, napisałem sobie pliczek .conkyrc, a w zasadzie złożyłem i przerobiłem z przykładów dostępnych na stronce conky'a. Postanowiłem podzielić się tym plikiem z wami.. Poniżej jest jego zawartość, a po prawej zrzut ekranu. Mam nadzieje że wam przyda się bardziej niż dla mnie.

# Conky configuration
background yes
use_xft yes
xftfont Monospace:size=10
xftalpha 0.8
out_to_console no
update_interval 2
total_run_times 0
own_window yes
own_window_type normal
own_window_transparent yes
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
double_buffer yes
draw_shades no
draw_outline no
draw_borders no
draw_graph_borders yes
stippled_borders 5
border_margin 4
border_width 1
default_color grey
default_shade_color black
default_outline_color black
alignment top_left
gap_x 10
gap_y 47
no_buffers no
uppercase no
cpu_avg_samples 2
net_avg_samples 2
override_utf8_locale yes
use_spacer no

TEXT
${alignc}${color}Procs:${color white} $processes ${color}Running:${color white} $running_processes
${alignc}${color}Uptime:${color white} $uptime ${color} Load:${color white} $loadavg
${alignc}${color}CPU: ${color white}${i2c 9191-0290 temp 2}°C$color - MB: ${color white}${i2c 9191-0290 temp 1}°C
$color$stippled_hr
${color}CPU:${color white} ${cpu cpu1}% ${cpubar cpu1}
${color}RAM:${color white} $memperc%  $mem/$memmax $membar
${color}Swap: ${color white}$swapperc% $swap/$swapmax ${swapbar}

${color}Name              PID     CPU%   MEM%
${color white} ${top name 1} ${top pid 1} ${top cpu 1} ${top mem 1}
${color white} ${top name 2} ${top pid 2} ${top cpu 2} ${top mem 2}
${color white} ${top name 3} ${top pid 3} ${top cpu 3} ${top mem 3}
${color white} ${top name 4} ${top pid 4} ${top cpu 4} ${top mem 4}
$color$stippled_hr
${alignc}File systems
${color}/dev/hda1${color white} ${fs_used_perc /}% ${fs_used /}/${fs_size /} ${fs_bar /}
${color}/dev/hda3${color white} ${fs_used_perc /home/}% ${fs_used /home/}/${fs_size /home/} ${fs_bar /home/}
${color}/dev/hda4${color white} ${fs_used_perc /mnt/nowa/}% ${fs_used /mnt/nowa/}/${fs_size /mnt/nowa/} ${fs_bar /mnt/nowa/}
${color}/dev/hda5${color white} ${fs_used_perc /mnt/filmy/}% ${fs_used /mnt/filmy/}/${fs_size /mnt/filmy/} ${fs_bar /mnt/filmy/}
$color$stippled_hr
${color}NET Up: ${color white}${upspeed eth0} k/s${offset 25}${color}${upspeedgraph eth0 12,0 000000 ffffff}
${color}NET Down: ${color white}${downspeed eth0}k/s${offset 25}${color}${downspeedgraph eth0 12,0 000000 ffffff}

${color}Inbound: ${color white}${tcp_portmon 1 32767 count}  ${color}Outbound: ${color white}${tcp_portmon 32768 61000 count}${alignr}${color}ALL: ${color white}${tcp_portmon 1 65535 count}
${color}Outbound Connection ${alignr} Remote Service/Port$color${color white}
 ${tcp_portmon 32768 61000 rhost 0} ${alignr} ${tcp_portmon 32768 61000 rservice 0}
 ${tcp_portmon 32768 61000 rhost 1} ${alignr} ${tcp_portmon 32768 61000 rservice 1}
 ${tcp_portmon 32768 61000 rhost 2} ${alignr} ${tcp_portmon 32768 61000 rservice 2}
 ${tcp_portmon 32768 61000 rhost 3} ${alignr} ${tcp_portmon 32768 61000 rservice 3}
 ${tcp_portmon 32768 61000 rhost 4} ${alignr} ${tcp_portmon 32768 61000 rservice 4}
 ${tcp_portmon 32768 61000 rhost 5} ${alignr} ${tcp_portmon 32768 61000 rservice 5}

14 października, 2006

3D pulpit w Linuksie

Napisane w: Linux, Oprogramowanie (1)

Ostatnio trafiłem na fajne filmiki Linux+XGL+Ekran dotykowy.
Część 1:

Część 2:

  • Zapowiedź świata post-nielegalnej kopii

    "Do napisania tego tekstu zainspirowała mnie duża liczba dyskusji przeprowadzonych na forach internetowych z różnymi ludźmi na temat oblicza piractwa komputerowego nielegalnego kopiowania oraz natury własności intelektualnej. Przy okazji tych dyskusji wypłynęła masa nieścisłości i dziur w obrazie rzeczywistości prezentowanym ludzkości przez organizacje takie jak ZAIKS, RIAA, MPAA, MAFIAA i różnorakich korporacyjnych lobbystów. Ponieważ nie znoszę kłamstw i niesprawiedliwości, postanowiłem, że nie będę dłużej tolerował panoszenia się fałszywej propagandy i napiszę ten artykuł, będący zwieńczeniem kilku lat przemyśleń, wspomnianych już dyskusji i argumentów użytych przez obie strony barykady."

    (Więcej..) osnews.pl [LINK]

  • Czy w projektach publicznych można kierować się zasadami ekonomii?

    "W dyskusjach nad racjonalnością ekonomiczną projektów informatycznych w administracji publicznej jest często pada argument, że "administracja publiczna nie kieruje się zasadą maksymalizacji zysku". Często to jest to tylko wygodna wymówka by odrzucić wszelkie próby obiektywizacji lub racjonalizacji wydatków publicznych."

    ipsec.pl[LINK]

  • Oszczędne państwo rozwijające swój rynek.. NIE!

    "Jesteśmy bogatym krajem. Nie musimy szukać tańszych, stabilniejszych i bezpieczniejszych rozwiązań w administracji publicznej, która wychodzi z założenia, że nie warto wspierać "małych i średnich przedsiębiorstw innowacyjnych" w Polsce."

    "Oto fakty!" na pppit.org.pl [LINK]

  • Android 1.0 działa na Qualcomm

    "Wszystko wskazuje na to, iż otwarty system Android przeznaczony na urządzenia mobilne działa na urządzeniu firmy Qualcomm."

    Filmiki z działającym androidem, trzeba to zobaczyć.

    OSNews.pl [LINK]

  • Rzeczpospolita windowsowa

    "Co by się działo, gdyby rząd zadekretował, że jedynym autem dopuszczonym na polskie drogi jest fiat albo citroën? A jednak pozwalamy, by państwo zmuszało nas do używania systemu operacyjnego Microsoftu"

    Gazeta wyborcza [LINK]

  • Wolność komputerów

    Czy programy pisane przez hobbistów mogą być równie dobre jak te tworzone przez wielkie koncerny? Ile rzeczywiście płacą za oprogramowanie zwykli użytkownicy i firmy? I czy w ogóle muszą za nie płacić?

    Rzeczpospolita [LINK]

  • Chiński UMPC z Linuksem

    Kto mi kupi takie cacko? :)

    Linux.pl [LINK]

  • Kto to jest własnowierca?

    "Propagujemy ideę zniesienia religijnego poddaństwa, zakazania poddawania dzieci religijnemu praniu mózgu i zapisywania ich do sekt i kościołów bez ich świadomej zgody. Informujemy o szkodliwych skutkach niewolnictwa religijnego. Służymy radami, jak wystąpić formalnie i duchowo z Kościoła. A przede wszystkim zmuszamy do myślenia! Jesteśmy religijnymi wyzwoleńcami niezależnymi od osób czerpiących zyski z kontroli nad ludzkimi umysłami i wierzeniami. Nowego, lepszego świata nie można zbudować na gruncie dyktatorskich tworów religijnych. Chcesz się od nich uniezależnić? Przyłącz się do nas! Zostań własnowiercą!"

    A ja pytam osochozi? Co oznacza słowo własnowierca? W co wiara? Z niektórych tekstów na tej stronie wynikać może że od tego przybywa nam sekt (w przeciwieństwie do ateizmu, który je potępia)..

    wlasnowierca.go.pl [LINK]

Foto

O blogu

3ED Blog - na różne tematy ale głównie w okół Linuksa.. Internetowy notatnik pisany w wolnych chwilach. Nie oczekuje zysku, dużej widowni - po prostu zapisuje tu to co mi przyjdzie do głowy.. Oczywiście komentarzem możesz dać mi temat do czego zachęcam.