AppIndicator de Servicios

17 05 2010

Retomo este blog de vuelta, he tenido mucho con el trabajo y la Universidad y ahora es tiempo de seguir con lo que voy encontrando, pero ahora el enfoque no es a lo que se puede encontrar un rato googleando, quiero aportar con mi granito de arena con lo que yo mismo voy haciendo (programitas y scripts ūüôā ), asi que comienzo:

Asi como lo dice el titulo agrego un AppIndicator que muestra servicios corriendo (solo para Ubuntu 10.04 en adelante), para los que no saben que son AppIndicators, es basicamente la implementaci√≥n de la bandeja del sistema pero mas usable, con una interface mas estandar y lo mejor de todo mucho mas f√°cil de programar (soy programador no puedo evitarlo ūüėõ ), ahora bien tengo una EeePC 900, como muchos saben es una netbook con pocos recursos (y vieja) por lo que tengo que quitar ciertos procesos para que cargue mas rapido en el booteo el sistema (de ahi sale porque hice la aplicacion), como nota el programa entero no lo hice yo, es de Sami Khan, Etopian Inc. http://www.etopian.com y yo le agregue el app-indicator y use el icono de gnome-do que viene en el set default de iconos en ubuntu Lucid,¬†bueno ya que explique voy a lo importante, el codigo:

#!/usr/bin/env python

# Gnome Tray Services - For Ubuntu and Debian Distros
# A simple application to help start and stop services from the tray.

# Sami Khan, Etopian Inc. http://www.etopian.com
# Start and shutdown init.d services.
# GPL Version 3 - http://www.fsf.org/licensing/licenses/gpl-3.0.html
# AppIndicator by Edder Rojas https://paindev.wordpress.com

# Todo:
# - Scan for running services each time the menu opens, so if services are
# started manually from the console, it knows about them.
# - Make a dialog for adding/removing any init.d service from the menu.s
# - Perhaps wrap the Services into a Class.

# Configure services
services = ['apache2',
           ['mysql', '/var/run/mysqld/mysqld.pid']]
           # 'memcached',
           #['cups', '/var/run/cups/cupsd.pid'],
           #['mpd', '/var/run/mpd/pid'],
#            'gpsd',
#            'bluetooth',
           #['bind9', '/var/run/bind/run/named.pid']]

# === Don't edit below here, unless you know what you are doing! ===

import gtk
import pygtk
import subprocess
import os.path
import time
import appindicator
import pynotify
from types import *

class TrayServicesIndicator:

	#available services
	services = ['apache2',
			   ['mysql', '/var/run/mysqld/mysqld.sock']]

	# class constructor
	def __init__(self):
		self.ind = appindicator.Indicator(
				       "example-simple-client",
				       "gnome-do-symbolic",
				       appindicator.CATEGORY_APPLICATION_STATUS)

		self.ind.set_status(appindicator.STATUS_ACTIVE)
		self.ind.set_attention_icon("gnome-do-symbolic")

		#create a menu
		self.menu = gtk.Menu()

		for service in self.services:
			if(type(service) is ListType):
				service_name = service[0]
				service_pid_file = service[1]
			else:
				service_name = service

			if(self.service_is_running(service)):
				self.menu.append(self.service_menu_item_create(service, service_name, self.menu, 'stop'))
			else:
				self.menu.append(self.service_menu_item_create(service, service_name, self.menu, 'start'))
		#menu separator
		#menuItem = gtk.SeparatorMenuItem()
		#self.menu.append(menuItem)
		#menuItem.show()

		# quit menu
		#menuItem = gtk.ImageMenuItem(gtk.STOCK_QUIT)
		#menuItem.connect('activate', self.quit_cb, self.menu)
		#menuItem.show()
		#self.menu.append(menuItem)

		self.ind.set_menu(self.menu)

	# quit application by menu
	def quit_cb(self, widget, data = None):
		if data:
			data.set_visible(False)
		gtk.main_quit()

	# run a notification
	def notify(self, service, msg):
		n = pynotify.Notification(service+" "+msg)
		n.show()

	# call to status change
	def service_change_state(self, path, op):
		subprocess.call(['gksudo','--description','Tray Indicator Services','/etc/init.d/'+path, op])

	# Check if the process is running
	def service_is_running(self, service):
		if(type(service) is ListType):
			service_pid_path = service[1]
			if (os.path.exists(service_pid_path)):
				return 1
		else:
			if(os.path.exists('/var/run/'+service+'.pid')):
				return 1
		return 0

	# alternate service widget base on his state
	def toggle_service(self, widget, service, service_name, menu, op):
		if(self.service_is_running(service)):
			self.service_change_state(service_name, 'stop')
			widget.set_active(False)
			self.notify(service_name, "not running")
		else:
			self.service_change_state(service_name, 'start')
			widget.set_active(True)
			self.notify(service_name, "running")

	# Create a menu item based on a process
	def service_menu_item_create(self, service, service_name, menu, op):
		menuItem = gtk.CheckMenuItem(service_name)
		if (self.service_is_running(service)):
			menuItem.set_active(True)
		else:
			menuItem.set_active(False)

		menuItem.connect("activate", self.toggle_service, service, service_name, menu, op)
		menuItem.show()

		return menuItem

# main gtk entry
def main():
	gtk.main()
	return 0

# application if runned directly
if __name__ == '__main__':
	trayServicesIndicator = TrayServicesIndicator()
	main()

Por el momento solo va a mostrar 2 servicios (apache y mysql), para agregar servicios es nada mas de agregarlos en el ejecutable la variable servicios, ademas este script puede ser corrido directamente con solo darle permisos de ejecuci√≥n, o bien para los mas traviesos pueden importarlo como una clases e interactuar, la idea es aprender mientras se hace la vida m√°s f√°cil, en lo personal es genial para reiniciar servicios ūüôā

Anuncios




Instalando Hamachi en Karmic

8 12 2009

Personalmente uso hamachi para tener acceso a maquinas que estan fuera de mi rango o acceso, casi siempre por limitaciones.

Con √©sta herramienta las barreras de no tener una ip p√ļblica apuntado a mi maquina en el puerto 22, quedan en el pasado, explico los pasos para ser instalarlo en Ubuntu Karmic:

Descargar la herramienta
wget http://files.hamachi.cc/linux/hamachi-0.9.9.9-20-lnx.tar.gz

Descomprimir

tar -xzvf hamachi-0.9.9.9-20-lnx.tar.gz

Instalar

cd hamachi-0.9.9.9-20-lnx/
sudo make install
sudo tuncfg

Hay que inicializar las configuraciones de hamachi

hamachi-init

Para ejecutarlo en consola solo basta con:

hamachi start

para evitar errores es bueno instalar el siguiente paquete:

sudo aptitude install upx-ucl

Para estos casos prefiero la interface grafica, que me evita ciertos dolores de cabeza relacionado con que se pierda la conexion, para mi gusto basta con hamachi-gui que su uso es instalación son muy sencillos.





Que conexiones tienes abiertas con tu netstat

22 10 2009

Después de un tiempo otra vez estoy de vuelta, con tanto afán con las Clases, el trabajo, en fin tantas cosas por hacer y APRENDER en tan poco tiempo.

Ultimamente me han dado ganas de aprender un poco sobre pruebas de penetración, conocer como está mi red (y la de los demas) por lo que mi dije a mi mismo porque no?

De acuerdo a estoy voy a preparar una serie de guías rápidas nada muy elaborado para aprender un poco sobre redes y como sacarle el máximo provecho.

Primero y muy importante, tener Linux o Mac si te gusta lo fancy (para windows pueden usar cygwin), netstat es una utilidad que viene por defecto en cada sistema (o deber√≠a) que es √ļtil para esos dias que te preguntas cuantas conexiones tendr√© abiertas? la forma es muy f√°cil de averiguar, antes de ejecutar cualquier comando de redes es bueno tener privilegios de root (administrador para los que no saben ūüėõ ), ya como root dejamos caer el comando:

netstat -pnat | grep ESTABLISHED

Explico brevememente, el parametro -p tiene la función de mostrar el nombre y el pid del programa (ayuda mucho a identificar que pasa con ese puerto). Siguiente parametro -n éste muestra ips. y los dos ultimos -a que muestra los sockets que se escuchan y los que nos se escuchan (he aqui el filtro con Grep), -t se refiere a tcp.

Le hago un pipe a Grep para que filtre los puertos y solo me muestre los que esten conectados (ESTABLISHED) y con eso es todo, ya saben cuantas y cuales aplicaciones est√°n conectadas actualmente.

Si desean (y son muy Geeks) pueden crear un script con watch o bien hacen un Script y se lo pasan a conky para que muestre las conexiones abiertas, opciones existen y muchas ūüėÄ





Autenticando Trac con multiples proyectos usando PAM

2 06 2009

Una forma de facilitar la vida es tener un sistema de autenticacion general para el sistema, por lo que me tope con PAM que practicamente utiliza los mismos usuarios del sistema (linux) para autenticar, en este caso vamos a usar el modulo para Apache, es necesario instalar los paquetes necesarios:

sudo aptitude install libapache2-mod-auth-pam libapache2-mod-auth-sys-group

Luego en la configuracion del apache para sitio default, tal y como lo hable en otro post, hay que agregar el siguiente apartado:

<LocationMatch "/projects/[[:alnum:]]+/login">
AuthPAM_Enabled On
AuthType Basic
AuthName "Trac"
AuthUserFile /etc/shadow
Require valid-user
Require group developers
</LocationMatch>

Es necesario darle permisos a Apache para que pueda leer los archivos de usuarios, o de lo contrario nunca va a autenticar:

sudo adduser www-data shadow

Eso solo le da permiso de lectura, es necesario reiniciar el servidor de apache para que surta efecto, otra cosa es que si el usuario no pertenece a el grupo developers o el que se haya definido no va a poder autenticar tampoco.





Probando chromium Alpha en Ubuntu Jaunty

2 06 2009

Es increible el estado maduro en el que se encuentra el desarrollo de Google Chrome para linux (Chromium), tanto asi que a no ser por la falta de soporte a flash lo usaria para todo :P.

Un screenshot de Chromium en Jaunty con mi Eeepc 900

chromium

Para instalarlo hay disponible un repositorio PPA:

https://launchpad.net/~chromium-daily/+archive/ppa





Temas para la ventana de conversaci√≥n de Pidgin

22 05 2009

Soy muy fanático del Eye-candy, por lo que hoy que tenia un poco de tiempo libre, me di la tarea de buscar alguna manera de mejorar la ventanas de conversación de Pidgin, y me encontré con ésta página.

Para muestra un botón:

pidgin-webkit

Casi siempre los plugins de Pidgin son difíciles de configurar y en este caso fue la excepción, pero aqui no voy a explicar como compilarlo si no voy a hacer algo mejor, voy a compartirlo ya compilado y listo para usar.

Pidgin-webkit.tar.gz

Enjoy! ūüėÄ

Nota: Probado en Ubuntu Intrepid Ibex, Jaunty Jacktalope y en Hardy no funciona.





Habilitar Eee pc 900 multi touch en Ubuntu Jaunty

18 05 2009

Ultimamente las netbooks tiene multi touch ( multi gestos con varios dedos) y sin excepción mi Eee pc 900, recién instalé Ubuntu Jaunty Jacktalope, esperando que el multi touch funcionara de caja, el cual no fue así, además el mouse se sentía como lento o con poca sensibilidad y gracias a un tutorial encontré la manera de habilitar el multi touch, pero no me función, luego de investigación encontré la manera de habilitar el driver para utilizar el archivo del tutorial.

Editando el archivo /etc/X11/xorg.conf hay que a√Īadir la secci√≥n:

Section "InputDevice"
Identifier      "Configured Mouse"
Driver          "synaptics"
Option          "SHMConfig" "true"
EndSection

Luego de guardar el archivo hay que cerrar la sessión y entrar de nuevo para que los cambios surtan efecto, luego editar el archivo de /etc/hal/fdi/policy/11-x11-synaptics.fdi

sudo vim /etc/hal/fdi/policy/11-x11-synaptics.fdi

Mi archivo de configuración es de ésta manera para que el gesto con dos dedos al dar tab sea el del botón central de un mouse:

< ?xml version="1.0" encoding="ISO-8859-1"?>
<deviceinfo version="0.2">
 <device>
   <match key="info.capabilities" contains="input.touchpad">
       <merge key="input.x11_driver" type="string">synaptics</merge>
       <merge key="input.x11_options.SHMConfig" type="string">On</merge>
       <merge key="input.x11_options.EmulateTwoFingerMinZ" type="string">90</merge>
       <merge key="input.x11_options.VertTwoFingerScroll" type="string">1</merge>
       <merge key="input.x11_options.HorizTwoFingerScroll" type="string">1</merge>
       <merge key="input.x11_options.TapButton1" type="string">1</merge>
   </match>
 </device>
</deviceinfo>

Hay que cerrar la sessión y volver a entrar para que los cambios surtan efecto.