jueves, 12 de agosto de 2010

Blogilo

Despúes de tanto tiempo, sin internet, vengo para tratar de revivir el blog. Como ? Ja, eso es lo dificil. Asique de a poco voy a tener que postear la mayoría de las cosas que encuentre que espero que les sea de utilidad.

Voy a empezar con un programa que encontré de casualidad en los paquetes de mi F13 (Fedora 13 Goddard) y decidí instalarlo es el KBlogilo o Blogilo, como les guste llamarlo. BilboBlogilo es un programa OpenSource destinado a generar post para los blogs (en criollo, entradas para los blog). Es una herramienta bastante sensilla, el cual nos permite editar en modo texto común y corriente o en modo de editor de html, como también darnos una vista previa del post antes de subirlo al servidor. Se puede trabajar tranquilamente OffLine para realizar el documento más prolijo y tranquilo.

Opciones de alineación, de coloración, de edición, de inserción y de la mayoría de las palabras referentes a texto que finalizan en -ción se pueden encontrar facilmente en los botones que se encuentran arriba del texto que estamos ingresando.

Detecta si el servidor soporta adjuntar archivos, como edición de categorías y demás. También soporta múltiples cuentas en simultáneo y edición de posts anteriores (si el server te lo banca).

Corrector ortográfico, insertor de imagen, editor de fuente, etc, etc, etc. Un programa bastante minimalista y completo, con lo justo e indispensable. Un programa bastante recomendado para los que escriben en sus blog continuamente, a diferencia de mí.

martes, 16 de febrero de 2010

Mi Escritorio Awesome

Bueno, esta entrada es para que vean como esta quedando mi escritorio despues de pasar de GNOME a Awesome.

Los archivos de configuración esta vez sí pueden copy-pastearlos y si los ponen en su maquina les va a andar (Ubuntu 9.10)

rc.lua ::


-- Standard awesome library
require("awful")
-- Theme handling library
require("beautiful")
-- Notification library
require("naughty")
-- Load Vicious widgets
-- require("vicious")
-- Load Debian menu entries
require("debian.menu")

-- {{{ Variable definitions
-- Themes define colours, icons, and wallpapers
-- The default is a dark theme
--theme_path = "/usr/share/awesome/themes/default/theme.lua"
-- Uncommment this for a lighter theme
theme_path = "/home/pincha/.config/awesome/themes/sky/theme.lua"

-- Actually load theme
beautiful.init(theme_path)

-- This is used later as the default terminal and editor to run.
terminal = "gnome-terminal"
editor = os.getenv("EDITOR") or "editor"
editor_cmd = terminal .. " -e " .. editor
musicplayer= "rhythmbox-client"
videoplayer="gmplayer"
volumen="alsamixergui"
navegador= terminal .. " -e mc"
iceweasel="chromium-browser"
emesene= "emesene "

-- Default modkey.
-- Usually, Mod4 is the key with a logo between Control and Alt.
-- If you do not like this or do not have such a key,
-- I suggest you to remap Mod4 to another key using xmodmap or other tools.
-- However, you can use another modifier like Mod1, but it may interact with others.
modkey = "Mod4"

-- Table of layouts to cover with awful.layout.inc, order matters.
layouts =
{
awful.layout.suit.tile,
awful.layout.suit.tile.left,
awful.layout.suit.tile.bottom,
awful.layout.suit.tile.top,
awful.layout.suit.fair,
awful.layout.suit.fair.horizontal,
awful.layout.suit.max,
awful.layout.suit.max.fullscreen,
awful.layout.suit.magnifier,
awful.layout.suit.floating
}

-- Table of clients that should be set floating. The index may be either
-- the application class or instance. The instance is useful when running
-- a console app in a terminal like (Music on Console)
-- x-terminal-emulator -name mocp -e mocp
floatapps =
{
-- by class
["MPlayer"] = true,
["pinentry"] = true,
["gimp"] = true,
-- by instance
["mocp"] = true
}

-- Autorun programs
autorun = true
autorunApps =
{
-- "feh --bg-scale /home/pincha/Imágenes/lesbian.jpg",
-- "sh ~/.awesome/widget_init.sh",
"sh ~/wallpaper.sh",
}
if autorun then
for app = 1, #autorunApps do
awful.util.spawn(autorunApps[app])
end
end

-- Applications to be moved to a pre-defined tag by class or instance.
-- Use the screen and tags indices.
apptags =
{
-- ["Firefox"] = { screen = 1, tag = 2 },
["mocp"] = { screen = 2, tag = 4 },
}

-- Define if we want to use titlebar on all applications.
use_titlebar = false
-- }}}

-- {{{ Tags
-- Define tags table.
tags = {}
for s = 1, screen.count() do
-- Each screen has its own tag table.
tags[s] = {}
-- Create 9 tags per screen.
for tagnumber = 1, 9 do
tags[s][tagnumber] = tag(tagnumber)
-- Add tags to screen one by one
tags[s][tagnumber].screen = s
awful.layout.set(layouts[1], tags[s][tagnumber])
end
-- I'm sure you want to see at least one tag.
tags[s][1].selected = true
end
-- }}}

-- {{{ Wibox
-- Create a textbox widget
mytextbox = widget({ type = "textbox", align = "right" })
-- Set the default text in textbox
mytextbox.text = " " .. awesome.release .. " "

-- Create a laucher widget and a main menu
myawesomemenu = {
{ "manual", terminal .. " -e man awesome" },
{ "edit config", terminal .. "nano ~/.config/awesome/rc.lua" },
{ "restart", awesome.restart },
{ "quit", awesome.quit }
}

mymainmenu = awful.menu.new({ items = { { "awesome", myawesomemenu, beautiful.awesome_icon },
-- { "open terminal", terminal },
-- { "Debian", debian.menu.Debian_menu.Debian }
{ "Musica", musicplayer },
{ "Peliculas", videoplayer },
{ "Archivos", navegador },
{ "Navegador", iceweasel },
{ "Volumen", volumen },
{"emesene",emesene},
}
})

mylauncher = awful.widget.launcher({ image = image(beautiful.awesome_icon),
menu = mymainmenu })

-- Create a systray
mysystray = widget({ type = "systray", align = "right" })




-- Another Test adding widgets whit tubes
wifiwidget = widget({type = "textbox", name = "wifiwidget", align = "right" })
-- Function
function wifiInfo(adapter)
spacer = " "
local f = io.open("/sys/class/net/wlan0/wireless/link")
local wifiStrength = f:read()
if wifiStrength == "0" then
wifiStrength = "Network Down"
else
wifiStrength = "Wifi:"..spacer..wifiStrength.."%"
end
wifiwidget.text = spacer..wifiStrength..spacer
f:close()
end

-- Here another one but this time, something graphic
batterywidget = widget({type = "textbox", name = "batterywidget", align = "right" })
-- Function
function batteryInfo(adapter)
spacer = " "
local fcur = io.open("/sys/class/power_supply/BAT1/energy_now")
local fcap = io.open("/sys/class/power_supply/BAT1/energy_full")
local fsta = io.open("/sys/class/power_supply/BAT1/status")
local cur = fcur:read()
local cap = fcap:read()
local sta = fsta:read()
local battery = math.floor(cur * 100 / cap)
if sta:match("Charging") then
dir = "^"
battery = "A/C"
elseif sta:match("Discharging") then
dir = "v"
if tonumber(battery) > 25 and tonumber(battery) < 75 then battery = battery elseif tonumber(battery) < 25 then if tonumber(battery) < 10 then naughty.notify({ title = "Battery Warning" , text = "Battery low!"..spacer..battery.."%"..spacer.."left!" , timeout = 5 , position = "top_right" , fg = beautiful.fg_focus , bg = beautiful.bg_focus }) end battery = battery else battery = battery end else dir = "=" battery = "A/C" end batterywidget.text = spacer.."Bat:"..spacer..dir..battery..dir..spacer fcur:close() fcap:close() fsta:close() end -- Create a wibox for each screen and add it mywibox = {} mypromptbox = {} mylayoutbox = {} mytaglist = {} mytaglist.buttons = awful.util.table.join( awful.button({ }, 1, awful.tag.viewonly), awful.button({ modkey }, 1, awful.client.movetotag), awful.button({ }, 3, function (tag) tag.selected = not tag.selected end), awful.button({ modkey }, 3, awful.client.toggletag), awful.button({ }, 4, awful.tag.viewnext), awful.button({ }, 5, awful.tag.viewprev) ) mytasklist = {} mytasklist.buttons = awful.util.table.join( awful.button({ }, 1, function (c) if not c:isvisible() then awful.tag.viewonly(c:tags()[1]) end client.focus = c c:raise() end), awful.button({ }, 3, function () if instance then instance:hide() instance = nil else instance = awful.menu.clients({ width=250 }) end end), awful.button({ }, 4, function () awful.client.focus.byidx(1) if client.focus then client.focus:raise() end end), awful.button({ }, 5, function () awful.client.focus.byidx(-1) if client.focus then client.focus:raise() end end)) for s = 1, screen.count() do -- Create a promptbox for each screen mypromptbox[s] = awful.widget.prompt({ align = "left" }) -- Create an imagebox widget which will contains an icon indicating which layout we're using. -- Remember say thanks to TheFatal -- We need one layoutbox per screen. mylayoutbox[s] = widget({ type = "imagebox", align = "right" }) mylayoutbox[s]:buttons(awful.util.table.join( awful.button({ }, 1, function () awful.layout.inc(layouts, 1) end), awful.button({ }, 3, function () awful.layout.inc(layouts, -1) end), awful.button({ }, 4, function () awful.layout.inc(layouts, 1) end), awful.button({ }, 5, function () awful.layout.inc(layouts, -1) end))) -- Create a taglist widget mytaglist[s] = awful.widget.taglist(s, awful.widget.taglist.label.all, mytaglist.buttons) -- Create a tasklist widget mytasklist[s] = awful.widget.tasklist(function(c) return awful.widget.tasklist.label.currenttags(c, s) end, mytasklist.buttons) -- Create the wibox mywibox[s] = wibox({ position = "top", fg = beautiful.fg_normal, bg = beautiful.bg_normal }) -- Add widgets to the wibox - order matters mywibox[s].widgets = { mylauncher, mytaglist[s], mytasklist[s], mypromptbox[s], wifiwidget, batterywidget, mytextbox, mylayoutbox[s], s == 1 and mysystray or nil } mywibox[s].screen = s end -- }}} -- {{{ Mouse bindings root.buttons(awful.util.table.join( awful.button({ }, 3, function () mymainmenu:toggle() end), awful.button({ }, 4, awful.tag.viewnext), awful.button({ }, 5, awful.tag.viewprev) )) -- }}} -- {{{ Key bindings globalkeys = awful.util.table.join( awful.key({ modkey, }, "Left", awful.tag.viewprev ), awful.key({ modkey, }, "Right", awful.tag.viewnext ), awful.key({ modkey, }, "Escape", awful.tag.history.restore), awful.key({ modkey, }, "j", function () awful.client.focus.byidx( 1) if client.focus then client.focus:raise() end end), awful.key({ modkey, }, "k", function () awful.client.focus.byidx(-1) if client.focus then client.focus:raise() end end), awful.key({ modkey, }, "w", function () mymainmenu:show(true) end), -- Layout manipulation awful.key({ modkey, "Shift" }, "j", function () awful.client.swap.byidx( 1) end), awful.key({ modkey, "Shift" }, "k", function () awful.client.swap.byidx( -1) end), awful.key({ modkey, "Control" }, "j", function () awful.screen.focus( 1) end), awful.key({ modkey, "Control" }, "k", function () awful.screen.focus(-1) end), awful.key({ modkey, }, "u", awful.client.urgent.jumpto), awful.key({ modkey, }, "Tab", function () awful.client.focus.history.previous() if client.focus then client.focus:raise() end end), -- Standard program awful.key({ modkey, }, "Return", function () awful.util.spawn(terminal) end), awful.key({ modkey, "Control" }, "r", awesome.restart), awful.key({ modkey, "Shift" }, "q", awesome.quit), awful.key({ modkey, }, "l", function () awful.tag.incmwfact( 0.05) end), awful.key({ modkey, }, "h", function () awful.tag.incmwfact(-0.05) end), awful.key({ modkey, "Shift" }, "h", function () awful.tag.incnmaster( 1) end), awful.key({ modkey, "Shift" }, "l", function () awful.tag.incnmaster(-1) end), awful.key({ modkey, "Control" }, "h", function () awful.tag.incncol( 1) end), awful.key({ modkey, "Control" }, "l", function () awful.tag.incncol(-1) end), awful.key({ modkey, }, "space", function () awful.layout.inc(layouts, 1) end), awful.key({ modkey, "Shift" }, "space", function () awful.layout.inc(layouts, -1) end), awful.key({modkey,},"i",function() awful.util.spawn(iceweasel,false) end), -- Prompt awful.key({ modkey }, "r", function () mypromptbox[mouse.screen]:run() end), awful.key({ modkey }, "x", function () awful.prompt.run({ prompt = "Run Lua code: " }, mypromptbox[mouse.screen].widget, awful.util.eval, nil, awful.util.getdir("cache") .. "/history_eval") end) ) -- Client awful tagging: this is useful to tag some clients and then do stuff like move to tag on them clientkeys = awful.util.table.join( awful.key({ modkey, }, "f", function (c) c.fullscreen = not c.fullscreen end), awful.key({ modkey, "Shift" }, "c", function (c) c:kill() end), awful.key({ modkey, "Control" }, "space", awful.client.floating.toggle ), awful.key({ modkey, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end), awful.key({ modkey, }, "o", awful.client.movetoscreen ), -- awful.key({ modkey, }, "i" , iceweasel ), awful.key({ modkey, "Shift" }, "r", function (c) c:redraw() end), awful.key({ modkey }, "t", awful.client.togglemarked), awful.key({ modkey,}, "m", function (c) c.maximized_horizontal = not c.maximized_horizontal c.maximized_vertical = not c.maximized_vertical end) ) -- Compute the maximum number of digit we need, limited to 9 keynumber = 0 for s = 1, screen.count() do keynumber = math.min(9, math.max(#tags[s], keynumber)); end for i = 1, keynumber do globalkeys = awful.util.table.join(globalkeys, awful.key({ modkey }, i, function () local screen = mouse.screen if tags[screen][i] then awful.tag.viewonly(tags[screen][i]) end end), awful.key({ modkey, "Control" }, i, function () local screen = mouse.screen if tags[screen][i] then tags[screen][i].selected = not tags[screen][i].selected end end), awful.key({ modkey, "Shift" }, i, function () if client.focus and tags[client.focus.screen][i] then awful.client.movetotag(tags[client.focus.screen][i]) end end), awful.key({ modkey, "Control", "Shift" }, i, function () if client.focus and tags[client.focus.screen][i] then awful.client.toggletag(tags[client.focus.screen][i]) end end), awful.key({ modkey, "Shift" }, "F" .. i, function () local screen = mouse.screen if tags[screen][i] then for k, c in pairs(awful.client.getmarked()) do awful.client.movetotag(tags[screen][i], c) end end end)) end -- Set keys root.keys(globalkeys) -- }}} -- {{{ Hooks -- My Widgets awful.hooks.timer.register(3, function() wifiInfo("wlan0") end) awful.hooks.timer.register(10, function() batteryInfo("BAT1") end) -- Hook function to execute when focusing a client. awful.hooks.focus.register(function (c) if not awful.client.ismarked(c) then c.border_color = beautiful.border_focus end end) -- Hook function to execute when unfocusing a client. awful.hooks.unfocus.register(function (c) if not awful.client.ismarked(c) then c.border_color = beautiful.border_normal end end) -- Hook function to execute when marking a client awful.hooks.marked.register(function (c) c.border_color = beautiful.border_marked end) -- Hook function to execute when unmarking a client. awful.hooks.unmarked.register(function (c) c.border_color = beautiful.border_focus end) -- Hook function to execute when the mouse enters a client. awful.hooks.mouse_enter.register(function (c) -- Sloppy focus, but disabled for magnifier layout if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier and awful.client.focus.filter(c) then client.focus = c end end) -- Hook function to execute when a new client appears. awful.hooks.manage.register(function (c, startup) -- If we are not managing this application at startup, -- move it to the screen where the mouse is. -- We only do it for filtered windows (i.e. no dock, etc). if not startup and awful.client.focus.filter(c) then c.screen = mouse.screen end if use_titlebar then -- Add a titlebar awful.titlebar.add(c, { modkey = modkey }) end -- Add mouse bindings c:buttons(awful.util.table.join( awful.button({ }, 1, function (c) client.focus = c; c:raise() end), awful.button({ modkey }, 1, awful.mouse.client.move), awful.button({ modkey }, 3, awful.mouse.client.resize) )) -- New client may not receive focus -- if they're not focusable, so set border anyway. c.border_width = beautiful.border_width c.border_color = beautiful.border_normal -- Check if the application should be floating. local cls = c.class local inst = c.instance if floatapps[cls] ~= nil then awful.client.floating.set(c, floatapps[cls]) elseif floatapps[inst] ~= nil then awful.client.floating.set(c, floatapps[inst]) end -- Check application->screen/tag mappings.
local target
if apptags[cls] then
target = apptags[cls]
elseif apptags[inst] then
target = apptags[inst]
end
if target then
c.screen = target.screen
awful.client.movetotag(tags[target.screen][target.tag], c)
end

-- Do this after tag mapping, so you don't see it on the wrong tag for a split second.
client.focus = c

-- Set key bindings
c:keys(clientkeys)

-- Set the windows at the slave,
-- i.e. put it at the end of others instead of setting it master.
-- awful.client.setslave(c)

-- Honor size hints: if you want to drop the gaps between windows, set this to false.
-- c.size_hints_honor = false
end)

-- Hook function to execute when arranging the screen.
-- (tag switch, new client, etc)
awful.hooks.arrange.register(function (screen)
local layout = awful.layout.getname(awful.layout.get(screen))
if layout and beautiful["layout_" ..layout] then
mylayoutbox[screen].image = image(beautiful["layout_" .. layout])
else
mylayoutbox[screen].image = nil
end

-- Give focus to the latest client in history if no window has focus
-- or if the current window is a desktop or a dock one.
if not client.focus then
local c = awful.client.focus.history.get(screen, 0)
if c then client.focus = c end
end
end)

-- Hook called every minute
awful.hooks.timer.register(60, function ()
mytextbox.text = os.date(" %a %b %d, %H:%M ")
end)

sábado, 28 de noviembre de 2009

nVidia Widget

Para todos aquellos que tengan una placa de video nVidia, y no tengan ganas de ir hasta la página y poner Bajar drivers, nVidia lanzó recientemente un Widget que permíte buscar el controlador facilmente, sin tener que entrar a la pagina de ésta.

Existen 2 posibilidades, la versión vertical :

Y la versión horizontal (me queda fuera de bloque por problemas con el diseño del blog) :


Ambas pudiendose colocar en cualquier blog/pagina que querramos.

viernes, 27 de noviembre de 2009

Editar particiones NTFS

Este va a ser un post corto, tratando de ser lo mas simple posible, pero no dejando de ser informatívo.

Para todos aquellos que tengan una partición NTFS en su disco, y quieran modificar su tamaño con gParted, van a necesitar una herramienta para que el programa pueda modificar el tamaño. La herramienta se llama ntfsprogs y aunque parece algo minúsculo, lo que hace es brindarle soporte a gParted y otros programas sobre particiones NTFS, pudiendo así modificar el tamaño de una partición de XP por ejemplo.

domingo, 1 de noviembre de 2009

Modificando sudoers manualmente

Hace unos dias tuve un problema de permisos con el N810 y se me bloquearon todos los comandos que necesitan usar "sudo" para ejecutarse. Entonces me puse a averiguar sobre como modificar la lista de usuarios sudos para poder resolver el problema que me surgio. Como seguramente algunos no tienen, antes que nada voy a tratar de explicar que es la sudoers y para que sirve el comando sudo.


Como toda distribución basada en Debian, los permisos para ejecutar acciones "administrativas" o importante para la maquina se maneja con comandos con permisos especiales, ya sea mediante el uso de "root" o con el comando "sudo". Si queremos apagar la maquina, por decir un ejemplo, desde consola, tenemos que poner
sudo halt
(no siempre es necesario poner sudo al comando halt si los permisos de usuario estan configurados para poder utilizarlo) o logearnos como super-usuario (root) y ejecutar el comando, pero toma demasiado tiempo.

Ahora bien, una vez entendido lo de arriba procederemos a lo que es sudoers. Es un archivo el cual contiene una lista con los usuarios con la cual pueden ejecutar operaciones administrativas, como apagar el sistema. Cuando instalamos la distribución, automaticamente se agrega el usuario a la lista de sudo-usuarios. Pero cuando añadimos un nuevo usuario, o queremos que el que ya esta no pida la contraseña cuando usamos sudo (que es altamente no recomendado por cuestiones de seguridad) tenemos que modificar el archivo sudoers para lograrlo. Si hasta este punto entendistes, ahora viene el momento de aplicar lo resumido arriba. El archivo SUDOERS está en la carpeta /etc/ y tiene permisos para no ser modificado por cualquiera. Entonces o bien probamos con
sudo nano /etc/sudoers
o la mas larga
sudo su nano /etc/sudoers
Una vez abierto el archivo, tiene que ser algo así...


Este es MI sudoers, pero el suyo o el de cualquiera que sepa un poco mas o un poco menos que yo lo puede tener diferente, respecto a su uso/gusto.

Ahora bien, para modificar algun elemento tenemos que tener en cuenta lo siguiente :

Usuario       Host = (usuario privilegiado) comando

Que quiere decir eso ? Bien, ahora lo explicaré paso por paso.

Usuario : Puede ser tanto root como cualquier otro usuario que tengamos en la maquina
Host : Es la maquina en la cual está el usuario (casi siempre será ALL, cualquier maquina)
Usuario Privilegiado : Este elemento es opcional. Establece si algun otro usuario a travez del que estemos definiendo, puede ejecutar algun comando de los ingresados
Comando : Establece los comandos que pueda utilizar. En el caso de root, por defecto y es recomendable que no lo modifiquen, es ALL, que quiere decir cualquier comando.

Una vez entendido esto, podemos agregar, modificar o quitar permisos a los usuarios que esten en la maquina, pero recordá que tenes que tener claro lo que estas haciendo, porque sino no podremos ejecutar comandos con sudo, y posiblemente tampoco como root.
Ahora bien, volviendo a mi problema, el archivo sudoers en el N810 posee permisos no para todos los comandos, sino para algunos definidos de fabrica para que no se puedan realizar varias cosas, solamente las indispensables (para ellos). Entonces si recordamos un poco lo leido, lo unico que tenemos que hacer es agregar la siguiente linea al final del archivo.
user ALL = (ALL) ALL
Con esto establecimos que el usuario user (el que viene de fabrica) pueda ejecutar cualquier comando. No es necesario modificar los permisos que estan mas arriba, ya que directamente al ingresar ultima esta linea, obia los anteriores, porque ya estan integrados en ALL.
Espero que les alla sido util esta información.

FUENTE : No tiene fuente, ya que lo hice yo con la practica (no se recomienda realizar mis formas de entender el archivo ya que tuve que formatear el dispositivo un par de veces. En esta guia traté de explicar a groso modo, el funcionamiento de sudoers, para que, a su riesgo, juegen un poco con los permisos)